Initial commit, woeking client/server connection, player movement

This commit is contained in:
2021-01-30 12:17:27 +02:00
commit 30e5d27b33
23 changed files with 113005 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
node_modules
server/dist

2317
client/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

32
client/package.json Normal file
View File

@@ -0,0 +1,32 @@
{
"name": "globagamejam2021",
"version": "1.0.0",
"description": "",
"main": "dist/app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"tsc": "tsc -w"
},
"repository": {
"type": "git",
"url": "git+https://github.com/rdarius/global-game-jam-2021.git"
},
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/rdarius/global-game-jam-2021/issues"
},
"homepage": "https://github.com/rdarius/global-game-jam-2021#readme",
"dependencies": {
"cors": "^2.8.5",
"express": "^4.17.1",
"p5": "^1.2.0",
"socket.io": "^3.1.0"
},
"devDependencies": {
"@types/express": "^4.17.11",
"@types/socket.io": "^2.1.13",
"@types/p5": "^0.9.1",
"typescript": "^4.1.3"
}
}

214
client/src/app.ts Normal file
View File

@@ -0,0 +1,214 @@
var canvas;
var tileTypes, mapTiles = [];
const PLAYER_SPEED = 10;
var Player = {
id: '',
name: '',
position: {x:0, y:0},
color: '#' + (Math.floor(Math.random() * 256)).toString(16) + (Math.floor(Math.random() * 256)).toString(16) + (Math.floor(Math.random() * 256)).toString(16),
keysPressed: [],
}
var OtherPlayers = []
var KEY_W = 87;
var KEY_A = 65;
var KEY_S = 83;
var KEY_D = 68;
let grassImage;
function preload() {
grassImage = loadImage('grass.png');
}
function onKeyDown(e) {
Player.keysPressed[e.keyCode] = true;
}
function onKeyUp(e) {
Player.keysPressed[e.keyCode] = false;
}
function onContextMenu() {
Player.keysPressed = [];
}
function onCanvasResize() {
var w = window.innerWidth;
var h = window.innerHeight;
var scale = 16/9;
var windowScale = w/h;
if (scale > windowScale) {
// higher
canvas.style.width = w + 'px';
canvas.style.height = (w/16*9) + 'px';
} else {
// wider
canvas.style.width = (h/9*16) + 'px';
canvas.style.height = h + 'px';
}
}
function drawPlayer(player, x, y) {
stroke(0, 0, 0)
strokeWeight(5)
// translate(-width/2, -height/2)
fill(player.color)
ellipse(x, y, 80, 80);
textSize(32);
fill(255, 255, 255);
textAlign(CENTER, CENTER);
text(player.name, x - 300,y - 100, 600, 50);
}
function relativePosition(pos1, pos2) {
return {
x: pos2.x - pos1.x,
y: pos2.y - pos1.y,
}
}
function buildMap() {
tileTypes = {
grass: {
image: grassImage
}
}
for (let x = 0; x < 10; x++) {
mapTiles[x] = []
for (let y = 0; y < 6; y++) {
mapTiles[x][y] = {
tile: tileTypes.grass.image,
x: x * 380,
y: y * 380,
}
}
}
console.log(mapTiles)
}
function isVisible(middlePoint, visibleAreaSize, position, size) {
if (
position.x - size.width > middlePoint.x - visibleAreaSize.width/2 &&
position.x + size.width < middlePoint.x + visibleAreaSize.width/2 &&
position.y - size.height > middlePoint.y - visibleAreaSize.height/2 &&
position.y + size.height < middlePoint.y + visibleAreaSize.height/2
) {
// console.log('visible')
return true;
}
// console.log('not visible')
return false;
}
function distance(p1, p2) {
return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2))
}
function drawMap() {
for (let xTiles of mapTiles) {
for (let yTile of xTiles) {
if (distance(Player.position, {x: yTile.x, y: yTile.y}) < 2000) {
image(yTile.tile, yTile.x + width/2, yTile.y + height/2)
}
}
}
}
function setup() {
// TESTING //
// END: TESTING //
buildMap()
createCanvas(1920, 1080);
canvas = document.querySelector('canvas')
onCanvasResize()
window.addEventListener('resize', onCanvasResize)
document.addEventListener('keydown', onKeyDown)
document.addEventListener('keyup', onKeyUp)
document.addEventListener("contextmenu", onContextMenu);
}
function draw() {
translate(-Player.position.x, Player.position.y)
drawMap()
for (let otherPlayer of OtherPlayers) {
drawPlayer(otherPlayer, otherPlayer.position.x + width/2, -otherPlayer.position.y + height/2)
}
translate(Player.position.x, -Player.position.y)
drawPlayer(Player, width/2, height/2)
text(Math.floor(Player.position.x) + ':' + Math.floor(Player.position.y), width/2, 50)
let previousPosition = {
x: Player.position.x,
y: Player.position.y,
}
if (Player.keysPressed[KEY_A]) {
Player.position.x -= PLAYER_SPEED;
}
if (Player.keysPressed[KEY_D]) {
Player.position.x += PLAYER_SPEED;
}
if (Player.keysPressed[KEY_W]) {
Player.position.y += PLAYER_SPEED;
}
if (Player.keysPressed[KEY_S]) {
Player.position.y -= PLAYER_SPEED;
}
if (Player.position.x !== previousPosition.x || Player.position.y !== previousPosition.y) {
socket.emit('i-moved', {x: Player.position.x, y: Player.position.y})
}
}
socket.on('your-info', function (playerData) {
Player.name = playerData.name;
Player.position = playerData.position;
Player.color = playerData.color;
Player.id = playerData.id;
})
socket.on('players-info', function (playersData) {
for (let playerData of playersData) {
if (Player.id !== playerData.id) {
OtherPlayers.push({
name: playerData.name,
position: playerData.position,
color: playerData.color,
id: playerData.id,
})
}
}
})
socket.on('new-player-joined', function (playerData) {
if (Player.id !== playerData.id) {
OtherPlayers.push({
name: playerData.name,
position: playerData.position,
color: playerData.color,
id: playerData.id,
})
}
})
socket.on('player-moved', function (movedPlayerData) {
for (let playerData of OtherPlayers) {
if (Player.id !== movedPlayerData.id && movedPlayerData.id === playerData.id) {
playerData.position = movedPlayerData.position;
}
}
})

View File

@@ -0,0 +1,178 @@
"use strict";
var canvas;
var tileTypes, mapTiles = [];
var PLAYER_SPEED = 10;
var Player = {
id: '',
name: '',
position: { x: 0, y: 0 },
color: '#' + (Math.floor(Math.random() * 256)).toString(16) + (Math.floor(Math.random() * 256)).toString(16) + (Math.floor(Math.random() * 256)).toString(16),
keysPressed: [],
};
var OtherPlayers = [];
var KEY_W = 87;
var KEY_A = 65;
var KEY_S = 83;
var KEY_D = 68;
var grassImage;
function preload() {
grassImage = loadImage('grass.png');
}
function onKeyDown(e) {
Player.keysPressed[e.keyCode] = true;
}
function onKeyUp(e) {
Player.keysPressed[e.keyCode] = false;
}
function onContextMenu() {
Player.keysPressed = [];
}
function onCanvasResize() {
var w = window.innerWidth;
var h = window.innerHeight;
var scale = 16 / 9;
var windowScale = w / h;
if (scale > windowScale) {
canvas.style.width = w + 'px';
canvas.style.height = (w / 16 * 9) + 'px';
}
else {
canvas.style.width = (h / 9 * 16) + 'px';
canvas.style.height = h + 'px';
}
}
function drawPlayer(player, x, y) {
stroke(0, 0, 0);
strokeWeight(5);
fill(player.color);
ellipse(x, y, 80, 80);
textSize(32);
fill(255, 255, 255);
textAlign(CENTER, CENTER);
text(player.name, x - 300, y - 100, 600, 50);
}
function relativePosition(pos1, pos2) {
return {
x: pos2.x - pos1.x,
y: pos2.y - pos1.y,
};
}
function buildMap() {
tileTypes = {
grass: {
image: grassImage
}
};
for (var x = 0; x < 10; x++) {
mapTiles[x] = [];
for (var y = 0; y < 6; y++) {
mapTiles[x][y] = {
tile: tileTypes.grass.image,
x: x * 380,
y: y * 380,
};
}
}
console.log(mapTiles);
}
function isVisible(middlePoint, visibleAreaSize, position, size) {
if (position.x - size.width > middlePoint.x - visibleAreaSize.width / 2 &&
position.x + size.width < middlePoint.x + visibleAreaSize.width / 2 &&
position.y - size.height > middlePoint.y - visibleAreaSize.height / 2 &&
position.y + size.height < middlePoint.y + visibleAreaSize.height / 2) {
return true;
}
return false;
}
function distance(p1, p2) {
return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
}
function drawMap() {
for (var _i = 0, mapTiles_1 = mapTiles; _i < mapTiles_1.length; _i++) {
var xTiles = mapTiles_1[_i];
for (var _a = 0, xTiles_1 = xTiles; _a < xTiles_1.length; _a++) {
var yTile = xTiles_1[_a];
if (distance(Player.position, { x: yTile.x, y: yTile.y }) < 2000) {
image(yTile.tile, yTile.x + width / 2, yTile.y + height / 2);
}
}
}
}
function setup() {
buildMap();
createCanvas(1920, 1080);
canvas = document.querySelector('canvas');
onCanvasResize();
window.addEventListener('resize', onCanvasResize);
document.addEventListener('keydown', onKeyDown);
document.addEventListener('keyup', onKeyUp);
document.addEventListener("contextmenu", onContextMenu);
}
function draw() {
translate(-Player.position.x, Player.position.y);
drawMap();
for (var _i = 0, OtherPlayers_1 = OtherPlayers; _i < OtherPlayers_1.length; _i++) {
var otherPlayer = OtherPlayers_1[_i];
drawPlayer(otherPlayer, otherPlayer.position.x + width / 2, -otherPlayer.position.y + height / 2);
}
translate(Player.position.x, -Player.position.y);
drawPlayer(Player, width / 2, height / 2);
text(Math.floor(Player.position.x) + ':' + Math.floor(Player.position.y), width / 2, 50);
var previousPosition = {
x: Player.position.x,
y: Player.position.y,
};
if (Player.keysPressed[KEY_A]) {
Player.position.x -= PLAYER_SPEED;
}
if (Player.keysPressed[KEY_D]) {
Player.position.x += PLAYER_SPEED;
}
if (Player.keysPressed[KEY_W]) {
Player.position.y += PLAYER_SPEED;
}
if (Player.keysPressed[KEY_S]) {
Player.position.y -= PLAYER_SPEED;
}
if (Player.position.x !== previousPosition.x || Player.position.y !== previousPosition.y) {
socket.emit('i-moved', { x: Player.position.x, y: Player.position.y });
}
}
socket.on('your-info', function (playerData) {
Player.name = playerData.name;
Player.position = playerData.position;
Player.color = playerData.color;
Player.id = playerData.id;
});
socket.on('players-info', function (playersData) {
for (var _i = 0, playersData_1 = playersData; _i < playersData_1.length; _i++) {
var playerData = playersData_1[_i];
if (Player.id !== playerData.id) {
OtherPlayers.push({
name: playerData.name,
position: playerData.position,
color: playerData.color,
id: playerData.id,
});
}
}
});
socket.on('new-player-joined', function (playerData) {
if (Player.id !== playerData.id) {
OtherPlayers.push({
name: playerData.name,
position: playerData.position,
color: playerData.color,
id: playerData.id,
});
}
});
socket.on('player-moved', function (movedPlayerData) {
for (var _i = 0, OtherPlayers_2 = OtherPlayers; _i < OtherPlayers_2.length; _i++) {
var playerData = OtherPlayers_2[_i];
if (Player.id !== movedPlayerData.id && movedPlayerData.id === playerData.id) {
playerData.position = movedPlayerData.position;
}
}
});
//# sourceMappingURL=bundle.js.map

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

BIN
client/static/assets/p5js/.DS_Store vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,66 @@
# Welcome to p5.js
You have downloaded the complete p5.js library ZIP file, yay!
# Contents of the p5 folder
* p5.js file
* p5.min.js file
* addons folder
* p5.sound.js
* p5.sound.min.js
* empty-example folder
* index.html
* p5.js
* p5.sound.js
* sketch.js
## p5.js
This file stores the complete p5.js library. It is easy to read by humans, so feel free to open it and explore its contents. It also has a friendly error system, which helps new programmers with common user errors.
## p5.min.js
This file is a minified version of the p5.js file. It is a lighter version, with the same functionalities, but smaller file size. This minified version is harder to read for humans, and does not include the friendly error system.
## addons folder
The addons folder includes additional p5.js related libraries, in both original versions and minified versions.
### p5.sound.js, p5.sound.min.js
p5.sound extends p5.js with Web Audio functionality including audio input, playback, analysis, and synthesis.
## empty-example folder
This is an empty example of a website. The folder includes the file for the website, index.html, the p5.js library, other related p5.js libraries, and a template starting point for your p5.js sketch, called sketch.js.
### index.html
index.html is a template for an HTML file. This index.html first imports the libraries included in the folder (p5.js, p5.sound.js) then loads and executes the file sketch.js which is where you can write your own code.
### sketch.js
The sketch.js is a template for the p5.js sketch, with the functions setup() and draw() that you can complete.
## README.txt
This README file formatted with Markdown :)
# What's next?
If you need more information to help get you started, please refer to our website:
https://p5js.org/get-started/ and https://p5js.org/learn/
An online reference to the p5.js library is available here:
https://p5js.org/reference/
In order to run your website (including the empty-example), you need to enable a local server, please see this tutorial in our wiki:
https://github.com/processing/p5.js/wiki/Local-server
p5.js is a community and p5.js is built by contributions. If you want to learn more about us, visit:
https://p5js.org/community/
# License
The p5.js library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, version 2.1.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

3
client/static/assets/p5js/p5.min.js vendored Normal file

File diff suppressed because one or more lines are too long

7
client/static/assets/socket.io.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,17 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background: #000000;
}
main {
display: flex;
justify-content: center;
align-items: center;
width: 100vw;
height: 100vh;
}

19
client/static/index.html Normal file
View File

@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Blobby Strike</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
</head>
<body>
<div id="app"></div>
<script src="./socket.io.min.js"></script>
<script>
const socket = io("https://blobbystrike.ioi.lt", {secure: true});
</script>
<script src="./p5js/p5.min.js"></script>
<script src="./bundle.js"></script>
</body>
</html>

70
client/tsconfig.json Normal file
View File

@@ -0,0 +1,70 @@
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig.json to read more about this file */
/* Basic Options */
// "incremental": true, /* Enable incremental compilation */
"target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
"module": "amd", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
// "lib": [], /* Specify library files to be included in the compilation. */
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
// "declaration": true, /* Generates corresponding '.d.ts' file. */
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
"sourceMap": true, /* Generates corresponding '.map' file. */
"outFile": "./static/assets/bundle.js", /* Concatenate and emit output to single file. */
"outDir": "./dist", /* Redirect output structure to the directory. */
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
// "composite": true, /* Enable project compilation */
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
"removeComments": true, /* Do not emit comments to output. */
// "noEmit": true, /* Do not emit outputs. */
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
/* Strict Type-Checking Options */
"strict": true, /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* Enable strict null checks. */
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
/* Additional Checks */
// "noUnusedLocals": true, /* Report errors on unused locals. */
// "noUnusedParameters": true, /* Report errors on unused parameters. */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
/* Module Resolution Options */
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
// "typeRoots": [], /* List of folders to include type definitions from. */
// "types": [], /* Type declaration files to be included in compilation. */
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
/* Source Map Options */
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
/* Experimental Options */
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
/* Advanced Options */
"skipLibCheck": true, /* Skip type checking of declaration files. */
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
}
}

3
readme.md Normal file
View File

@@ -0,0 +1,3 @@
# Blobby Strike
Multiplayer, multi-platform, shooter RPG with a narritive to guide you through the world

2317
server/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

32
server/package.json Normal file
View File

@@ -0,0 +1,32 @@
{
"name": "globagamejam2021",
"version": "1.0.0",
"description": "",
"main": "dist/app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"tsc": "tsc -w"
},
"repository": {
"type": "git",
"url": "git+https://github.com/rdarius/global-game-jam-2021.git"
},
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/rdarius/global-game-jam-2021/issues"
},
"homepage": "https://github.com/rdarius/global-game-jam-2021#readme",
"dependencies": {
"cors": "^2.8.5",
"express": "^4.17.1",
"p5": "^1.2.0",
"socket.io": "^3.1.0"
},
"devDependencies": {
"@types/express": "^4.17.11",
"@types/socket.io": "^2.1.13",
"@types/p5": "^0.9.1",
"typescript": "^4.1.3"
}
}

117
server/src/app.ts Normal file
View File

@@ -0,0 +1,117 @@
import express from 'express'
import http from 'http'
import socketIO from 'socket.io'
import fs from 'fs'
import cors from 'cors'
import path from 'path'
const app = express()
const server = new http.Server(app)
const io = new socketIO.Server(server)
class Players {
private players: {
socketID: string,
player: Player
}[]
constructor() {
this.players = []
}
addPlayer(id: string, player: Player) {
this.players.push({
socketID: id,
player: player
})
}
removePlayer(id: string) {
this.players = this.players.filter((player) => {
return player.socketID !== id
})
}
getPlayers(): Player[] {
let playerList = []
for (let player of this.players) {
playerList.push(player.player)
}
return playerList
}
updatePlayerPosition(id: string, position: {x: number, y: number}) {
for (let player of this.players) {
if (player.socketID === id) {
player.player.setPosition(position.x, position.y)
}
}
}
}
class Player {
private name: string
private position: {x: number, y: number}
private color: string
constructor(private socket: socketIO.Socket) {
this.name = 'Player#' + Math.floor(Math.random() * 10000)
this.position = {
x: Math.random()*10 - 5,
y: Math.random()*10 - 5,
}
this.color = '#' + (Math.floor(Math.random() * 256)).toString(16) + (Math.floor(Math.random() * 256)).toString(16) + (Math.floor(Math.random() * 256)).toString(16)
}
getPlayerDescription() {
return {
name: this.name,
color: this.color,
position: this.position,
id: this.socket.id,
}
}
setPosition(x: number, y: number) {
this.position.x = x
this.position.y = y
}
}
const players = new Players()
app.use(cors())
app.use(express.static(path.join(__dirname, '/../../client/static/assets')))
app.get('/', function(req, res) {
res.sendFile('index.html', { root: __dirname + '/../../client/static/'});
});
server.listen(8089, function(){
console.log('running on port 8089');
});
io.on('connection', function(socket: socketIO.Socket) {
console.log('Player connected');
let player = new Player(socket)
let otherPlayers = []
for (let p of players.getPlayers()) {
otherPlayers.push(p.getPlayerDescription())
}
players.addPlayer(socket.id, player)
socket.emit('players-info', otherPlayers)
io.emit('new-player-joined', player.getPlayerDescription())
socket.emit('your-info', player.getPlayerDescription())
socket.on('message', function(msg) {
console.log(msg)
});
socket.on('i-moved', (position: {x: number, y: number}) => {
players.updatePlayerPosition(socket.id, {x: position.x, y: position.y})
io.emit('player-moved', {id: socket.id, position: position})
})
});

70
server/tsconfig.json Normal file
View File

@@ -0,0 +1,70 @@
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig.json to read more about this file */
/* Basic Options */
// "incremental": true, /* Enable incremental compilation */
"target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
// "lib": [], /* Specify library files to be included in the compilation. */
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
// "declaration": true, /* Generates corresponding '.d.ts' file. */
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
"sourceMap": true, /* Generates corresponding '.map' file. */
// "outFile": "./biultfile.js", /* Concatenate and emit output to single file. */
"outDir": "./dist", /* Redirect output structure to the directory. */
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
// "composite": true, /* Enable project compilation */
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
"removeComments": true, /* Do not emit comments to output. */
// "noEmit": true, /* Do not emit outputs. */
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
/* Strict Type-Checking Options */
"strict": true, /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* Enable strict null checks. */
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
/* Additional Checks */
// "noUnusedLocals": true, /* Report errors on unused locals. */
// "noUnusedParameters": true, /* Report errors on unused parameters. */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
/* Module Resolution Options */
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
// "typeRoots": [], /* List of folders to include type definitions from. */
// "types": [], /* Type declaration files to be included in compilation. */
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
/* Source Map Options */
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
/* Experimental Options */
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
/* Advanced Options */
"skipLibCheck": true, /* Skip type checking of declaration files. */
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
}
}