diff options
author | Casper Beyer <caspervonb@pm.me> | 2021-02-02 19:05:46 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-02 12:05:46 +0100 |
commit | 6abf126c2a7a451cded8c6b5e6ddf1b69c84055d (patch) | |
tree | fd94c013a19fcb38954844085821ec1601c20e18 /std/examples | |
parent | a2b5d44f1aa9d64f448a2a3cc2001272e2f60b98 (diff) |
chore: remove std directory (#9361)
This removes the std folder from the tree.
Various parts of the tests are pretty tightly dependent
on std (47 direct imports and 75 indirect imports, not
counting the cli tests that use them as fixtures) so I've
added std as a submodule for now.
Diffstat (limited to 'std/examples')
28 files changed, 0 insertions, 988 deletions
diff --git a/std/examples/README.md b/std/examples/README.md deleted file mode 100644 index cdc477833..000000000 --- a/std/examples/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# Deno example programs - -This module contains small scripts that demonstrate use of Deno and its standard -module. - -You can run these examples using just their URL or install the example as an -executable script which references the URL. (Think of installing as creating a -bookmark to a program.) - -### A TCP echo server - -```shell -deno run --allow-net https://deno.land/std/examples/echo_server.ts -``` - -Or - -```shell -deno install --allow-net https://deno.land/std/examples/echo_server.ts -``` - -### cat - print file to standard output - -```shell -deno install --allow-read -n deno_cat https://deno.land/std/examples/cat.ts -deno_cat file.txt -``` - -### catj - print flattened JSON to standard output - -A very useful command by Soheil Rashidi ported to Deno. - -```shell -deno install --allow-read https://deno.land/std/examples/catj.ts -catj example.json -catj file1.json file2.json -echo example.json | catj - -``` - -### curl - print the contents of a url to standard output - -```shell -deno run --allow-net=deno.land https://deno.land/std/examples/curl.ts https://deno.land/ -``` - -### gist - easily create and upload Gists - -``` -export GIST_TOKEN=ABC # Generate at https://github.com/settings/tokens -deno install --allow-net --allow-env https://deno.land/std/examples/gist.ts -gist --title "Example gist 1" script.ts -gist --t "Example gist 2" script2.ts -``` - -### chat - WebSocket chat server and browser client - -```shell -deno run --allow-net --allow-read https://deno.land/std/examples/chat/server.ts -``` - -Open http://localhost:8080 on the browser. diff --git a/std/examples/cat.ts b/std/examples/cat.ts deleted file mode 100644 index 04c40034b..000000000 --- a/std/examples/cat.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -const filenames = Deno.args; -for (const filename of filenames) { - const file = await Deno.open(filename); - await Deno.copy(file, Deno.stdout); - file.close(); -} diff --git a/std/examples/cat_test.ts b/std/examples/cat_test.ts deleted file mode 100644 index 9664ff713..000000000 --- a/std/examples/cat_test.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { assertStrictEquals } from "../testing/asserts.ts"; -import { dirname, fromFileUrl } from "../path/mod.ts"; - -const moduleDir = dirname(fromFileUrl(import.meta.url)); - -Deno.test("[examples/cat] print multiple files", async () => { - const decoder = new TextDecoder(); - const process = Deno.run({ - cmd: [ - Deno.execPath(), - "run", - "--quiet", - "--allow-read", - "cat.ts", - "testdata/cat/hello.txt", - "testdata/cat/world.txt", - ], - cwd: moduleDir, - stdout: "piped", - }); - - try { - const output = await process.output(); - const actual = decoder.decode(output).trim(); - assertStrictEquals(actual, "Hello\nWorld"); - } finally { - process.close(); - } -}); diff --git a/std/examples/catj.ts b/std/examples/catj.ts deleted file mode 100644 index 907f14879..000000000 --- a/std/examples/catj.ts +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env -S deno run --allow-read -// Ported from: https://github.com/soheilpro/catj -// Copyright (c) 2014 Soheil Rashidi -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. - -// Install using `deno install` -// $ deno install --allow-read https://deno.land/std/examples/catj.ts - -import { parse } from "../flags/mod.ts"; -import * as colors from "../fmt/colors.ts"; - -const decoder = new TextDecoder(); - -// deno-lint-ignore no-explicit-any -function isObject(arg: any): arg is Record<string, unknown> { - return !!arg && arg.constructor === Object; -} - -function isValidIdentifier(value: string): boolean { - // eslint-disable-next-line max-len - return /^(?!(?:do|if|in|for|let|new|try|var|case|else|enum|eval|null|this|true|void|with|break|catch|class|const|false|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$)[\x24A-Z\x5Fa-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC][\x240-9A-Z\x5Fa-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]*$/ - .test( - value, - ); -} - -function printValue(value: unknown, path: string): void { - if (typeof value === "string") { - value = colors.green('"' + value + '"'); - } else if (typeof value === "number") { - value = value.toString(); - } else if (typeof value === "boolean") { - value = colors.yellow(value.toString()); - } - - console.log(path + " = " + value); -} - -function printObject(obj: Record<string, unknown>, path: string): void { - for (const key of Object.keys(obj)) { - const value = obj[key]; - let nodePath = path + colors.cyan(".") + key; - - if (!isValidIdentifier(key)) { - nodePath = (path ? path : colors.cyan(".")) + '["' + key + '"]'; - } - - if (Array.isArray(value)) { - printArray(value, nodePath); - } else if (isObject(value)) { - printObject(value, nodePath); - } else { - printValue(value, nodePath); - } - } -} - -function printArray(array: unknown[], path: string): void { - for (const index in array) { - const value = array[index]; - const nodePath = (path ? path : colors.cyan(".")) + "[" + - colors.cyan(index) + "]"; - - if (Array.isArray(value)) { - printArray(value, nodePath); - } else if (isObject(value)) { - printObject(value, nodePath); - } else { - printValue(value, nodePath); - } - } -} - -// deno-lint-ignore no-explicit-any -function print(data: any[] | Record<string, unknown>): void { - if (Array.isArray(data)) { - printArray(data, ""); - } else { - printObject(data, ""); - } -} - -if (import.meta.main) { - const parsedArgs = parse(Deno.args); - - if (parsedArgs.h || parsedArgs.help || parsedArgs._.length === 0) { - console.log("Usage: catj [-h|--help] [file...]"); - console.log(); - console.log("Examples:"); - console.log(); - console.log("// print file:\n catj file.json"); - console.log(); - console.log("// print multiple files:\n catj file1.json file2.json"); - console.log(); - console.log("// print from stdin:\n cat file.json | catj -"); - } - - if (parsedArgs._[0] === "-") { - const contents = await Deno.readAll(Deno.stdin); - const json = JSON.parse(decoder.decode(contents)); - print(json); - } else { - for (const fileName of parsedArgs._) { - const fileContents = await Deno.readFile(fileName.toString()); - const json = JSON.parse(decoder.decode(fileContents)); - print(json); - } - } -} diff --git a/std/examples/catj_test.ts b/std/examples/catj_test.ts deleted file mode 100644 index 365b5c0b7..000000000 --- a/std/examples/catj_test.ts +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { assertStrictEquals } from "../testing/asserts.ts"; -import { dirname, fromFileUrl } from "../path/mod.ts"; - -const moduleDir = dirname(fromFileUrl(import.meta.url)); - -Deno.test("[examples/catj] print an array", async () => { - const decoder = new TextDecoder(); - const process = catj("testdata/catj/array.json"); - try { - const output = await process.output(); - const actual = decoder.decode(output).trim(); - const expected = [ - '.[0] = "string"', - ".[1] = 100", - '.[2].key = "value"', - '.[2].array[0] = "foo"', - '.[2].array[1] = "bar"', - ].join("\n"); - - assertStrictEquals(actual, expected); - } finally { - process.stdin.close(); - process.close(); - } -}); - -Deno.test("[examples/catj] print an object", async () => { - const decoder = new TextDecoder(); - const process = catj("testdata/catj/object.json"); - try { - const output = await process.output(); - const actual = decoder.decode(output).trim(); - const expected = [ - '.string = "foobar"', - ".number = 123", - '.array[0].message = "hello"', - ].join("\n"); - - assertStrictEquals(actual, expected); - } finally { - process.stdin.close(); - process.close(); - } -}); - -Deno.test("[examples/catj] print multiple files", async () => { - const decoder = new TextDecoder(); - const process = catj( - "testdata/catj/simple-object.json", - "testdata/catj/simple-array.json", - ); - try { - const output = await process.output(); - const actual = decoder.decode(output).trim(); - const expected = ['.message = "hello"', ".[0] = 1", ".[1] = 2"].join("\n"); - - assertStrictEquals(actual, expected); - } finally { - process.stdin.close(); - process.close(); - } -}); - -Deno.test("[examples/catj] read from stdin", async () => { - const decoder = new TextDecoder(); - const process = catj("-"); - const input = `{ "foo": "bar" }`; - try { - await process.stdin.write(new TextEncoder().encode(input)); - process.stdin.close(); - const output = await process.output(); - const actual = decoder.decode(output).trim(); - - assertStrictEquals(actual, '.foo = "bar"'); - } finally { - process.close(); - } -}); - -function catj( - ...files: string[] -): Deno.Process<Deno.RunOptions & { stdin: "piped"; stdout: "piped" }> { - return Deno.run({ - cmd: [ - Deno.execPath(), - "run", - "--quiet", - "--allow-read", - "catj.ts", - ...files, - ], - cwd: moduleDir, - stdin: "piped", - stdout: "piped", - env: { NO_COLOR: "true" }, - }); -} diff --git a/std/examples/chat/index.html b/std/examples/chat/index.html deleted file mode 100644 index 2daf288b3..000000000 --- a/std/examples/chat/index.html +++ /dev/null @@ -1,81 +0,0 @@ -<html lang="en"> - <head> - <meta charset="UTF-8" /> - <title>ws chat example</title> - </head> - <body> - <div> - <input type="text" id="input" /> - <button id="sendButton" disabled>send</button> - <button id="connectButton" disabled>connect</button> - <button id="closeButton" disabled>close</button> - </div> - <div id="status"></div> - <ul id="timeline"></ul> - <script> - let ws; - function messageDom(msg) { - const div = document.createElement("li"); - div.className = "message"; - div.innerText = msg; - return div; - } - const timeline = document.getElementById("timeline"); - const sendButton = document.getElementById("sendButton"); - sendButton.onclick = send; - const closeButton =document.getElementById("closeButton"); - closeButton.onclick=close; - const connectButton = document.getElementById("connectButton"); - connectButton.onclick=connect; - const status = document.getElementById("status"); - const input = document.getElementById("input"); - input.addEventListener("keydown", keyDownEvent); - function send() { - const msg = input.value; - ws.send(msg); - applyState({inputValue: ""}); - } - function keyDownEvent(e) { - if (e.keyCode === 13) return send(); - } - function connect() { - if (ws) ws.close(); - ws = new WebSocket(`ws://${location.host}/ws`); - ws.addEventListener("open", () => { - console.log("open", ws); - applyState({connected: true}); - }); - ws.addEventListener("message", ({data}) => { - timeline.appendChild(messageDom(data)); - }); - ws.addEventListener("close", () => { - applyState({connect: false}); - }); - } - function close() { - ws.close(); - applyState({connected: false}); - } - function applyState({connected, status, inputValue}) { - if (inputValue != null) { - input.value = inputValue; - } - if(status != null) { - status.innerText = status; - } - if (connected != null) { - if (connected) { - sendButton.disabled = false; - connectButton.disabled = true; - closeButton.disabled= false; - } else { - sendButton.disabled= true; - connectButton.disabled=false; - closeButton.disabled=true; - } - } - } - connect(); - </script> - </body> -</html> diff --git a/std/examples/chat/server.ts b/std/examples/chat/server.ts deleted file mode 100644 index 39b5ee124..000000000 --- a/std/examples/chat/server.ts +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { listenAndServe } from "../../http/server.ts"; -import { - acceptable, - acceptWebSocket, - isWebSocketCloseEvent, - WebSocket, -} from "../../ws/mod.ts"; -import { fromFileUrl } from "../../path/mod.ts"; - -const clients = new Map<number, WebSocket>(); -let clientId = 0; -function dispatch(msg: string): void { - for (const client of clients.values()) { - client.send(msg); - } -} -async function wsHandler(ws: WebSocket): Promise<void> { - const id = ++clientId; - clients.set(id, ws); - dispatch(`Connected: [${id}]`); - for await (const msg of ws) { - console.log(`msg:${id}`, msg); - if (typeof msg === "string") { - dispatch(`[${id}]: ${msg}`); - } else if (isWebSocketCloseEvent(msg)) { - clients.delete(id); - dispatch(`Closed: [${id}]`); - break; - } - } -} - -listenAndServe({ port: 8080 }, async (req) => { - if (req.method === "GET" && req.url === "/") { - //Serve with hack - const u = new URL("./index.html", import.meta.url); - if (u.protocol.startsWith("http")) { - // server launched by deno run http(s)://.../server.ts, - fetch(u.href).then(async (resp) => { - const body = new Uint8Array(await resp.arrayBuffer()); - return req.respond({ - status: resp.status, - headers: new Headers({ - "content-type": "text/html", - }), - body, - }); - }); - } else { - // server launched by deno run ./server.ts - const file = await Deno.open(fromFileUrl(u)); - req.respond({ - status: 200, - headers: new Headers({ - "content-type": "text/html", - }), - body: file, - }); - } - } - if (req.method === "GET" && req.url === "/favicon.ico") { - req.respond({ - status: 302, - headers: new Headers({ - location: "https://deno.land/favicon.ico", - }), - }); - } - if (req.method === "GET" && req.url === "/ws") { - if (acceptable(req)) { - acceptWebSocket({ - conn: req.conn, - bufReader: req.r, - bufWriter: req.w, - headers: req.headers, - }).then(wsHandler); - } - } -}); -console.log("chat server starting on :8080...."); diff --git a/std/examples/chat/server_test.ts b/std/examples/chat/server_test.ts deleted file mode 100644 index 80a66cb2f..000000000 --- a/std/examples/chat/server_test.ts +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { assert, assertEquals } from "../../testing/asserts.ts"; -import { TextProtoReader } from "../../textproto/mod.ts"; -import { BufReader } from "../../io/bufio.ts"; -import { delay } from "../../async/delay.ts"; -import { dirname, fromFileUrl, resolve } from "../../path/mod.ts"; - -const moduleDir = resolve(dirname(fromFileUrl(import.meta.url))); - -async function startServer(): Promise< - Deno.Process<Deno.RunOptions & { stdout: "piped" }> -> { - const server = Deno.run({ - cmd: [ - Deno.execPath(), - "run", - "--quiet", - "--allow-net", - "--allow-read", - "server.ts", - ], - cwd: moduleDir, - stdout: "piped", - }); - try { - assert(server.stdout != null); - const r = new TextProtoReader(new BufReader(server.stdout)); - const s = await r.readLine(); - assert(s !== null && s.includes("chat server starting")); - } catch (err) { - server.stdout.close(); - server.close(); - } - - return server; -} - -Deno.test({ - name: "[examples/chat] GET / should serve html", - async fn() { - const server = await startServer(); - try { - const resp = await fetch("http://127.0.0.1:8080/"); - assertEquals(resp.status, 200); - assertEquals(resp.headers.get("content-type"), "text/html"); - const html = await resp.text(); - assert(html.includes("ws chat example"), "body is ok"); - } finally { - server.close(); - server.stdout.close(); - } - await delay(10); - }, -}); - -Deno.test({ - name: "[examples/chat] GET /ws should upgrade conn to ws", - async fn() { - const server = await startServer(); - let ws: WebSocket; - try { - ws = new WebSocket("ws://127.0.0.1:8080/ws"); - await new Promise<void>((resolve) => { - ws.onmessage = ((message) => { - assertEquals(message.data, "Connected: [1]"); - ws.onmessage = ((message) => { - assertEquals(message.data, "[1]: Hello"); - ws.close(); - resolve(); - }); - ws.send("Hello"); - }); - }); - } catch (err) { - console.log(err); - } finally { - server.close(); - server.stdout.close(); - } - }, -}); diff --git a/std/examples/colors.ts b/std/examples/colors.ts deleted file mode 100644 index 4af8d9bfa..000000000 --- a/std/examples/colors.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { bgBlue, bold, italic, red } from "../fmt/colors.ts"; - -if (import.meta.main) { - console.log(bgBlue(italic(red(bold("Hello world!"))))); -} diff --git a/std/examples/colors_test.ts b/std/examples/colors_test.ts deleted file mode 100644 index 4e009e329..000000000 --- a/std/examples/colors_test.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { assertStrictEquals } from "../testing/asserts.ts"; -import { dirname, fromFileUrl } from "../path/mod.ts"; - -const moduleDir = dirname(fromFileUrl(import.meta.url)); - -Deno.test("[examples/colors] print a colored text", async () => { - const decoder = new TextDecoder(); - const process = Deno.run({ - cmd: [Deno.execPath(), "run", "--quiet", "colors.ts"], - cwd: moduleDir, - stdout: "piped", - }); - try { - const output = await process.output(); - const actual = decoder.decode(output).trim(); - const expected = "[44m[3m[31m[1mHello world![22m[39m[23m[49m"; - assertStrictEquals(actual, expected); - } finally { - process.close(); - } -}); diff --git a/std/examples/curl.ts b/std/examples/curl.ts deleted file mode 100644 index 2ed194446..000000000 --- a/std/examples/curl.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -const url_ = Deno.args[0]; -const res = await fetch(url_); - -// TODO(ry) Re-enable streaming in this example. -// Originally we did: await Deno.copy(res.body, Deno.stdout); -// But maybe more JS-y would be: res.pipeTo(Deno.stdout); - -const body = new Uint8Array(await res.arrayBuffer()); -await Deno.stdout.write(body); diff --git a/std/examples/curl_test.ts b/std/examples/curl_test.ts deleted file mode 100644 index 6612b17cc..000000000 --- a/std/examples/curl_test.ts +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { serve } from "../http/server.ts"; -import { assertStrictEquals } from "../testing/asserts.ts"; -import { dirname, fromFileUrl } from "../path/mod.ts"; - -const moduleDir = dirname(fromFileUrl(import.meta.url)); - -Deno.test({ - name: "[examples/curl] send a request to a specified url", - fn: async () => { - const server = serve({ port: 8081 }); - const serverPromise = (async (): Promise<void> => { - for await (const req of server) { - req.respond({ body: "Hello world" }); - } - })(); - - const decoder = new TextDecoder(); - const process = Deno.run({ - cmd: [ - Deno.execPath(), - "run", - "--quiet", - "--allow-net", - "curl.ts", - "http://localhost:8081", - ], - cwd: moduleDir, - stdout: "piped", - }); - - try { - const output = await process.output(); - const actual = decoder.decode(output).trim(); - const expected = "Hello world"; - - assertStrictEquals(actual, expected); - } finally { - server.close(); - process.close(); - await serverPromise; - } - }, -}); diff --git a/std/examples/echo_server.ts b/std/examples/echo_server.ts deleted file mode 100644 index 03e0d6070..000000000 --- a/std/examples/echo_server.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -const hostname = "0.0.0.0"; -const port = 8080; -const listener = Deno.listen({ hostname, port }); -console.log(`Listening on ${hostname}:${port}`); -for await (const conn of listener) { - Deno.copy(conn, conn); -} diff --git a/std/examples/echo_server_test.ts b/std/examples/echo_server_test.ts deleted file mode 100644 index 24e0c416b..000000000 --- a/std/examples/echo_server_test.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { assertNotEquals, assertStrictEquals } from "../testing/asserts.ts"; -import { BufReader, ReadLineResult } from "../io/bufio.ts"; -import { dirname, fromFileUrl } from "../path/mod.ts"; - -const moduleDir = dirname(fromFileUrl(import.meta.url)); - -Deno.test("[examples/echo_server]", async () => { - const encoder = new TextEncoder(); - const decoder = new TextDecoder(); - const process = Deno.run({ - cmd: [Deno.execPath(), "run", "--quiet", "--allow-net", "echo_server.ts"], - cwd: moduleDir, - stdout: "piped", - }); - - let conn: Deno.Conn | undefined; - try { - const processReader = new BufReader(process.stdout); - const message = await processReader.readLine(); - - assertNotEquals(message, null); - assertStrictEquals( - decoder.decode((message as ReadLineResult).line).trim(), - "Listening on 0.0.0.0:8080", - ); - - conn = await Deno.connect({ hostname: "127.0.0.1", port: 8080 }); - const connReader = new BufReader(conn); - - await conn.write(encoder.encode("Hello echo_server\n")); - const result = await connReader.readLine(); - - assertNotEquals(result, null); - - const actualResponse = decoder - .decode((result as ReadLineResult).line) - .trim(); - const expectedResponse = "Hello echo_server"; - - assertStrictEquals(actualResponse, expectedResponse); - } finally { - conn?.close(); - process.stdout.close(); - process.close(); - } -}); diff --git a/std/examples/flags.ts b/std/examples/flags.ts deleted file mode 100644 index a452494c5..000000000 --- a/std/examples/flags.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { parse } from "../flags/mod.ts"; - -if (import.meta.main) { - console.dir(parse(Deno.args)); -} diff --git a/std/examples/gist.ts b/std/examples/gist.ts deleted file mode 100755 index 1698ab354..000000000 --- a/std/examples/gist.ts +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env -S deno run --allow-net --allow-env -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -// A program to post files to gist.github.com. Use the following to install it: -// deno install -f --allow-env --allow-read --allow-net=api.github.com https://deno.land/std/examples/gist.ts -import { parse } from "../flags/mod.ts"; - -function pathBase(p: string): string { - const parts = p.split("/"); - return parts[parts.length - 1]; -} - -const token = Deno.env.get("GIST_TOKEN"); -if (!token) { - console.error("GIST_TOKEN environmental variable not set."); - console.error("Get a token here: https://github.com/settings/tokens"); - Deno.exit(1); -} - -const parsedArgs = parse(Deno.args); - -if (parsedArgs._.length === 0) { - console.error( - "Usage: gist.ts --allow-env --allow-net [-t|--title Example] some_file " + - "[next_file]", - ); - Deno.exit(1); -} - -const files: Record<string, { content: string }> = {}; -for (const filename of parsedArgs._) { - const base = pathBase(filename as string); - const content = await Deno.readFile(filename as string); - const contentStr = new TextDecoder().decode(content); - files[base] = { content: contentStr }; -} - -const content = { - description: parsedArgs.title || parsedArgs.t || "Example", - public: false, - files: files, -}; -const body = JSON.stringify(content); - -const res = await fetch("https://api.github.com/gists", { - method: "POST", - headers: [ - ["Content-Type", "application/json"], - ["User-Agent", "Deno-Gist"], - ["Authorization", `token ${token}`], - ], - body, -}); - -if (res.ok) { - const resObj = await res.json(); - console.log("Success"); - console.log(resObj["html_url"]); -} else { - const err = await res.text(); - console.error("Failure to POST", err); -} diff --git a/std/examples/test.ts b/std/examples/test.ts deleted file mode 100644 index 6afeb221f..000000000 --- a/std/examples/test.ts +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { assertEquals } from "../testing/asserts.ts"; -import { dirname, fromFileUrl, relative, resolve } from "../path/mod.ts"; - -const moduleDir = dirname(fromFileUrl(import.meta.url)); - -/** Example of how to do basic tests */ -Deno.test("t1", function (): void { - assertEquals("hello", "hello"); -}); - -Deno.test("t2", function (): void { - assertEquals("world", "world"); -}); - -/** A more complicated test that runs a subprocess. */ -Deno.test("catSmoke", async function (): Promise<void> { - const p = Deno.run({ - cmd: [ - Deno.execPath(), - "run", - "--quiet", - "--allow-read", - relative(Deno.cwd(), resolve(moduleDir, "cat.ts")), - relative(Deno.cwd(), resolve(moduleDir, "..", "README.md")), - ], - stdout: "null", - stderr: "null", - }); - const s = await p.status(); - assertEquals(s.code, 0); - p.close(); -}); diff --git a/std/examples/test_test.ts b/std/examples/test_test.ts deleted file mode 100644 index c8e3c4ac1..000000000 --- a/std/examples/test_test.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import "./test.ts"; diff --git a/std/examples/testdata/cat/hello.txt b/std/examples/testdata/cat/hello.txt deleted file mode 100644 index e965047ad..000000000 --- a/std/examples/testdata/cat/hello.txt +++ /dev/null @@ -1 +0,0 @@ -Hello diff --git a/std/examples/testdata/cat/world.txt b/std/examples/testdata/cat/world.txt deleted file mode 100644 index 216e97ce0..000000000 --- a/std/examples/testdata/cat/world.txt +++ /dev/null @@ -1 +0,0 @@ -World diff --git a/std/examples/testdata/catj/array.json b/std/examples/testdata/catj/array.json deleted file mode 100644 index 6dac876a0..000000000 --- a/std/examples/testdata/catj/array.json +++ /dev/null @@ -1,5 +0,0 @@ -[ - "string", - 100, - { "key": "value", "array": ["foo", "bar"] } -] diff --git a/std/examples/testdata/catj/object.json b/std/examples/testdata/catj/object.json deleted file mode 100644 index 290c008ff..000000000 --- a/std/examples/testdata/catj/object.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "string": "foobar", - "number": 123, - "array": [{ "message": "hello" }] -} - diff --git a/std/examples/testdata/catj/simple-array.json b/std/examples/testdata/catj/simple-array.json deleted file mode 100644 index 44e2ace7e..000000000 --- a/std/examples/testdata/catj/simple-array.json +++ /dev/null @@ -1 +0,0 @@ -[1, 2] diff --git a/std/examples/testdata/catj/simple-object.json b/std/examples/testdata/catj/simple-object.json deleted file mode 100644 index 52bb626d8..000000000 --- a/std/examples/testdata/catj/simple-object.json +++ /dev/null @@ -1 +0,0 @@ -{ "message": "hello" } diff --git a/std/examples/welcome.ts b/std/examples/welcome.ts deleted file mode 100644 index f983ca89b..000000000 --- a/std/examples/welcome.ts +++ /dev/null @@ -1 +0,0 @@ -console.log("Welcome to Deno!"); diff --git a/std/examples/welcome_test.ts b/std/examples/welcome_test.ts deleted file mode 100644 index 2e26aa967..000000000 --- a/std/examples/welcome_test.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { assertStrictEquals } from "../testing/asserts.ts"; -import { dirname, fromFileUrl } from "../path/mod.ts"; - -const moduleDir = dirname(fromFileUrl(import.meta.url)); - -Deno.test("[examples/welcome] print a welcome message", async () => { - const decoder = new TextDecoder(); - const process = Deno.run({ - cmd: [Deno.execPath(), "run", "--quiet", "welcome.ts"], - cwd: moduleDir, - stdout: "piped", - }); - try { - const output = await process.output(); - const actual = decoder.decode(output).trim(); - const expected = "Welcome to Deno!"; - assertStrictEquals(actual, expected); - } finally { - process.close(); - } -}); diff --git a/std/examples/xeval.ts b/std/examples/xeval.ts deleted file mode 100644 index cff15edd0..000000000 --- a/std/examples/xeval.ts +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { parse } from "../flags/mod.ts"; -import { readStringDelim } from "../io/bufio.ts"; - -// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncFunction. -const AsyncFunction = Object.getPrototypeOf(async function (): Promise<void> {}) - .constructor; - -const HELP_MSG = `xeval - -Run a script for each new-line or otherwise delimited chunk of standard input. - -Print all the usernames in /etc/passwd: - cat /etc/passwd | deno run -A https://deno.land/std/examples/xeval.ts "a = $.split(':'); if (a) console.log(a[0])" - -A complicated way to print the current git branch: - git branch | deno run -A https://deno.land/std/examples/xeval.ts -I 'line' "if (line.startsWith('*')) console.log(line.slice(2))" - -Demonstrates breaking the input up by space delimiter instead of by lines: - cat LICENSE | deno run -A https://deno.land/std/examples/xeval.ts -d " " "if ($ === 'MIT') console.log('MIT licensed')", - -USAGE: - deno run -A https://deno.land/std/examples/xeval.ts [OPTIONS] <code> -OPTIONS: - -d, --delim <delim> Set delimiter, defaults to newline - -I, --replvar <replvar> Set variable name to be used in eval, defaults to $ -ARGS: - <code>`; - -export type XevalFunc = (v: string) => void; - -export interface XevalOptions { - delimiter?: string; -} - -const DEFAULT_DELIMITER = "\n"; - -export async function xeval( - reader: Deno.Reader, - xevalFunc: XevalFunc, - { delimiter = DEFAULT_DELIMITER }: XevalOptions = {}, -): Promise<void> { - for await (const chunk of readStringDelim(reader, delimiter)) { - // Ignore empty chunks. - if (chunk.length > 0) { - await xevalFunc(chunk); - } - } -} - -async function main(): Promise<void> { - const parsedArgs = parse(Deno.args, { - boolean: ["help"], - string: ["delim", "replvar"], - alias: { - delim: ["d"], - replvar: ["I"], - help: ["h"], - }, - default: { - delim: DEFAULT_DELIMITER, - replvar: "$", - }, - }); - if (parsedArgs._.length != 1) { - console.error(HELP_MSG); - console.log(parsedArgs._); - Deno.exit(1); - } - if (parsedArgs.help) { - return console.log(HELP_MSG); - } - - const delimiter = parsedArgs.delim; - const replVar = parsedArgs.replvar; - const code = parsedArgs._[0]; - - // new AsyncFunction()'s error message for this particular case isn't great. - if (!replVar.match(/^[_$A-z][_$A-z0-9]*$/)) { - console.error(`Bad replvar identifier: "${replVar}"`); - Deno.exit(1); - } - - const xEvalFunc = new AsyncFunction(replVar, code); - - await xeval(Deno.stdin, xEvalFunc, { delimiter }); -} - -if (import.meta.main) { - main(); -} diff --git a/std/examples/xeval_test.ts b/std/examples/xeval_test.ts deleted file mode 100644 index 4793c6346..000000000 --- a/std/examples/xeval_test.ts +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { xeval } from "./xeval.ts"; -import { StringReader } from "../io/readers.ts"; -import { decode, encode } from "../encoding/utf8.ts"; -import { - assert, - assertEquals, - assertStringIncludes, -} from "../testing/asserts.ts"; -import { dirname, fromFileUrl } from "../path/mod.ts"; - -const moduleDir = dirname(fromFileUrl(import.meta.url)); - -Deno.test("xevalSuccess", async function (): Promise<void> { - const chunks: string[] = []; - await xeval(new StringReader("a\nb\nc"), ($): number => chunks.push($)); - assertEquals(chunks, ["a", "b", "c"]); -}); - -Deno.test("xevalDelimiter", async function (): Promise<void> { - const chunks: string[] = []; - await xeval( - new StringReader("!MADMADAMADAM!"), - ($): number => chunks.push($), - { - delimiter: "MADAM", - }, - ); - assertEquals(chunks, ["!MAD", "ADAM!"]); -}); - -const xevalPath = "xeval.ts"; - -Deno.test({ - name: "xevalCliReplvar", - fn: async function (): Promise<void> { - const p = Deno.run({ - cmd: [ - Deno.execPath(), - "run", - "--quiet", - xevalPath, - "--replvar=abc", - "console.log(abc)", - ], - cwd: moduleDir, - stdin: "piped", - stdout: "piped", - stderr: "null", - }); - assert(p.stdin != null); - await p.stdin.write(encode("hello")); - p.stdin.close(); - assertEquals(await p.status(), { code: 0, success: true }); - assertEquals(decode(await p.output()).trimEnd(), "hello"); - p.close(); - }, -}); - -Deno.test("xevalCliSyntaxError", async function (): Promise<void> { - const p = Deno.run({ - cmd: [Deno.execPath(), "run", "--quiet", xevalPath, "("], - cwd: moduleDir, - stdin: "null", - stdout: "piped", - stderr: "piped", - }); - assertEquals(await p.status(), { code: 1, success: false }); - assertEquals(decode(await p.output()), ""); - assertStringIncludes(decode(await p.stderrOutput()), "SyntaxError"); - p.close(); -}); |