Giter Club home page Giter Club logo

trex's Introduction

Trex ๐Ÿฆ•

Package management for deno (pronounced "tee rex")

GitHub issues GitHub forks GitHub stars GitHub license

Use Trex

About

Trex is a package management tool for deno similar to npm but keeping close to the deno philosophy. Packages are cached and only one import_map.json file is generated.

// import_map.json

{
  "imports":  {
    "http/":  "https://deno.land/std/http/"
  }
}

For more information about the import maps in deno see import maps.

Additional topics

Installation

deno install -A --unstable --import-map=https://deno.land/x/trex/import_map.json -n trex --no-check https://deno.land/x/trex/cli.ts

Note: Works with deno >= 1.10.2

We shorten the install command so it's not that long

The permissions that Trex uses are:

  • --allow-net
  • --allow-read
  • --allow-write
  • --allow-run
  • --allow-env

You can give those permissions explicitly.

Updating Trex

Install new version with the -f flag:

deno install -f -A --unstable --import-map=https://deno.land/x/trex/import_map.json -n trex --no-check https://deno.land/x/trex/cli.ts

Or use the upgrade command:

trex upgrade

Note: available for versions 0.2.0 or higher.

Note: to try the latest pre-release features, use the --canary flag.

Verify the installation of Trex:

trex --version

The console should print the Trex version.

For help on the commands that Trex provides, use:

trex --help

Usage

Installing from deno.land

Use the --map flag to install packages from the Standard Library (std) and those hosted at deno.land/x.

Example

Install the fs, http and fmt modules from std:

trex install --map fs http fmt

Note: you can also use the shorthand i, as in: trex i --map fs http fmt

Installing from nest.land

Use the --nest flag and specify an explicit version to install packages hosted on nest.land.

trex install --nest [pkg]@[version]

Examples

trex install --nest [email protected]
trex i --nest [email protected]

You can install std packages from nest.land by specifying the package and version:

trex install --nest [email protected]

Installing from a repository

trex install --pkg [user]/[repo or repo@tag/branch]/[path/to/file] [packageName]

Example

trex install --pkg oakserver/oak@main/mod.ts oak

Warning: In the event that the repository uses a branch other than master as the main branch, this must be specified!

The above downloads oak directly from its repository.

Example import map

All installation methods produce an import_map.json file:

{
  "imports": {
    "fs/": "https://deno.land/std/fs/",
    "http/": "https://deno.land/std/http/",
    "fmt/": "https://deno.land/std/fmt/"
  }
}

Downloading packages

Download all the packages listed in the import_map.json similar to npm install:

trex install

Adding custom packages

Install a package from a custom URL source:

trex --custom React=https://dev.jspm.io/react/index.js
// import_map.json
{
  "imports": {
    "http/": "https://deno.land/std/http/",
    "fmt/": "https://deno.land/std/fmt/",
    "oak": "https://deno.land/x/oak/mod.ts",
    "React": "https://dev.jspm.io/react/index.js"
  }
}

Deleting packages

trex delete React

Remove a specific version from the cache and the import_map.json file:

trex delete [email protected]
// import_map.json
{
  "imports": {
    "fs/": "https://deno.land/std/fs/",
    "http/": "https://deno.land/std/http/",
    "fmt/": "https://deno.land/std/fmt/",
    "oak": "https://deno.land/x/oak/mod.ts"
  }
}

Note: Removing from cache only works with packages from std and deno.land/x

Installing an explicit version of a package

Specify a package's version:

trex install --map [email protected]
// import_map.json
{
  "imports": {
    "fs/": "https://deno.land/[email protected]/fs/"
  }
}

Note: can be used with third party packages.

Checking for outdated dependencies

trex check

Warning: Currently limited to packages from deno.land/std and deno.land/x, in future versions this will support third party registries and CDN sources as well.

Run Scripts with run.json

You can create command aliases, similar to deno task or npm run.

Simply create a run.json file with the following structure:

{
  "scripts": {
    "welcome": "deno run https://deno.land/[email protected]/examples/welcome.ts"
  }
}

Aliasing external commands

You can call a command from within another, or call a script like denopack or eggs update from within a command alias:

// run.json
{
  "scripts": {
    "start": "trex run welcome",
    "welcome": "deno run https://deno.land/[email protected]/examples/welcome.ts",
    "dev": "denon run ./app.ts",
    "build": "aleph build",
		"update": "eggs update"
  }
}

Then, for example, to update your dependencies:

trex run update

This will execute eggs update

Installation life cycle

When the command trex install or trex i executed, you can perform actions before and after the execution of trex install.

Execution order:

  1. preinstall
  2. install
  3. postinstall
// run.json
{
  "scripts": {
    "start": "trex run welcome",
    "welcome": "deno run https://deno.land/[email protected]/examples/welcome.ts",
    "dev": "denon run ./app.ts",
    "build": "aleph build",
    "preinstall": "deno --version",
    "postinstall": "deno test --unstable"
  }
}

Note: you can use the --watch flag to monitor the changes and rerun the script, example:

deno run --watch --unstable https://deno.land/[email protected]/examples/welcome.ts

Passing arguments to aliases

You can provide arguments when calling the command alias. These will be passed to the file to execute:

trex run start --port=3000 --env
console.log(Deno.args); // ["--port=3000", "--env"]

Reboot Script Alias Protocol (or RSAP)

With trex you can create script aliases that reload every time a file is changed, similar to running deno with the --watch flag.

The Reboot Script Alias Protocol (RSAP) provides this same functionality. Just add a files property to your run.json file, specifying an array of files that will be watched. When changes are detected in those files, your script aliases will be restarted immediately.

// run.json
{
  "scripts": {
    "start": "trex run welcome",
    "dev": "denon run ./app.ts",
    "build": "aleph build"
  },
  "files": ["./app.ts"]
}

You only have to add the files option in the run.json file and it will only observe the files and folders that you specify, if you leave the array empty it will observe all the files.

// run.json
{
  "scripts": {
    "dev": "go build"
  },
  "files": ["./main.go"]
}

For the script alias to use rsap you just need to add the --watch or -w flag to the end of the command alias:

trex run dev --watch [...args]

It can be used with any CLI tool, compiler or interpreter.

YAML is also acceptable (run.yml or run.yaml)

- scripts:
    dev: go build
- files:
    - ./main.go

Limitations

A limitation of watch mode is that they do not restart the processes that never end (such as http servers). In those cases we recommend other alternatives, such as denon.

Virtual cli tool execution

Trex will auto detect cli file in the order of "cli.ts", "cli.js", "%pacakge-name%.ts", "%package-name%.js", "main.ts", "main.js", "mod.ts", "mod.js", "index.ts", "index.js". If you want to publish a cli package, name your cli file as either of above(e.g. cli.ts) in your root package.

trex exec allows you to run many cli tools hosted at deno.land/x

trex exec aleph init hello_world

trex will fetch aleph's cli and run without installing it locally using deno install, you can also specify the version you want to use.

trex exec [email protected] init hello_world

Permissions (perms)

You can also specify the permissions that the cli will use. Just pass the --perms flag followed by comma-separated permissions:

trex exec --perms env,read,write,net denon run ./app.ts
  • env: --allow-env
  • write: --allow-write
  • read: --allow-read
  • net: --allow-net
  • run: --allow-run
  • reload: --reload
  • plugin: --allow-plugin
  • hrtime: --allow-hrtime
  • A: --allow-all

Warning: if you don't specify the permissions, they are all automatically granted to you

You can also combine this with the command alias:

// run.json
{
  "scripts": {
    "denon": "trex exec denon run"
  },
  "files": ["./app.ts"]
}
trex run denon ./app.ts

And yes, you can do this:

trex exec trex exec trex exec ....

Even this:

trex exec land trex exec land trex exec ....

This functionality is heavily inspired by npx and land. If you need another alternative to trex exec to use in deno, land this is a great option.

Local configuration and global configuration (experimental)

When you work with import maps trex by default will handle everything using an import_map.json file, but what if I want to use an import-map.json or an importMap.json instead?

That's what the global settings are for! Basically it allows you to change the behavior of trex, with respect to the file where the dependencies will be handled.

Example

trex global-config --importMap=import-map.json

This will change the default name from import_map.json to import-map.json. to obtain the name or format used you must execute the following command.

trex global-config --getImportMap

But what happens if I am working with several people on the same project and we have different configurations? For these cases there is the local configuration or local configuration file - trex.config.json:

// trex.config.json
{
  "importMap": "importMap.json"
}

This will tell trex that the format for the import map will be the one dictated by the config file. This allows that there are no problems with the different local configurations of each developer since the configuration file only affects the scope of the project.

Note: the file trex.config.json must be at the same level(scope) as the import map for trex to detect it.

Thee hierarchy that trex respects with the configurations is the following:

graph TD
trex.config.json --> LocalGlobalConfig
LocalGlobalConfig --> defaultTrexConfig

Purge a package or URL

If you want delete a package or url package from cache memory in deno, you can use the purge command to remove from cache memory.

trex purge oak

This finds the oak package in the import_map.json, and removes it from the cache.

Purging with full URL specifiers

trex purge https://deno.land/x/[email protected]/mod.ts

Checking a package's dependency tree

trex tree fs

This prints out something like:

local: C:\Users\trex\AppData\Local\deno\deps\https\deno.land\434fe4a7be02d1875....
type: TypeScript
compiled: C:\Users\trex\AppData\Local\deno\gen\https\deno.land\std\fs\mod.ts.js
map: C:\Users\trex\AppData\Local\deno\gen\https\deno.land\std\fs\mod.ts.js.map
deps:
https://deno.land/std/fs/mod.ts
  โ”œโ”€โ”ฌ https://deno.land/std/fs/empty_dir.ts
  โ”‚ โ””โ”€โ”ฌ https://deno.land/std/path/mod.ts
  โ”‚   โ”œโ”€โ”€ https://deno.land/std/path/_constants.ts
  โ”‚   โ”œโ”€โ”ฌ https://deno.land/std/path/win32.ts
  โ”‚   โ”‚ โ”œโ”€โ”€ https://deno.land/std/path/_constants.ts
  โ”‚   โ”‚ โ”œโ”€โ”ฌ https://deno.land/std/path/_util.ts
  โ”‚   โ”‚ โ”‚ โ””โ”€โ”€ https://deno.land/std/path/_constants.ts
  โ”‚   โ”‚ โ””โ”€โ”€ https://deno.land/std/_util/assert.ts
  โ”‚   โ”œโ”€โ”ฌ https://deno.land/std/path/posix.ts
  โ”‚   โ”‚ โ”œโ”€โ”€ https://deno.land/std/path/_constants.ts
  โ”‚   โ”‚ โ””โ”€โ”€ https://deno.land/std/path/_util.ts
  โ”‚   โ”œโ”€โ”ฌ https://deno.land/std/path/common.ts
  โ”‚   โ”‚ โ””โ”€โ”ฌ https://deno.land/std/path/separator.ts
  โ”‚   โ”‚   โ””โ”€โ”€ https://deno.land/std/path/_constants.ts
  โ”‚   โ”œโ”€โ”€ https://deno.land/std/path/separator.ts
  โ”‚   โ”œโ”€โ”€ https://deno.land/std/path/_interface.ts
  โ”‚   โ””โ”€โ”ฌ https://deno.land/std/path/glob.ts
  โ”‚     โ”œโ”€โ”€ https://deno.land/std/path/separator.ts
  โ”‚     โ”œโ”€โ”ฌ https://deno.land/std/path/_globrex.ts
  โ”‚     โ”‚ โ””โ”€โ”€ https://deno.land/std/path/_constants.ts
  โ”‚     โ”œโ”€โ”€ https://deno.land/std/path/mod.ts
  โ”‚     โ””โ”€โ”€ https://deno.land/std/_util/assert.ts
  โ”œโ”€โ”ฌ https://deno.land/std/fs/ensure_dir.ts
	
# ... full response was truncated for brevity

Integrity checking & lock files

Let's say your module depends on a remote module. When you compile your module for the first time, it is retrieved, compiled and cached. It will remain this way until you run your module on a new machine (e.g. in production) or reload the cache.

But what happens if the content in the remote url is changed? This could lead to your production module running with different dependency code than your local module. Deno's solution to avoid this is to use integrity checking and lock files.

Create a lockfile:

deno cache --lock=lock.json --lock-write file.ts

The above generates a lock.json file.

If you use import_map.json in input file, you can specify it:

deno cache --lock=lock.json --lock-write --import-map=import_map.json --unstable file.ts

See deno document for more info.

Complete example

Simple std server

Install http and fmt:

trex install --map http fmt

Create a simple server

// server.ts
import { serve } from "http/server.ts";
import { green } from "fmt/colors.ts";

const server = serve({ port: 8000 });
console.log(green("http://localhost:8000/"));

for await (const req of server) {
  req.respond({ body: "Hello World\n" });
}

Start the server

deno run --allow-net --import-map=import_map.json --unstable server.ts

Warning: it is important to use --import-map=import_map.json --unstable

Adding third-party packages: Example using oak

Install the master version of oak

trex i --map oak

This adds oak to the import_map.json file:

{
  "imports": {
    "http/": "https://deno.land/std/http/",
    "fmt/": "https://deno.land/std/fmt/",
    "oak": "https://deno.land/x/oak/mod.ts"
  }
}

Then create an oak application.

Note the import statement, thanks to the import_map.json addition:

// app.ts
import { Application } from "oak";

const app = new Application();

app.use((ctx) => {
  ctx.response.body = "Hello World!";
});

await app.listen({ port: 8000 });

Run the server

deno run --allow-net --import-map=import_map.json --unstable app.ts

Warning: it is important to use --import-map=import_map.json --unstable

Contributing

Contributions are welcome, see CONTRIBUTING GUIDELINES.

Licensing

Trex is licensed under the MIT license.


Trex is powered by

trex's People

Contributors

ahuigo avatar buttercubz avatar dragonizedpizza avatar einarmagnus avatar ghaerdi avatar jeff-hykin avatar jollytoad avatar kidonng avatar nberlette avatar riviergrullon avatar tranzystorekk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

trex's Issues

[FEATURE]: Set nest.land as package registry

Hi! I've had my eye on Trex for quite awhile now, and I think it's a really cool project!

I'm an author of nest.land - An immutable, blockchain powered package registry for Deno. I was wondering if you would be interested in adding Trex to our registry? I think the nest.land ecosystem would benefit greatly from this, and I also think that Trex would benefit because the Trex code would be permanently accessible from the web.

Here is a link to our documentation if you'd be interested in adding it: https://nest.land/docs

Let me know if you have any questions!

Tate

install error with deno-1.6.2

when run deno install -A --unstable -n trex https://deno.land/x/trex/cli.ts
got:

Download https://denopkg.com/crewdevio/Trex@proxy/proxy/files/fmt.ts
Download https://raw.githubusercontent.com/crewdevio/Trex/proxy/proxy/proxy.ts
Download https://denopkg.com/crewdevio/Trex@proxy/proxy/files/encoding.ts
Download https://raw.githubusercontent.com/crewdevio/Trex/proxy/proxy/files/encoding.ts
Download https://raw.githubusercontent.com/crewdevio/Trex/proxy/proxy/files/fmt.ts
Check https://deno.land/x/trex/cli.ts
error: TS2498 [ERROR]: Module '"deno:///none.d.ts"' uses 'export =' and cannot be used with 'export *'.
export * from "https://denopkg.com/crewdevio/Trex@proxy/proxy/files/fmt.ts";
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    at https://deno.land/x/[email protected]/imports/fmt.ts:1:15

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/fmt.ts"' has no exported member 'colors'.
import { colors } from "../imports/fmt.ts";
         ~~~~~~
    at https://deno.land/x/[email protected]/tools/did_you_mean.ts:9:10

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/fmt.ts"' has no exported member 'colors'.
import { colors } from "../imports/fmt.ts";
         ~~~~~~
    at https://deno.land/x/[email protected]/utils/info.ts:9:10

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/fmt.ts"' has no exported member 'colors'.
import { colors } from "../imports/fmt.ts";
         ~~~~~~
    at https://deno.land/x/[email protected]/utils/logs.ts:12:10

TS2498 [ERROR]: Module '"deno:///none.d.ts"' uses 'export =' and cannot be used with 'export *'.
export * from "https://raw.githubusercontent.com/crewdevio/Trex/proxy/proxy/proxy.ts";
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    at https://deno.land/x/[email protected]/imports/proxy.ts:1:15

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/proxy.ts"' has no exported member 'needProxy'.
import { needProxy, Proxy } from "../imports/proxy.ts";
         ~~~~~~~~~
    at https://deno.land/x/[email protected]/tools/logs.ts:11:10

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/proxy.ts"' has no exported member 'Proxy'.
import { needProxy, Proxy } from "../imports/proxy.ts";
                    ~~~~~
    at https://deno.land/x/[email protected]/tools/logs.ts:11:21

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/fmt.ts"' has no exported member 'colors'.
import { colors } from "../imports/fmt.ts";
         ~~~~~~
    at https://deno.land/x/[email protected]/tools/logs.ts:14:10

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/fmt.ts"' has no exported member 'colors'.
import { colors } from "../imports/fmt.ts";
         ~~~~~~
    at https://deno.land/x/[email protected]/handlers/handle_files.ts:13:10

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/proxy.ts"' has no exported member 'needProxy'.
import { needProxy, Proxy } from "../imports/proxy.ts";
         ~~~~~~~~~
    at https://deno.land/x/[email protected]/handlers/handle_third_party_package.ts:10:10

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/proxy.ts"' has no exported member 'Proxy'.
import { needProxy, Proxy } from "../imports/proxy.ts";
                    ~~~~~
    at https://deno.land/x/[email protected]/handlers/handle_third_party_package.ts:10:21

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/proxy.ts"' has no exported member 'needProxy'.
import { needProxy, Proxy } from "../imports/proxy.ts";
         ~~~~~~~~~
    at https://deno.land/x/[email protected]/handlers/handle_cache.ts:9:10

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/proxy.ts"' has no exported member 'Proxy'.
import { needProxy, Proxy } from "../imports/proxy.ts";
                    ~~~~~
    at https://deno.land/x/[email protected]/handlers/handle_cache.ts:9:21

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/fmt.ts"' has no exported member 'colors'.
import { colors } from "../imports/fmt.ts";
         ~~~~~~
    at https://deno.land/x/[email protected]/handlers/handle_cache.ts:12:10

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/fmt.ts"' has no exported member 'colors'.
import { colors } from "../imports/fmt.ts";
         ~~~~~~
    at https://deno.land/x/[email protected]/handlers/handle_packages.ts:20:10

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/fmt.ts"' has no exported member 'colors'.
import { colors } from "../imports/fmt.ts";
         ~~~~~~
    at https://deno.land/x/[email protected]/handlers/delete_package.ts:12:10

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/proxy.ts"' has no exported member 'Proxy'.
import { Proxy, needProxy } from "../imports/proxy.ts";
         ~~~~~
    at https://deno.land/x/[email protected]/handlers/purge_package.ts:10:10

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/proxy.ts"' has no exported member 'needProxy'.
import { Proxy, needProxy } from "../imports/proxy.ts";
                ~~~~~~~~~
    at https://deno.land/x/[email protected]/handlers/purge_package.ts:10:17

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/fmt.ts"' has no exported member 'colors'.
import { colors } from "../imports/fmt.ts";
         ~~~~~~
    at https://deno.land/x/[email protected]/handlers/purge_package.ts:14:10

TS2498 [ERROR]: Module '"deno:///none.d.ts"' uses 'export =' and cannot be used with 'export *'.
export * from "https://denopkg.com/crewdevio/Trex@proxy/proxy/files/encoding.ts";
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    at https://deno.land/x/[email protected]/imports/encoding.ts:1:15

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/encoding.ts"' has no exported member 'yaml'.
import { yaml } from "../imports/encoding.ts";
         ~~~~
    at https://deno.land/x/[email protected]/tools/parseToyaml.ts:9:10

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/fmt.ts"' has no exported member 'colors'.
import { colors } from "../imports/fmt.ts";
         ~~~~~~
    at https://deno.land/x/[email protected]/commands/run.ts:12:10

TS2305 [ERROR]: Module '"https://deno.land/x/[email protected]/imports/fmt.ts"' has no exported member 'colors'.
import { colors } from "../imports/fmt.ts";
         ~~~~~~
    at https://deno.land/x/[email protected]/tools/setup_ide.ts:12:10

Found 23 errors.
              

Can't install deno std modules with a custom name

Describe the bug
Trex won't assign a correct mapping from std even if a name is supplied

To Reproduce
trex install --map fs=https://deno.land/[email protected]/fs
Now the import_map.json has an entry as such:
"": "https://deno.land/[email protected]/fs/mod.ts"

Expected behavior
import_map.json contains an "fs": "https://deno.land/[email protected]/fs/mod.ts"

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • Ubuntu
  • Deno
  • deno 1.3.0
  • v8 8.6.334
  • typescript 3.9.7

Additional context
Add any other context about the problem here.
Log when running above command:

cache package... 

package not found.
cache package... 

time to installation: 1.7s
Package list: 
    |-  
    |-  webview
Happy Coding

Release changes to egg.json

Trex cannot be installed from nest.land until a new version is published there that includes the cli.ts file.

Uncaught (in promise) TypeError: Cannot read property 'replace' of undefined

Describe the bug
trex run test.ts , when my program throws an error , Trex will throw another error in the meantime Uncaught (in promise) TypeError: Cannot read property 'replace' of undefined

To Reproduce

test.ts :

throw Error("error");

run.json

{
  "scripts": {
    "err": "deno run test.ts"
  }
}

executive command:
trex run err

trex throw another error infomation error: Uncaught (in promise) TypeError: Cannot read property 'replace' of undefined

Check file:///D:/Project/deno-test/test.ts
error: Uncaught Error: error
throw Error("error");
      ^
    at file:///D:/Project/deno-test/test.ts:1:7
error: Uncaught (in promise) TypeError: Cannot read property 'replace' of undefined
    ? `${code.open}${str.replace(code.regexp, code.open)}${code.close}`
                         ^
    at run (https://deno.land/[email protected]/fmt/colors.ts:69:26)
    at Module.yellow (https://deno.land/[email protected]/fmt/colors.ts:166:10)
    at Thread (https://deno.land/x/[email protected]/commands/run.ts:149:24)
    at async Run (https://deno.land/x/[email protected]/commands/run.ts:211:11)
    at async Main (https://deno.land/x/[email protected]/cli.ts:191:6)
    at async https://deno.land/x/[email protected]/cli.ts:286:24

run deno run test.ts only one error

Expected behavior

i hope it will be the same result like running command as deno run test.ts

feat: Command run

This will get some functions like create a custom commands to run scripts

and will setup your IDE for a deno project.

Deno fails to install Trex v1.9.0

Running (Copy pasted from the v1.9.0 README) on a fresh repo:

deno install -A --unstable --import-map=https://deno.land/x/trex/import_map.json -n trex --no-check https://deno.land/x/trex/cli.ts

With the latest update to v1.9.0, trex now imports:

"wait": "http://denopkg.com/crewdevio/tools@main/wait/mod.ts"

Due to being a HTTP url, deno refuses to install Trex.

error: Modules imported via https are not allowed to import http modules.
  Importing: http://denopkg.com/crewdevio/tools@main/wait/mod.ts
    at https://deno.land/x/[email protected]/cli.ts:33:0

broken modules.

with deno 1.2.0 update some packages will be broken due to changes in lib std.

the moment Trex tries to install packages that are broken they will throw errors, the packages have to be repaired by their maintainers.

Feature request โ€“ย Allow specifying a custom output file name for the import map (e.g. import-map.json)

Is your feature request related to a problem? Please describe.

When I first started out with Deno I had always named the import map import-map.json. The deno CLI allows us to pass a --import-map= flag to specify our import map, and it doesn't seem like they default to import_map.json so it would be nice if Trex also allowed this to be configurable.


Describe the solution you'd like

I think it would be nice if we could have a flag to specify the output path like -o ./import-map.json or -o imports.json etc


Describe alternatives you've considered

N/A


Additional context

N/A

Pruning unused imports

Is your feature request related to a problem? Please describe.
User can clean up their import map by removing unused imports. I'm not sure if it's necessary since it's just an import map, but it would be quite useful for those who wants to figure out which packages are used, for example.

Describe the solution you'd like
Provide a way to optimize import map using a command like trex prune
A clear and concise description of what you want to happen.

Additional context
I'm wondering how many needs are there for this kind of functionality.
I am worried that the traversal may be way too complex and time-consuming task, compared to other commands.

By the way, thanks your effort in developing Trex ๐Ÿ˜ƒ

does not install if absolute path mappings are specified in import_map.json

Starting with a import_map.json that has mappings for absolute paths

{
  "imports": {
    "/": "./",
    "./": "./",
  }
}
trex --custom react=https://esm.sh/[email protected]

results in an error:

error: Uncaught (in promise) PermissionDenied: Access is denied. (os error 5)
    const buffer = await Deno.readFile(path);
                ^
    at deno:core/core.js:86:46
    at unwrapOpResult (deno:core/core.js:106:13)
    at async open (deno:runtime/js/40_files.js:46:17)
    at async Object.readFile (deno:runtime/js/40_read_file.js:20:18)
    at async readURLContent (https://deno.land/x/[email protected]/handlers/handle_files.ts:96:17)
    at async generateHash (https://deno.land/x/[email protected]/handlers/handle_files.ts:107:14)
    at async createPackage (https://deno.land/x/[email protected]/handlers/handle_files.ts:59:52)

Removing the absolute maps solves the problem.

Can't install modules using trex

Describe the bug
install any module from deno.land/x or nest.land it's failling 'cuz deno delete the database.json.

We're working on that

Watch flag in run command

Is your feature request related to a problem? Please describe.
I'm trying to pass the --watch flag to my script but is stripped by Trex and being used as rsap

Describe the solution you'd like
Follow the deno arguments schema as:

trex run --watch myScriptName

So the --watch only affects the run command and not the args of my script

Describe alternatives you've considered
trex run myScriptName -- --watch

Additional context
image

This tool is really awesome, thank you for developing this ๐Ÿ˜ hope this be reviewed and accepted by your side.

Cheers.

possible error updating trex to version v1.2.2

denoland/deno#7455

with deno 1.4 update the way installable scripts are generated change, before a trex.cmd file was generated with the following:

% generated by deno install %
@deno.exe "run" "--allow-read" "--allow-write" "--allow-net" "--allow-env" "--allow-run" "--allow-plugin" "--allow-hrtime" "--unstable" "https://deno.land/x/[email protected]/cli.ts" %*

this points directly to the url of the cli

now, deno install creates a trex.js file this is a bundler of the whole cli and the file points directly to this bundler but these are being generated with errors.

% generated by deno install %
@deno.exe "run" "--allow-read" "--allow-write" "--allow-net" "--allow-env" "--allow-run" "--allow-plugin" "--allow-hrtime" "--unstable" "C:\Users\****\.deno\bin\trex.js" %*

If after installation or update trex does not work, replace the absolute path of the bundler file with the URL of the latest version of trex.

url of the latest version: https://deno.land/x/[email protected]/cli.ts

Trex check cannot handle local alias

I have an alias in my import map:

{
  "imports": {
    "@common/": "../common/",
    "std/": "https://deno.land/[email protected]/"
  }
}

When I run trex check it fails with:

error: Uncaught (in promise) TypeError: Invalid URL
const toURL = (url: string) => new URL(url);
                               ^
    at Object.opSync (deno:core/01_core.js:142:12)
    at opUrlParse (deno:ext/url/00_url.js:47:27)
    at new URL (deno:ext/url/00_url.js:320:20)
    at toURL (https://deno.land/x/[email protected]/handlers/handler_check.ts:144:32)
    at isDenoLand (https://deno.land/x/[email protected]/handlers/handler_check.ts:157:24)
    at checkDepsUpdates (https://deno.land/x/[email protected]/handlers/handler_check.ts:44:9)
    at async Main (https://deno.land/x/[email protected]/cli.ts:274:7)
    at async https://deno.land/x/[email protected]/cli.ts:299:3

Instead it should just ignore the local mappings.

Desktop:

  • OS: Arch Linux
  • Deno version: 1.16.1
  • Trex Version: 1.10.0

Missing cli.ts file in egg.ts

Describe the bug
Seems the Trex.ts file hasn't been renamed to cli.ts in the egg.ts. It's missing in nest.land and thus cannot be installed.

To Reproduce
Steps to reproduce the behavior:

  1. Install Trex from nest.land.

Expected behavior
Trex should be installed successfully

Observed behavior
Installation fails with a "404 not found" error

use lowercase "t" and rename to "trex"

Is your feature request related to a problem? Please describe.
Almost all commands run in terminal are all composed of small letters, Trex with uppercase "t" would be difficult to type

Describe the solution you'd like
Rename "Trex" to "trex"

Describe alternatives you've considered
Type uppercase "t" in Trex by pressing shift every time

Add the unmap command to convert the import in the code to the actual URL address

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

main.ts

#!/usr/bin/env dx
import { $, $a, cd, echo, env, fs, glob, nothrow, os, printf, pwd, question } from 'deno_dx'
import { blue, green, red, yellow } from 'fmt/colors.ts'

import_map.json

{
  "imports": {
    "deno_dx": "https://deno.land/x/[email protected]/mod.ts",
    "fmt/": "https://deno.land/[email protected]/fmt/"
  }
}

when i use the unmap command

trex unmap

the main.ts should be

#!/usr/bin/env dx
import { $, $a, cd, echo, env, fs, glob, nothrow, os, printf, pwd, question } from 'https://deno.land/x/[email protected]/mod.ts'
import { blue, green, red, yellow } from 'https://deno.land/[email protected]/fmt/colors'

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

https://github.com/facebook/jscodeshift

Additional context
Add any other context or screenshots about the feature request here.

all trex commands ruins

All deno commands ruins with:

`error: Uncaught (in promise) NotFound: No such file or directory (os error 2), mkdir '/home/gohryt/.deno/trex_storage/'
if (!(await exists(storagePath))) await mkdir(storagePath);
^
at async mkdir (deno:runtime/js/30_fs.js:109:5)
at async JsonStorage (https://deno.land/x/[email protected]/utils/storage.ts:44:37)
at async https://deno.land/x/[email protected]/handlers/handler_storage.ts:11:15

  • OS: Fedora 35
  • Deno version: 1.19
  • Trex version: latest

Bad resource ID using the postinstall script

Describe the bug

Throws a Bad resource ID after a package installation when the postinstall script is defined in the run file and the postinstall script doesn't run.

To Reproduce

  1. Create a run.json file and define a postinstall script
  2. Install a package

Expected behavior

Should run the postinstall script after an installation without throwing errors.

Screenshots

error: Uncaught (in promise) "Bad resource ID"

Desktop (please complete the following information):

  • OS: ArcoLinux VM
  • Deno version: v1.23.1
  • Trex Version v1.11.0 current dev branch with this last commit 4c6fae0

Additional context

The code works well until below this comment, in the line 133 throws the error: 4c6fae0

Make `--map` the default behaviour

It's frustrating to have to type this flag every time I want to add a package when it's required 85% of the time.

It would be nice if the behavior was the default and the user only needs to add things like --nest & --pkg when they're required.

Some other options:

  • The option to globally set the default package provider (flags would then only be needed for the non-default)
  • Set a default provider in a .trexrc file or something similar for local config.

[FEATURE REQUEST] run.yaml

In addition to having run.json, please support run.yaml. YAML is shorter and easier to write, but most of all, you can have comments. This is essentially a 1- or 2-line change inside run.ts.

Love the idea of TRex!!!

PS: completely unrelated, any thoughts of naming the imports command as trix -- shorter command, i is for import, unfortunately, it's not dinosaur-themed.

NotFound: No such file or directory

Describe the bug A clear and concise description of what the bug is.

When running trex install --map fs with my own entries in import_map.json, an error is produced saying NotFound: No such file or directory.

To Reproduce Steps to reproduce the behavior:

trex install --map fs results in error saying

time to installation: 2.8s
error: Uncaught (in promise) "NotFound: No such file or directory (os error 2)"

After some more testing, I found out that its import_map - when I run it with an import_map which doesn't have my own entries within it, no such error is produced.

import_map.json

Expected behavior A clear and concise description of what you expected to
happen.

To install without an error.

Screenshots If applicable, add screenshots to help explain your problem.

TrexTest
(trex also consumes extra lines when running trex install)

Desktop (please complete the following information):

  • OS: Arch Linux
  • Deno version: 1.29.2
  • Trex Version:
    image
    some version bug? it says I upgraded to 1.12.0 when using trex upgrade --canary but trex --version outputs 1.11.0.

Additional context Add any other context about the problem here.

Install from jspm

Is your feature request related to a problem? Please describe.
It should be easier to install npm packages with Trex.

Describe the solution you'd like
A new install flag --npm (or something comparable) for installing from jspm.dev

Describe alternatives you've considered
Manual install with full URL or from a repository.

The property `deno.import_map` is not recognized anymore on VS Code's Deno extesion.

Describe the bug
The property import_map on VS Code Deno extension is now importMap. Trex is creating it wrongly as of today.

To Reproduce
Steps to reproduce the behavior:

  1. Execute trex setup --vscode
  2. Check that it created .vscode/settings.json with deno.import_map property.

Expected behavior
The deno.import_map property should be deno.importMap.

Desktop (please complete the following information):

  • OS: Pop_OS! 20.10

Ability to pin dependencies to latest version without knowing the specific version number

Is your feature request related to a problem? Please describe.
When installing dependencies, similar to npm/yarn/pnpm, one might know the name of the dependency they want to install but not what its latest version is, but want to make sure that the version is pinned so that when other developers/CI install the dependencies they get the same version. Lockfiles in Deno seem more about ensuring the downloaded files are accurate, but not about pinning to particular versions without previously knowing them.

Describe the solution you'd like

Currently when running:

$ trex install --map fs

You'll get:

{
  "imports": {
    "fs/": "https://deno.land/std/fs/"
  }
}

What could be nice is potentially a new flag for pinning installed deps to the exact latest version:

# not sure about the name of this flag:
$ trex install --map --exact fs

# underneath the hood, the above command would effectively run:
$ trex install --map [email protected]
{
  "imports": {
    "fs/": "https://deno.land/[email protected]/fs/"
  }
}

This way you get the benefit of not having the dependencies changing between installs, if you care about that, and developers don't need to know the version prior to installing them.

Describe alternatives you've considered
The alternative would be to go on places like deno.land to lookup the versions of each dependency you want to install and manually enter them into the trex CLI when installing (e.g. trex install --map [email protected]).

run` trex i --map oak` failed ?

Describe the bug A clear and concise description of what the bug is.
run trex i --map oak failed ?
To Reproduce Steps to reproduce the behavior:

trex i --map oak
error: Uncaught (in promise) "\n\x1b[31m=>\x1b[39m \x1b[33moak\x1b[39m is not a third party module\n\x1b[32minstall using custom install\x1b[39m\n"

Expected behavior A clear and concise description of what you expected to
happen.

Screenshots If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: Microsoft Windows [Version 10.0.22621.1702]
  • Deno version: deno 1.33.1 (release, x86_64-pc-windows-msvc)
  • Trex Version :trex: v1.12.1

Additional context Add any other context about the problem here.

trex delete doesnt delete all the packages in import_map.json

Describe the bug

When i run from powershell trex delete doesnt delete the package from import_map.json file

To Reproduce Steps to reproduce the behavior:

  1. Run in powershell trex delete some_package

Screenshots
bug

Desktop

  • OS: Windows 10
  • Deno version: 1.12.1
  • Trex Version 1.29.4

Some times works but with some specific packages dont work

trex check incorrect latest version

import_map.json

{
  "imports": {
    "fs/": "https://deno.land/[email protected]/fs/"
  }
}
โฏ trex check
this is a deno.land/std package:

The package "fs" is outdate: current = 0.125.0; latest = 0.123.0;

[quick fix]: trex i -m [email protected]

To Reproduce Steps to reproduce the behavior:

  1. Use the import map file as above.
  2. execute trex check

Expected behavior
Not suggest an update command

System:

  • OS: Arch Linux 5.16.8
  • Deno version: 1.18.2
  • Trex Version 1.10.0

Running 'imports upgrade' gives syntax error

Running 'imports upgrade' gives syntax error.

Logs:

ฮป imports upgrade
Check https://denopkg.com/crewdevio/Trex@imports/cli.ts
error: Uncaught (in promise) SyntaxError: Unexpected token I in JSON at position 0
    at JSON.parse (<anonymous>)
    at Response.json (deno:op_crates/fetch/26_fetch.js:843:19)
    at async updateTrex (https://raw.githubusercontent.com/crewdevio/Trex/imports/utils/logs.ts:28:24)
    at async mainCli (https://raw.githubusercontent.com/crewdevio/Trex/imports/cli.ts:119:5)
    at async https://raw.githubusercontent.com/crewdevio/Trex/imports/cli.ts:170:3

'trex' not found

Describe the bug
I ran the command in the install section of the documentation:

deno install -A --unstable -n trex --no-check https://deno.land/x/trex/cli.ts

But when I run trex, I get a message 'trex' not found, did you mean:...

To Reproduce
Steps to reproduce the behavior:

  1. Install Trex with deno install -A --unstable -n trex --no-check https://deno.land/x/trex/cli.ts
  2. Close terminal
  3. Reopen terminal and run trex
  4. See error

Desktop:

  • OS: Ubuntu 20, Windows 10

Not available in VSCode's terminal

Describe the bug
Not available in VSCode's terminal, but everything is fine in Windows Terminal.

To Reproduce
Steps to reproduce the behavior:

  1. Open VSCode and go to Terminal
  2. Enter any of the commands under trex
  3. See error
error: Uncaught (in promise) TypeError: Path must be a string. Received undefined
    throw new TypeError(
          ^
    at assertPath (https://deno.land/[email protected]/path/_util.ts:18:11)
    at join (https://deno.land/[email protected]/path/win32.ts:333:5)
    at JsonStorage (https://deno.land/x/[email protected]/utils/storage.ts:41:9)
    at https://deno.land/x/[email protected]/handlers/handler_storage.ts:11:21

Expected behavior
Everything is fine, no errors are thrown

Screenshots

bug

Desktop (please complete the following information):

  • OS: Windows
  • Trex: 1.8.0
  • Deno: 1.12.2
  • VSCode: 1.59.1

Additional context
Add any other context about the problem here.

Trex not found path

Describe the bug
A clear and concise description of what the bug is.

I tried to install trex with the command in the README.
The command worked perfectly and the message is โœ… Successfully installed trex.
I tried to run trex and I get this error (in the screenshot)

To Reproduce
Steps to reproduce the behavior:

  1. Install trex.
  2. Run trex.
  3. See error.

Expected behavior
A clear and concise description of what you expected to happen.

Trex is supposed to show me the help pannel.

Screenshots
If applicable, add screenshots to help explain your problem.
Trex-err
Desktop (please complete the following information):

  • OS: Windows
  • Browser FireFox
  • Version 1909

Will Trex avoid the shortcomings of npm?

See here: https://youtu.be/M3BM9TB-8yA?t=584

Ryan Dahl is the creator of Node. Two years ago he presented his regrets about it. He regretted how the package.json "allowed the concept of a 'module' to mean a directory of files" and created a centralized repository with not much clarity on where the dependencies live. JS on the web usually doesn't follow this pattern. Package.json also became bloated in his eyes.

Does Trex avoid these shortcomings?

It does seem like Trex has some centralization like the package.json (pro and con of extracting imports into one place)... but also has the same specificity of deno for imports.

@RivierGrullon @buttercubz

  • Fellow JS developer

V2 Roadmap

Should have

  • Remove script runner. Maybe keep installation lifecycle.
  • Remove integrity checking,
  • Remove --watch flag.
  • Install from standard library first when using --mod flag, if can't find the name in the standard library then check in third-party libraries.
  • Add a way to install a third-party library with the same name as the standard.
  • Make --mod as default by using install subcommand.
  • Use deno.json(c) file as default importMap.

Maybe

  • Subcommand to parse npm scripts to deno tasks.
  • Subcommand to parse npm depedencies to deno importMap.

Probably before v2

  • Support to npm: packages.
  • Support to node: packages.
  • Support to deno.json(c) importMap.

Provide a Unique Selling Proposition for trex comparing it with Deno's new task runner

since deno 1.20 introduced an integrated task runner (https://deno.com/blog/v1.20#new-subcommand-deno-task), it seems interesting to point out the benefits of using trex instead of deno task...

I'm not that much into the details of trex & deno task yet - so I could not directly point this out in the readme via pull request or so.

As an example use case it might be worth comparing how https://deno.land/x/snel would look like with deno task instead of using trex.

A command to cache all dependencies

Is your feature request related to a problem? Please describe.
Typings while coding in a new environment aren't provided due to the module not being installed, and there is no command to cache them.

Describe the solution you'd like
trex cache - caches (installs) http urls in import_map.json

Describe alternatives you've considered

Additional context

Add NPM support, please

Is your feature request related to a problem? Please describe. A clear and
concise description of what the problem is. Ex. I'm always frustrated when [...]
Given Deno now supports installing packages from NPM, https://deno.land/[email protected]/node, it would be nice if Trex supported this too.

Describe the solution you'd like A clear and concise description of what you
want to happen.
Please support npm protocol as a source for packages, parse npm:hello...

Describe alternatives you've considered A clear and concise description of
any alternative solutions or features you've considered.
installing myself,

Additional context Add any other context or screenshots about the feature
request here.
Would allow porting tools such as storybook that depend on NPM.

Imports should never be used to import types error

Describe the bug
I tried to download the trex@imports version and Deno gave me a ton of errors regarding the importing of types. It says that it should import types with import type instead of import

To Reproduce
Steps to reproduce the behavior:

  1. Run deno install -A --unstable -n trex https://denopkg.com/crewdevio/Trex@imports/cli.ts

Expected behavior
I expected it to download trex

Screenshots
image

Desktop (please complete the following information):

  • OS: Windows
  • Browser: Chrome
  • Version: 10

Additional context
This is probably an easy fix and I will try to do it myself.

use versioned urls to avoid breaking trex

since trex imports works fine, for the next version migrate to the imports system to handle trex dependencies with versioned urls,
with this we prevent std version releases from breaking trex

Trex run scripts crash within GitHub Actions

Describe the bug

When calling trex run [...] in GitHub Actions, they throw an error and abort with error: Uncaught (in promise) Permission denied (os error 13).

To Reproduce

  1. Create a GitHub Actions workflow file as follows.
name: CI - Linting - Backend

on:
  pull_request:

jobs:
  lint:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v2
      - uses: denoland/setup-deno@v1
        with:
          deno-version: v1.x

      - name: Install Trex
        run: deno install -A --unstable --import-map=https://deno.land/x/trex/import_map.json -n trex --no-check https://deno.land/x/trex/cli.ts

      - name: Format the backend
        run: cd backend/ && trex run fmt

      - name: Lint the backend
        run: cd backend/ && trex run lint

      - name: Test the backend
        run: cd backend/ && trex run test
  1. The scripts were created in the run.json as follows.
{
  "scripts": {
    "lint": "deno lint --config deno.json",
    "fmt": "deno fmt --config deno.json",
    "test": "deno test --config deno.json --import-map=../import_map.json",
  },
  "files": [
    "./src"
  ]
}
  1. The following error will occur and stop the GitHub Actions.
Run cd backend/ && trex run fmt
  cd backend/ && trex run fmt
  shell: /usr/bin/bash -e {0}
error: Uncaught (in promise) Permission denied (os error 13)
Error: Process completed with exit code 1.

Expected behavior

The GitHub Actions should run the Trex scripts without any problems and should not throw any error and abort.

Screenshots

There are no screenshots available for this problem.

Desktop (please complete the following information):

Additional context

Maybe the problem is caused by the exec deno run --allow-all --quiet --no-check --unstable --import-map 'https://deno.land/x/trex/import_map.json' 'https://deno.land/x/trex/cli.ts' "$@" statement in the trex file in ~/.deno/bin/. This Stack Overflow post describes the problem with GitHub Actions and exec.

Trex not installing dependencies from import_map.json

Describe the bug
After running trex install it does not cache the following dependencies:

{
  "imports": {
    "./": "./",
    "/": "./",
    "dayjs": "https://cdn.skypack.dev/[email protected]?dts",
    "dayjs/plugin/": "https://cdn.skypack.dev/[email protected]/plugin/",
    "flags/": "https://deno.land/[email protected]/flags/",
    "fs/": "https://deno.land/[email protected]/fs/",
    "neverthrow": "https://cdn.skypack.dev/[email protected]?dts",
    "path/": "https://deno.land/[email protected]/path/"
  }
}

To Reproduce
Steps to reproduce the behavior:

  1. Execute trex install > info.txt with an import_map.json following the structure above
  2. See this message in the first line of the file "import_map.json file not found"

Expected behavior
Should download and cache the dependencies from the import_map.json file

Screenshots
image

Desktop (please complete the following information):

  • OS: Fedora 33 with KDE

Thank you!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.