├── .gitignore ├── deno.ts ├── data.json ├── dependencies.ts ├── read.ts ├── rest ├── interfaces.ts ├── rest.ts ├── router.ts ├── controller.ts └── readme.md ├── testing ├── calc.ts └── calc.test.ts ├── http.ts ├── file.ts ├── datetime.js ├── fetch.ts └── qrcode.html /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | .idea 3 | -------------------------------------------------------------------------------- /deno.ts: -------------------------------------------------------------------------------- 1 | const text: string = "Hello Deno"; 2 | console.log(text); 3 | -------------------------------------------------------------------------------- /data.json: -------------------------------------------------------------------------------- 1 | {"userId":1,"id":3,"title":"fugiat veniam minus","completed":false} -------------------------------------------------------------------------------- /dependencies.ts: -------------------------------------------------------------------------------- 1 | export {assertEquals} from 'https://deno.land/std@0.53.0/testing/asserts.ts' -------------------------------------------------------------------------------- /read.ts: -------------------------------------------------------------------------------- 1 | const file = await Deno.open('data.json') 2 | await Deno.copy(file, Deno.stdout) 3 | file.close() -------------------------------------------------------------------------------- /rest/interfaces.ts: -------------------------------------------------------------------------------- 1 | export interface User { 2 | id: string 3 | name: string 4 | } 5 | 6 | export interface OakContext { 7 | response: any 8 | params?: {id: string} 9 | } -------------------------------------------------------------------------------- /testing/calc.ts: -------------------------------------------------------------------------------- 1 | export function sum(a: number, b: number): number { 2 | return a + b 3 | } 4 | 5 | export function sub(a: number, b: number): number { 6 | return a - b 7 | } -------------------------------------------------------------------------------- /http.ts: -------------------------------------------------------------------------------- 1 | import { serve } from "https://deno.land/std/http/server.ts" 2 | 3 | const s = serve({ port: 5000 }) 4 | 5 | console.log('Server has been started on port 5000...') 6 | 7 | for await (const req of s) { 8 | req.respond({ body: 'Hello Deno' }) 9 | } -------------------------------------------------------------------------------- /file.ts: -------------------------------------------------------------------------------- 1 | import {qrcode} from 'https://deno.land/x/qrcode/mod.ts' 2 | 3 | const img = await qrcode('https://www.vladilen.dev') 4 | 5 | const encoder = new TextEncoder() 6 | 7 | const data = encoder.encode(``) 8 | 9 | await Deno.writeFile('qrcode.html', data) -------------------------------------------------------------------------------- /datetime.js: -------------------------------------------------------------------------------- 1 | import { 2 | parseDate, 3 | dayOfYear, 4 | currentDayOfYear, 5 | } from "https://deno.land/std/datetime/mod.ts"; 6 | 7 | console.log(parseDate("20-01-2019", "dd-mm-yyyy")); 8 | 9 | console.log(dayOfYear(new Date("2019-03-11T03:24:00"))); 10 | console.log(currentDayOfYear()); 11 | -------------------------------------------------------------------------------- /rest/rest.ts: -------------------------------------------------------------------------------- 1 | import { Application, Router } from "https://deno.land/x/oak/mod.ts"; 2 | import {router} from './router.ts' 3 | 4 | const port = 5000 5 | 6 | const app = new Application() 7 | 8 | app.use(router.routes()) 9 | 10 | console.log(`App has been started on port ${port}...`) 11 | await app.listen({ port }) 12 | -------------------------------------------------------------------------------- /rest/router.ts: -------------------------------------------------------------------------------- 1 | import { Router } from "https://deno.land/x/oak/mod.ts"; 2 | import {getUsers, getUser, createUser, updateUser, removeUser} from './controller.ts' 3 | 4 | const router = new Router() 5 | 6 | router 7 | .get('/api/users', getUsers) 8 | .get('/api/users/:id', getUser) 9 | .post('/api/users', createUser) 10 | .put('/api/users/:id', updateUser) 11 | .delete('/api/users/:id', removeUser) 12 | 13 | export {router} -------------------------------------------------------------------------------- /fetch.ts: -------------------------------------------------------------------------------- 1 | window.addEventListener('load', () => { 2 | console.log('load') 3 | }) 4 | 5 | window.addEventListener('unload', () => { 6 | console.log('unload') 7 | }) 8 | 9 | const url = Deno.args[0] 10 | console.log('Making request to url:', url) 11 | const response = await fetch(url) 12 | const data = await response.json() 13 | 14 | await Deno.writeFile('data.json', new TextEncoder().encode(JSON.stringify(data))) 15 | 16 | 17 | // https://jsonplaceholder.typicode.com/todos/1 -------------------------------------------------------------------------------- /testing/calc.test.ts: -------------------------------------------------------------------------------- 1 | import {sub, sum} from './calc.ts' 2 | // import {assertEquals} from 'https://deno.land/std/testing/asserts.ts' 3 | // import {assertEquals} from 'https://deno.land/std@0.53.0/testing/asserts.ts' 4 | import {assertEquals} from '../dependencies.ts' 5 | 6 | Deno.test('Sum function', () => { 7 | const result = sum(41, 1) 8 | 9 | assertEquals(result, 42) 10 | }) 11 | 12 | Deno.test('Sub function', () => { 13 | const result = sub(43, 1) 14 | 15 | assertEquals(result, 42) 16 | }) -------------------------------------------------------------------------------- /rest/controller.ts: -------------------------------------------------------------------------------- 1 | import { User } from "./interfaces.ts"; 2 | import { v4 } from "https://deno.land/std/uuid/mod.ts" 3 | 4 | let users: User[] = [ 5 | {id: '1', name: 'Vladilen'}, 6 | {id: '2', name: 'Elena'} 7 | ] 8 | 9 | export const getUsers = ({ response }: {response: any}) => { 10 | response.status = 200 11 | response.body = { 12 | users 13 | } 14 | } 15 | 16 | export const getUser = ({ response, params }: {response: any, params: {id: string}}) => { 17 | const user: User | undefined = users.find(u => u.id === params.id) 18 | 19 | if (user) { 20 | response.status = 200 21 | response.body = {user} 22 | } else { 23 | response.status = 404 24 | response.body = {message: 'User Not Found'} 25 | } 26 | } 27 | 28 | export const createUser = async ({ response, request }: {response: any, request: any}) => { 29 | const body = await request.body() 30 | 31 | if (!request.hasBody) { 32 | response.status = 400 33 | response.body = {message: 'Invalid data'} 34 | } else { 35 | const user: User = body.value 36 | user.id = v4.generate() 37 | users.push(user) 38 | response.status = 201 39 | response.body = { user } 40 | } 41 | } 42 | 43 | export const updateUser = async ({ params, response, request }: {response: any, request: any, params: {id: string}}) => { 44 | const user: User | undefined = users.find(u => u.id === params.id) 45 | 46 | if (user) { 47 | const body = await request.body() 48 | 49 | users = users.map(u => u.id === user.id ? {...u, ...body.value} : u) 50 | 51 | response.status = 200 52 | response.body = {users} 53 | 54 | } else { 55 | response.status = 404 56 | response.body = {message: 'User not found'} 57 | } 58 | } 59 | 60 | export const removeUser = ({params, response}: {params: {id: string}, response: any}) => { 61 | users = users.filter(u => u.id !== params.id) 62 | 63 | response.status = 200 64 | response.body = {users} 65 | 66 | } -------------------------------------------------------------------------------- /qrcode.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /rest/readme.md: -------------------------------------------------------------------------------- 1 | ![www.vladilen.dev](data:image/gif;base64,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) --------------------------------------------------------------------------------