From d177ebb06443dec52f39d7a9288192160b838652 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luc=C3=A0s?= <86352901+LucasVbr@users.noreply.github.com> Date: Thu, 14 Nov 2024 12:02:36 +0100 Subject: [PATCH] Initial commit --- .gitignore | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 15 +++++ bun.lockb | Bin 0 -> 31656 bytes index.ts | 44 +++++++++++++ package.json | 19 ++++++ tsconfig.json | 27 ++++++++ 6 files changed, 280 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 index.ts create mode 100644 package.json create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c9aa7c5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,175 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IntelliJ based IDEs +.idea/**/* + +# Finder (MacOS) folder config +.DS_Store diff --git a/README.md b/README.md new file mode 100644 index 0000000..909dc65 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# fcc-timestamp-microservice + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.1.33. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..eabdcff9603d6731763ec96aec65b20e4ba8e48e GIT binary patch literal 31656 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 lb#PrT0Ci4Gjn?KSNvcfh { + res.json({ + unix: new Date().getTime(), + utc: new Date().toUTCString(), + }); +}); + +app.get('/api/:date', (req: Request, res: Response) => { + const {date: dateParam} = req.params; + + if (!isValidDateParam(dateParam)) { + res.json({error: 'Invalid Date'}); + return; + } + + + let date: Date = new Date( + dateParam.match(dateFormat) + ? dateParam + : parseInt(dateParam), + ); + console.log(date); + + res.json({ + unix: date.getTime(), + utc: date.toUTCString(), + }); +}); + +const dateFormat = /\d{4}-\d{2}-\d{2}/; + +function isValidDateParam(date: String): boolean { + return date.match(dateFormat) !== null + || date.match(/\d+/) !== null; +} + +app.listen(80, () => { + console.log('Server is running on port 3000'); +}); diff --git a/package.json b/package.json new file mode 100644 index 0000000..1efaa14 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "fcc-timestamp-microservice", + "module": "index.ts", + "type": "module", + "scripts": { + "dev": "bun --watch run index.ts", + "build": "bun build index.ts --outdir ./dist " + }, + "devDependencies": { + "@types/bun": "latest", + "@types/express": "^5.0.0" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "dependencies": { + "express": "^4.21.1" + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..238655f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + // Enable latest features + "lib": ["ESNext", "DOM"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +}