Compare commits
10 commits
b42f691c27
...
0b54d6ce44
Author | SHA1 | Date | |
---|---|---|---|
Benjamin Bädorf | 0b54d6ce44 | ||
15b4c19f42 | |||
21efd7ac82 | |||
9f8afeffb2 | |||
296c4234db | |||
9586378845 | |||
db3563f20f | |||
89969955be | |||
0b6f2c800a | |||
c37c8e4e15 |
7
.github/workflows/ci.yml
vendored
7
.github/workflows/ci.yml
vendored
|
@ -2,6 +2,9 @@ name: CI
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
flake-check:
|
flake-check:
|
||||||
|
@ -10,7 +13,7 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: cachix/install-nix-action@v18
|
- uses: cachix/install-nix-action@v18
|
||||||
- uses: cachix/cachix-action@v11
|
- uses: cachix/cachix-action@v12
|
||||||
with:
|
with:
|
||||||
name: sno2wman
|
name: sno2wman
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
@ -22,7 +25,7 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: cachix/install-nix-action@v18
|
- uses: cachix/install-nix-action@v18
|
||||||
- uses: cachix/cachix-action@v11
|
- uses: cachix/cachix-action@v12
|
||||||
with:
|
with:
|
||||||
name: sno2wman
|
name: sno2wman
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -2,3 +2,6 @@
|
||||||
|
|
||||||
result
|
result
|
||||||
dist
|
dist
|
||||||
|
|
||||||
|
# VSCode
|
||||||
|
**/.vscode/settings.json
|
||||||
|
|
1
.vscode/extensions.json
vendored
1
.vscode/extensions.json
vendored
|
@ -3,7 +3,6 @@
|
||||||
"jnoortheen.nix-ide",
|
"jnoortheen.nix-ide",
|
||||||
"arrterian.nix-env-selector",
|
"arrterian.nix-env-selector",
|
||||||
"tamasfe.even-better-toml",
|
"tamasfe.even-better-toml",
|
||||||
"jkillian.custom-local-formatters",
|
|
||||||
"denoland.vscode-deno"
|
"denoland.vscode-deno"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
59
.vscode/settings.json
vendored
59
.vscode/settings.json
vendored
|
@ -1,59 +0,0 @@
|
||||||
{
|
|
||||||
"nixEnvSelector.nixFile": "${workspaceRoot}/shell.nix",
|
|
||||||
|
|
||||||
"deno.enable": true,
|
|
||||||
"deno.lint": true,
|
|
||||||
"deno.importMap": "./import_map.json",
|
|
||||||
"deno.config": "./deno.jsonc",
|
|
||||||
|
|
||||||
"json.schemas": [
|
|
||||||
{
|
|
||||||
"fileMatch": ["deno.jsonc"],
|
|
||||||
"url": "https://deno.land/x/deno/cli/schemas/config-file.v1.json"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
|
|
||||||
"customLocalFormatters.formatters": [
|
|
||||||
{
|
|
||||||
"command": "treefmt -q --stdin ${file}",
|
|
||||||
"languages": [
|
|
||||||
"json",
|
|
||||||
"jsonc",
|
|
||||||
"javascript",
|
|
||||||
"javascriptreact",
|
|
||||||
"typescript",
|
|
||||||
"typescriptreact",
|
|
||||||
"markdown",
|
|
||||||
"nix",
|
|
||||||
"toml"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"[toml]": {
|
|
||||||
"editor.defaultFormatter": "jkillian.custom-local-formatters"
|
|
||||||
},
|
|
||||||
"[nix]": {
|
|
||||||
"editor.defaultFormatter": "jkillian.custom-local-formatters"
|
|
||||||
},
|
|
||||||
"[markdown]": {
|
|
||||||
"editor.defaultFormatter": "jkillian.custom-local-formatters"
|
|
||||||
},
|
|
||||||
"[json]": {
|
|
||||||
"editor.defaultFormatter": "jkillian.custom-local-formatters"
|
|
||||||
},
|
|
||||||
"[jsonc]": {
|
|
||||||
"editor.defaultFormatter": "jkillian.custom-local-formatters"
|
|
||||||
},
|
|
||||||
"[javascript]": {
|
|
||||||
"editor.defaultFormatter": "jkillian.custom-local-formatters"
|
|
||||||
},
|
|
||||||
"[javascriptreact]": {
|
|
||||||
"editor.defaultFormatter": "jkillian.custom-local-formatters"
|
|
||||||
},
|
|
||||||
"[typescript]": {
|
|
||||||
"editor.defaultFormatter": "jkillian.custom-local-formatters"
|
|
||||||
},
|
|
||||||
"[typescriptreact]": {
|
|
||||||
"editor.defaultFormatter": "jkillian.custom-local-formatters"
|
|
||||||
}
|
|
||||||
}
|
|
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2022 SnO₂WMaN
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
52
README.md
52
README.md
|
@ -4,17 +4,7 @@
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
- lockfile -> `./lock.json`
|
There is a [sample project](/examples/simple).
|
||||||
- import map -> `./import_map.json`
|
|
||||||
- entrypoint -> `./mod.ts`
|
|
||||||
|
|
||||||
### Update `lock.json` for caching
|
|
||||||
|
|
||||||
```bash
|
|
||||||
deno cache --import-map=./import_map.json --lock lock.json --lock-write ./mod.ts
|
|
||||||
```
|
|
||||||
|
|
||||||
### Setup for nix flake (example)
|
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
{
|
{
|
||||||
|
@ -33,39 +23,25 @@ deno cache --import-map=./import_map.json --lock lock.json --lock-write ./mod.ts
|
||||||
inherit system;
|
inherit system;
|
||||||
overlays = with inputs; [
|
overlays = with inputs; [
|
||||||
devshell.overlay
|
devshell.overlay
|
||||||
deno2nix.overlay
|
deno2nix.overlays.default
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
packages.executable = deno2nix.mkExecutable {
|
packages.executable = deno2nix.mkExecutable {
|
||||||
pname = "example-executable";
|
pname = "simple-executable";
|
||||||
version = "0.1.2";
|
version = "0.1.0";
|
||||||
|
|
||||||
src = ./.;
|
src = ./.;
|
||||||
lockfile = ./lock.json;
|
bin = "simple";
|
||||||
|
|
||||||
output = "example";
|
|
||||||
entrypoint = "./mod.ts";
|
entrypoint = "./mod.ts";
|
||||||
importMap = "./import_map.json";
|
lockfile = "./deno.lock";
|
||||||
};
|
config = "./deno.jsonc";
|
||||||
});
|
|
||||||
}
|
allow = {
|
||||||
```
|
all = true;
|
||||||
|
};
|
||||||
### `deno2nix.mkExecutable`
|
});
|
||||||
|
|
||||||
#### Args
|
|
||||||
|
|
||||||
```nix
|
|
||||||
{
|
|
||||||
pname,
|
|
||||||
version,
|
|
||||||
src,
|
|
||||||
lockfile,
|
|
||||||
output ? pname, # generate binary name
|
|
||||||
entrypoint,
|
|
||||||
importMap ? null, # ex. "./import_map.json" to $src/${importMap}
|
|
||||||
additionalDenoFlags ? "", # ex. "--allow-net"
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"importMap": "./import_map.json",
|
||||||
"tasks": {
|
"tasks": {
|
||||||
"run": "deno run --import-map=./import_map.json ./mod.ts",
|
"run": "deno run -A ./mod.ts",
|
||||||
"compile": "deno compile --import-map=./import_map.json ./mod.ts",
|
"compile": "deno compile -A ./mod.ts"
|
||||||
"cache": "deno cache --import-map=./import_map.json --lock lock.json --lock-write ./mod.ts"
|
|
||||||
},
|
},
|
||||||
"fmt": {
|
"fmt": {
|
||||||
"options": {
|
"options": {
|
15
examples/npm/deno.lock
Normal file
15
examples/npm/deno.lock
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"version": "2",
|
||||||
|
"remote": {
|
||||||
|
"https://deno.land/std@0.118.0/fmt/colors.ts": "8368ddf2d48dfe413ffd04cdbb7ae6a1009cf0dccc9c7ff1d76259d9c61a0621"
|
||||||
|
},
|
||||||
|
"npm": {
|
||||||
|
"specifiers": { "chalk": "chalk@5.2.0" },
|
||||||
|
"packages": {
|
||||||
|
"chalk@5.2.0": {
|
||||||
|
"integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==",
|
||||||
|
"dependencies": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
5
examples/npm/import_map.json
Normal file
5
examples/npm/import_map.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"imports": {
|
||||||
|
"chalk": "npm:chalk"
|
||||||
|
}
|
||||||
|
}
|
36
examples/npm/mod.ts
Normal file
36
examples/npm/mod.ts
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
import chalk from "chalk";
|
||||||
|
|
||||||
|
console.log(`Hello!`);
|
||||||
|
console.log(
|
||||||
|
`This script was written for ${chalk.bgBlack(chalk.white("deno"))}${chalk.black("2")}${
|
||||||
|
chalk.rgb(126, 126, 255)("Nix")
|
||||||
|
} with npm ${chalk.italic("chalk")} module.`,
|
||||||
|
);
|
||||||
|
|
||||||
|
// https://github.com/dylanaraps/neofetch/blob/ccd5d9f52609bbdcd5d8fa78c4fdb0f12954125f/neofetch#L8976-L8998
|
||||||
|
const c1 = (t: string) => chalk.rgb(71, 111, 182)(t);
|
||||||
|
const c2 = (t: string) => chalk.rgb(126, 182, 225)(t);
|
||||||
|
console.log(
|
||||||
|
[
|
||||||
|
c1(" ▗▄▄▄ ") + c2("▗▄▄▄▄ ▄▄▄▖"),
|
||||||
|
c1(" ▜███▙ ") + c2("▜███▙ ▟███▛"),
|
||||||
|
c1(" ▜███▙ ") + c2("▜███▙▟███▛"),
|
||||||
|
c1(" ▜███▙ ") + c2("▜██████▛"),
|
||||||
|
c1(" ▟█████████████████▙ ") + c2("▜████▛ ") + c1("▟▙"),
|
||||||
|
c1(" ▟███████████████████▙ ") + c2("▜███▙ ") + c1("▟██▙"),
|
||||||
|
c2(" ▄▄▄▄▖ ") + c2("▜███▙ ") + c1("▟███▛"),
|
||||||
|
c2(" ▟███▛ ") + c2("▜██▛ ") + c1("▟███▛"),
|
||||||
|
c2(" ▟███▛ ") + c2("▜▛ ") + c1("▟███▛"),
|
||||||
|
c2("▟███████████▛ ") + c1("▟██████████▙"),
|
||||||
|
c2("▜██████████▛ ") + c1("▟███████████▛"),
|
||||||
|
c2(" ▟███▛") + c1(" ▟▙ ") + c1("▟███▛"),
|
||||||
|
c2(" ▟███▛") + c1(" ▟██▙ ") + c1("▟███▛"),
|
||||||
|
c2(" ▟███▛") + c1(" ▜███▙ ") + c1("▝▀▀▀▀"),
|
||||||
|
c2(" ▜██▛") + c1(" ▜███▙ ") + c2("▜██████████████████▛"),
|
||||||
|
c2(" ▜▛") + c1(" ▟████▙ ") + c2("▜████████████████▛"),
|
||||||
|
c1(" ▟██████▙ ") + c2("▜███▙"),
|
||||||
|
c1(" ▟███▛▜███▙ ") + c2("▜███▙"),
|
||||||
|
c1(" ▟███▛ ▜███▙ ") + c2("▜███▙"),
|
||||||
|
c1(" ▝▀▀▀ ▀▀▀▀▘ ") + c2("▀▀▀▘"),
|
||||||
|
].join("\n"),
|
||||||
|
);
|
1
examples/simple/.gitignore
vendored
Normal file
1
examples/simple/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
simple
|
11
examples/simple/bundled-wrapper.nix
Normal file
11
examples/simple/bundled-wrapper.nix
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{deno2nix}:
|
||||||
|
deno2nix.mkBundledWrapper {
|
||||||
|
pname = "simple-bundled";
|
||||||
|
version = "0.1.0";
|
||||||
|
|
||||||
|
src = ./.;
|
||||||
|
bin = "simple";
|
||||||
|
|
||||||
|
entrypoint = "./mod.ts";
|
||||||
|
lockfile = "./deno.lock";
|
||||||
|
}
|
11
examples/simple/bundled.nix
Normal file
11
examples/simple/bundled.nix
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{deno2nix}:
|
||||||
|
deno2nix.mkBundled {
|
||||||
|
pname = "simple-bundled";
|
||||||
|
version = "0.1.0";
|
||||||
|
|
||||||
|
src = ./.;
|
||||||
|
output = "bundled.js";
|
||||||
|
|
||||||
|
entrypoint = "./mod.ts";
|
||||||
|
lockfile = "./deno.lock";
|
||||||
|
}
|
20
examples/simple/deno.jsonc
Normal file
20
examples/simple/deno.jsonc
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"importMap": "./import_map.json",
|
||||||
|
"tasks": {
|
||||||
|
"run": "deno run ./mod.ts",
|
||||||
|
"compile": "deno compile ./mod.ts"
|
||||||
|
},
|
||||||
|
"fmt": {
|
||||||
|
"options": {
|
||||||
|
"lineWidth": 120,
|
||||||
|
"indentWidth": 2,
|
||||||
|
"singleQuote": false,
|
||||||
|
"useTabs": false
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"exclude": [
|
||||||
|
"./lock.json"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
6
examples/simple/deno.lock
Normal file
6
examples/simple/deno.lock
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"version": "2",
|
||||||
|
"remote": {
|
||||||
|
"https://deno.land/std@0.167.0/fmt/colors.ts": "03ad95e543d2808bc43c17a3dd29d25b43d0f16287fe562a0be89bf632454a12"
|
||||||
|
}
|
||||||
|
}
|
1
examples/simple/deps-link.nix
Normal file
1
examples/simple/deps-link.nix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{deno2nix}: deno2nix.internal.mkDepsLink ./deno.lock
|
16
examples/simple/executable.nix
Normal file
16
examples/simple/executable.nix
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{deno2nix}:
|
||||||
|
deno2nix.mkExecutable {
|
||||||
|
pname = "simple-executable";
|
||||||
|
version = "0.1.0";
|
||||||
|
|
||||||
|
src = ./.;
|
||||||
|
bin = "simple";
|
||||||
|
|
||||||
|
entrypoint = "./mod.ts";
|
||||||
|
lockfile = "./deno.lock";
|
||||||
|
config = "./deno.jsonc";
|
||||||
|
|
||||||
|
allow = {
|
||||||
|
all = true;
|
||||||
|
};
|
||||||
|
}
|
5
examples/simple/import_map.json
Normal file
5
examples/simple/import_map.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"imports": {
|
||||||
|
"std/": "https://deno.land/std@0.167.0/"
|
||||||
|
}
|
||||||
|
}
|
32
examples/simple/mod.ts
Normal file
32
examples/simple/mod.ts
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
import { bgBlack, black, rgb24, white } from "std/fmt/colors.ts";
|
||||||
|
|
||||||
|
console.log(`Hello!`);
|
||||||
|
console.log(`This script was written for ${bgBlack(white("deno"))}${black("2")}${rgb24("Nix", 0x7E7EFF)}.`);
|
||||||
|
|
||||||
|
// https://github.com/dylanaraps/neofetch/blob/ccd5d9f52609bbdcd5d8fa78c4fdb0f12954125f/neofetch#L8976-L8998
|
||||||
|
const c1 = (t: string) => rgb24(t, 0x4D6FB6);
|
||||||
|
const c2 = (t: string) => rgb24(t, 0x7EB6E1);
|
||||||
|
console.log(
|
||||||
|
[
|
||||||
|
c1(" ▗▄▄▄ ") + c2("▗▄▄▄▄ ▄▄▄▖"),
|
||||||
|
c1(" ▜███▙ ") + c2("▜███▙ ▟███▛"),
|
||||||
|
c1(" ▜███▙ ") + c2("▜███▙▟███▛"),
|
||||||
|
c1(" ▜███▙ ") + c2("▜██████▛"),
|
||||||
|
c1(" ▟█████████████████▙ ") + c2("▜████▛ ") + c1("▟▙"),
|
||||||
|
c1(" ▟███████████████████▙ ") + c2("▜███▙ ") + c1("▟██▙"),
|
||||||
|
c2(" ▄▄▄▄▖ ") + c2("▜███▙ ") + c1("▟███▛"),
|
||||||
|
c2(" ▟███▛ ") + c2("▜██▛ ") + c1("▟███▛"),
|
||||||
|
c2(" ▟███▛ ") + c2("▜▛ ") + c1("▟███▛"),
|
||||||
|
c2("▟███████████▛ ") + c1("▟██████████▙"),
|
||||||
|
c2("▜██████████▛ ") + c1("▟███████████▛"),
|
||||||
|
c2(" ▟███▛") + c1(" ▟▙ ") + c1("▟███▛"),
|
||||||
|
c2(" ▟███▛") + c1(" ▟██▙ ") + c1("▟███▛"),
|
||||||
|
c2(" ▟███▛") + c1(" ▜███▙ ") + c1("▝▀▀▀▀"),
|
||||||
|
c2(" ▜██▛") + c1(" ▜███▙ ") + c2("▜██████████████████▛"),
|
||||||
|
c2(" ▜▛") + c1(" ▟████▙ ") + c2("▜████████████████▛"),
|
||||||
|
c1(" ▟██████▙ ") + c2("▜███▙"),
|
||||||
|
c1(" ▟███▛▜███▙ ") + c2("▜███▙"),
|
||||||
|
c1(" ▟███▛ ▜███▙ ") + c2("▜███▙"),
|
||||||
|
c1(" ▝▀▀▀ ▀▀▀▀▘ ") + c2("▀▀▀▘"),
|
||||||
|
].join("\n"),
|
||||||
|
);
|
24
flake.lock
24
flake.lock
|
@ -10,11 +10,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1654858401,
|
"lastModified": 1667210711,
|
||||||
"narHash": "sha256-53bw34DtVJ2bnF6WEwy6Tym+qY0pNEiEwARUlvmTZjs=",
|
"narHash": "sha256-IoErjXZAkzYWHEpQqwu/DeRNJGFdR7X2OGbkhMqMrpw=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "devshell",
|
"repo": "devshell",
|
||||||
"rev": "f55e05c6d3bbe9acc7363bc8fc739518b2f02976",
|
"rev": "96a9dd12b8a447840cc246e17a47b81a4268bba7",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -26,11 +26,11 @@
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1650374568,
|
"lastModified": 1668681692,
|
||||||
"narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
|
"narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "b4a34015c698c7793d592d66adbab377907a2be8",
|
"rev": "009399224d5e398d03b22badca40a37ac85412a1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -41,11 +41,11 @@
|
||||||
},
|
},
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1653893745,
|
"lastModified": 1667395993,
|
||||||
"narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=",
|
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "flake-utils",
|
"repo": "flake-utils",
|
||||||
"rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1",
|
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -56,11 +56,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1655400192,
|
"lastModified": 1670332253,
|
||||||
"narHash": "sha256-49OBVVRgb9H/PSmNT9W61+NRdDbuSJVuDDflwXlaUKU=",
|
"narHash": "sha256-O5SmhlIUt1s+vK4NXeGYqwcBIMwbBPAEZ3GHE3XT28c=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "3d7435c638baffaa826b85459df0fff47f12317d",
|
"rev": "1c9ffcf70786f0966982ce0fc76ec05df2e1dec2",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
67
flake.nix
67
flake.nix
|
@ -26,7 +26,6 @@
|
||||||
} @ inputs:
|
} @ inputs:
|
||||||
{
|
{
|
||||||
overlays.default = import ./nix/overlay.nix;
|
overlays.default = import ./nix/overlay.nix;
|
||||||
overlay = self.overlays.default;
|
|
||||||
}
|
}
|
||||||
// flake-utils.lib.eachSystem [
|
// flake-utils.lib.eachSystem [
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
|
@ -45,49 +44,33 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
packages.depslink = deno2nix.internal.mkDepsLink ./lock.json;
|
/*
|
||||||
packages.bundled = deno2nix.mkBundled {
|
TODO: It can't but I don't why
|
||||||
pname = "example-bundled";
|
packages = flake-utils.lib.flattenTree {
|
||||||
version = "0.1.0";
|
simple = {
|
||||||
|
deps-link = pkgs.callPackage ./examples/simple/deps-link.nix {};
|
||||||
src = ./.;
|
executable = pkgs.callPackage ./examples/simple/executable.nix {};
|
||||||
lockfile = ./lock.json;
|
};
|
||||||
|
|
||||||
output = "bundled.js";
|
|
||||||
entrypoint = "./mod.ts";
|
|
||||||
importMap = "./import_map.json";
|
|
||||||
};
|
};
|
||||||
packages.bundled-wrapper = deno2nix.mkBundledWrapper {
|
*/
|
||||||
pname = "example-bundled-wrapper";
|
packages = {
|
||||||
version = "0.1.0";
|
"simple/deps-link" = pkgs.callPackage ./examples/simple/deps-link.nix {};
|
||||||
|
"simple/bundled" = pkgs.callPackage ./examples/simple/bundled.nix {};
|
||||||
src = ./.;
|
"simple/bundled-wrapper" = pkgs.callPackage ./examples/simple/bundled-wrapper.nix {};
|
||||||
lockfile = ./lock.json;
|
"simple/executable" = pkgs.callPackage ./examples/simple/executable.nix {};
|
||||||
|
|
||||||
output = "bundled.js";
|
|
||||||
entrypoint = "./mod.ts";
|
|
||||||
importMap = "./import_map.json";
|
|
||||||
};
|
};
|
||||||
packages.executable = deno2nix.mkExecutable {
|
apps = {
|
||||||
pname = "example-executable";
|
"simple/executable" = flake-utils.lib.mkApp {
|
||||||
version = "0.1.2";
|
drv = self.packages.${system}."simple/executable";
|
||||||
|
name = "simple";
|
||||||
src = ./.;
|
};
|
||||||
lockfile = ./lock.json;
|
"simple/bundled-wrapper" = flake-utils.lib.mkApp {
|
||||||
|
drv = self.packages.${system}."simple/bundled-wrapper";
|
||||||
output = "example";
|
name = "simple";
|
||||||
entrypoint = "./mod.ts";
|
};
|
||||||
importMap = "./import_map.json";
|
|
||||||
};
|
};
|
||||||
packages.default = self.packages.${system}.executable;
|
|
||||||
defaultPackage = self.packages.${system}.default;
|
|
||||||
|
|
||||||
apps.bundled-wrapper = flake-utils.lib.mkApp {drv = self.packages.${system}.bundled-wrapper;};
|
|
||||||
apps.executable = flake-utils.lib.mkApp {drv = self.packages.${system}.executable;};
|
|
||||||
apps.default = self.apps.${system}.executable;
|
|
||||||
|
|
||||||
checks = self.packages.${system};
|
checks = self.packages.${system};
|
||||||
|
|
||||||
devShells.default = pkgs.devshell.mkShell {
|
devShells.default = pkgs.devshell.mkShell {
|
||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
alejandra
|
alejandra
|
||||||
|
@ -95,12 +78,6 @@
|
||||||
treefmt
|
treefmt
|
||||||
taplo-cli
|
taplo-cli
|
||||||
];
|
];
|
||||||
commands = [
|
|
||||||
{
|
|
||||||
package = "treefmt";
|
|
||||||
category = "formatters";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
{
|
|
||||||
"imports": {
|
|
||||||
"std/": "https://deno.land/std@0.118.0/"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
{
|
|
||||||
"https://deno.land/std@0.118.0/fmt/colors.ts": "8368ddf2d48dfe413ffd04cdbb7ae6a1009cf0dccc9c7ff1d76259d9c61a0621"
|
|
||||||
}
|
|
3
mod.ts
3
mod.ts
|
@ -1,3 +0,0 @@
|
||||||
import { green, italic } from "std/fmt/colors.ts";
|
|
||||||
|
|
||||||
console.log(`Hello ${italic(green("World"))}!`);
|
|
14
nix/internal/artifact-path.nix
Normal file
14
nix/internal/artifact-path.nix
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
deno2nix,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (builtins) hashString;
|
||||||
|
inherit (deno2nix.internal) urlPart;
|
||||||
|
in
|
||||||
|
# input: https://deno.land/std@0.118.0/fmt/colors.ts
|
||||||
|
#
|
||||||
|
# output: https/deno.land/<sha256 "/std@0.118.0/fmt/colors.ts">
|
||||||
|
url: let
|
||||||
|
up = urlPart url;
|
||||||
|
in "${up 0}/${up 1}/${hashString "sha256" (up 2)}"
|
7
nix/internal/default.nix
Normal file
7
nix/internal/default.nix
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{pkgs, ...}: {
|
||||||
|
urlPart = pkgs.callPackage ./url-part.nix {};
|
||||||
|
artifactPath = pkgs.callPackage ./artifact-path.nix {};
|
||||||
|
mkDepsLink = pkgs.callPackage ./mk-deps-link.nix {};
|
||||||
|
findImportMap =
|
||||||
|
pkgs.callPackage ./find-import-map.nix {};
|
||||||
|
}
|
10
nix/internal/find-import-map.nix
Normal file
10
nix/internal/find-import-map.nix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{lib, ...}: let
|
||||||
|
inherit (lib) importJSON;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
src,
|
||||||
|
config,
|
||||||
|
importMap,
|
||||||
|
}:
|
||||||
|
# TODO: if importMap is exists, fallback
|
||||||
|
((importJSON (src + "/${config}")).importMap)
|
|
@ -1,27 +1,16 @@
|
||||||
{
|
{
|
||||||
pkgs,
|
|
||||||
lib,
|
lib,
|
||||||
linkFarm,
|
linkFarm,
|
||||||
writeText,
|
writeText,
|
||||||
|
deno2nix,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (builtins) split elemAt fetchurl toJSON hashString baseNameOf;
|
inherit (builtins) split elemAt fetchurl toJSON hashString baseNameOf;
|
||||||
inherit (lib) flatten mapAttrsToList importJSON;
|
inherit (lib) flatten mapAttrsToList importJSON;
|
||||||
inherit (lib.strings) sanitizeDerivationName;
|
inherit (lib.strings) sanitizeDerivationName;
|
||||||
|
inherit (deno2nix.internal) artifactPath;
|
||||||
# https://deno.land/std@0.118.0/fmt/colors.ts
|
in
|
||||||
#
|
lockfile: (
|
||||||
# 0. "https"
|
|
||||||
# 1. "deno.land"
|
|
||||||
# 2. "/std@0.118.0/fmt/colors.ts"
|
|
||||||
urlPart = url: elemAt (flatten (split "://([a-z0-9\.]*)" url));
|
|
||||||
|
|
||||||
# https://deno.land/std@0.118.0/fmt/colors.ts
|
|
||||||
#
|
|
||||||
# https/deno.land/<sha256 "/std@0.118.0/fmt/colors.ts">
|
|
||||||
artifactPath = url: let up = urlPart url; in "${up 0}/${up 1}/${hashString "sha256" (up 2)}";
|
|
||||||
in {
|
|
||||||
mkDepsLink = lockfile: (
|
|
||||||
linkFarm "deps" (flatten (
|
linkFarm "deps" (flatten (
|
||||||
mapAttrsToList
|
mapAttrsToList
|
||||||
(
|
(
|
||||||
|
@ -43,7 +32,6 @@ in {
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
(importJSON lockfile)
|
(importJSON lockfile).remote
|
||||||
))
|
))
|
||||||
);
|
)
|
||||||
}
|
|
11
nix/internal/url-part.nix
Normal file
11
nix/internal/url-part.nix
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{lib, ...}: let
|
||||||
|
inherit (builtins) split elemAt;
|
||||||
|
inherit (lib) flatten;
|
||||||
|
in
|
||||||
|
# input: https://deno.land/std@0.118.0/fmt/colors.ts
|
||||||
|
#
|
||||||
|
# output:
|
||||||
|
# 0. "https"
|
||||||
|
# 1. "deno.land"
|
||||||
|
# 2. "/std@0.118.0/fmt/colors.ts"
|
||||||
|
url: elemAt (flatten (split "://([a-z0-9\.]*)" url))
|
|
@ -1,17 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
deno,
|
|
||||||
deno2nix,
|
|
||||||
writeShellScriptBin,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
pname,
|
|
||||||
bin ? pname,
|
|
||||||
output ? "bundled.js",
|
|
||||||
...
|
|
||||||
} @ args: let
|
|
||||||
bundled = deno2nix.mkBundled args;
|
|
||||||
in
|
|
||||||
writeShellScriptBin
|
|
||||||
bin
|
|
||||||
"${deno}/bin/deno run ${bundled}/dist/${output}"
|
|
|
@ -1,43 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
stdenv,
|
|
||||||
deno2nix,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
pname,
|
|
||||||
version,
|
|
||||||
src,
|
|
||||||
lockfile,
|
|
||||||
output ? "bundled.js",
|
|
||||||
entrypoint,
|
|
||||||
importMap ? null,
|
|
||||||
additionalDenoFlags ? "",
|
|
||||||
}: let
|
|
||||||
inherit (deno2nix.internal) mkDepsLink;
|
|
||||||
in
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
inherit pname version entrypoint src;
|
|
||||||
buildInputs = with pkgs; [deno jq];
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
export DENO_DIR="/tmp/deno2nix"
|
|
||||||
mkdir -p $DENO_DIR
|
|
||||||
ln -s "${mkDepsLink lockfile}" $(deno info --json | jq -r .modulesCache)
|
|
||||||
|
|
||||||
deno bundle \
|
|
||||||
--lock="${lockfile}" \
|
|
||||||
${
|
|
||||||
if importMap != null
|
|
||||||
then "--import-map=\"$src/${importMap}\""
|
|
||||||
else ""
|
|
||||||
} \
|
|
||||||
${additionalDenoFlags} \
|
|
||||||
"$src/${entrypoint}" \
|
|
||||||
"${output}"
|
|
||||||
'';
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out/dist
|
|
||||||
install -t $out/dist "${output}"
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
stdenv,
|
|
||||||
deno2nix,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
pname,
|
|
||||||
version,
|
|
||||||
src,
|
|
||||||
lockfile,
|
|
||||||
output ? pname,
|
|
||||||
entrypoint,
|
|
||||||
importMap ? null,
|
|
||||||
additionalDenoFlags ? "",
|
|
||||||
}: let
|
|
||||||
inherit (deno2nix.internal) mkDepsLink;
|
|
||||||
in
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
inherit pname version src;
|
|
||||||
dontFixup = true;
|
|
||||||
|
|
||||||
buildInputs = with pkgs; [deno jq];
|
|
||||||
buildPhase = ''
|
|
||||||
export DENO_DIR="/tmp/deno2nix"
|
|
||||||
mkdir -p $DENO_DIR
|
|
||||||
ln -s "${mkDepsLink lockfile}" $(deno info --json | jq -r .modulesCache)
|
|
||||||
|
|
||||||
deno compile \
|
|
||||||
--cached-only \
|
|
||||||
--lock="${lockfile}" \
|
|
||||||
--output="${output}" \
|
|
||||||
${
|
|
||||||
if importMap != null
|
|
||||||
then "--import-map=\"$src/${importMap}\""
|
|
||||||
else ""
|
|
||||||
} \
|
|
||||||
${additionalDenoFlags} \
|
|
||||||
"$src/${entrypoint}"
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out/bin
|
|
||||||
cp "${output}" "$out/bin/"
|
|
||||||
'';
|
|
||||||
}
|
|
19
nix/mk-bundled-wrapper.nix
Normal file
19
nix/mk-bundled-wrapper.nix
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
deno,
|
||||||
|
deno2nix,
|
||||||
|
writeShellScriptBin,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
pname,
|
||||||
|
bin ? pname,
|
||||||
|
output ? "${pname}.bundled.js",
|
||||||
|
outPath ? "dist",
|
||||||
|
...
|
||||||
|
} @ args: let
|
||||||
|
inherit (lib) filterAttrs;
|
||||||
|
bundled = deno2nix.mkBundled (filterAttrs (n: v: n != "bin") args);
|
||||||
|
in
|
||||||
|
writeShellScriptBin
|
||||||
|
bin
|
||||||
|
"${deno}/bin/deno run ${bundled}/${outPath}/${output}"
|
57
nix/mk-bundled.nix
Normal file
57
nix/mk-bundled.nix
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
deno2nix,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
pname,
|
||||||
|
version,
|
||||||
|
src,
|
||||||
|
output ? "${pname}.bundled.js",
|
||||||
|
outPath ? "dist",
|
||||||
|
entrypoint,
|
||||||
|
lockfile,
|
||||||
|
minify ? false,
|
||||||
|
additionalDenoFlags ? "",
|
||||||
|
}: let
|
||||||
|
inherit (builtins) isString;
|
||||||
|
inherit (lib.strings) concatStringsSep;
|
||||||
|
inherit (deno2nix.internal) mkDepsLink;
|
||||||
|
|
||||||
|
bundleCmd = concatStringsSep " " (
|
||||||
|
[
|
||||||
|
"deno bundle"
|
||||||
|
"--lock=${lockfile}"
|
||||||
|
# "--config=${config}"
|
||||||
|
]
|
||||||
|
++ [additionalDenoFlags]
|
||||||
|
++ [
|
||||||
|
"${entrypoint}"
|
||||||
|
"${output}"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
inherit pname version entrypoint src;
|
||||||
|
buildInputs = with pkgs; [deno jq nodePackages.uglify-js];
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
export DENO_DIR="/tmp/deno2nix"
|
||||||
|
mkdir -p $DENO_DIR
|
||||||
|
ln -s "${mkDepsLink (src + "/${lockfile}")}" $(deno info --json | jq -r .modulesCache)
|
||||||
|
${bundleCmd}
|
||||||
|
${
|
||||||
|
if minify
|
||||||
|
then ''
|
||||||
|
mv ${output} ${output}-non-min
|
||||||
|
uglifyjs ${output}-non-min -c -m > ${output}
|
||||||
|
''
|
||||||
|
else ""
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/${outPath}
|
||||||
|
install -t $out/${outPath} "${output}"
|
||||||
|
'';
|
||||||
|
}
|
73
nix/mk-executable.nix
Normal file
73
nix/mk-executable.nix
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
deno2nix,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
pname,
|
||||||
|
version,
|
||||||
|
src,
|
||||||
|
bin ? pname,
|
||||||
|
buildInputs ? [],
|
||||||
|
entrypoint,
|
||||||
|
lockfile,
|
||||||
|
config,
|
||||||
|
allow ? {},
|
||||||
|
additionalDenoFlags ? "",
|
||||||
|
} @ inputs: let
|
||||||
|
inherit (builtins) isString;
|
||||||
|
inherit (lib) importJSON concatStringsSep;
|
||||||
|
inherit (deno2nix.internal) mkDepsLink findImportMap;
|
||||||
|
|
||||||
|
allowflag = flag: (
|
||||||
|
if (allow ? flag) && allow."${flag}"
|
||||||
|
then ["--allow-${flag}"]
|
||||||
|
else []
|
||||||
|
);
|
||||||
|
|
||||||
|
importMap = findImportMap {
|
||||||
|
inherit (inputs) src config importMap;
|
||||||
|
};
|
||||||
|
|
||||||
|
compileCmd = concatStringsSep " " (
|
||||||
|
[
|
||||||
|
"deno compile --cached-only"
|
||||||
|
"--lock=${lockfile}"
|
||||||
|
"--output=${bin}"
|
||||||
|
# "--config=${config}"
|
||||||
|
]
|
||||||
|
++ (
|
||||||
|
if (isString importMap)
|
||||||
|
then ["--import-map=${importMap}"]
|
||||||
|
else []
|
||||||
|
)
|
||||||
|
++ (allowflag "all")
|
||||||
|
++ (allowflag "env")
|
||||||
|
++ (allowflag "ffi")
|
||||||
|
++ (allowflag "hrtime")
|
||||||
|
++ (allowflag "net")
|
||||||
|
++ (allowflag "read")
|
||||||
|
++ (allowflag "run")
|
||||||
|
++ (allowflag "sys")
|
||||||
|
++ (allowflag "write")
|
||||||
|
++ [additionalDenoFlags]
|
||||||
|
++ ["${entrypoint}"]
|
||||||
|
);
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
inherit pname version src;
|
||||||
|
dontFixup = true;
|
||||||
|
|
||||||
|
buildInputs = with pkgs; [deno jq] ++ buildInputs;
|
||||||
|
buildPhase = ''
|
||||||
|
export DENO_DIR="/tmp/deno2nix"
|
||||||
|
mkdir -p $DENO_DIR
|
||||||
|
ln -s "${mkDepsLink (src + "/${lockfile}")}" $(deno info --json | jq -r .modulesCache)
|
||||||
|
${compileCmd}
|
||||||
|
'';
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
cp "${bin}" "$out/bin/"
|
||||||
|
'';
|
||||||
|
}
|
|
@ -1,9 +1,9 @@
|
||||||
final: prev: {
|
final: prev: {
|
||||||
deno2nix = {
|
deno2nix = {
|
||||||
mkBundled = final.callPackage ./make-bundled.nix {};
|
mkBundled = final.callPackage ./mk-bundled.nix {};
|
||||||
mkBundledWrapper = final.callPackage ./make-bundled-wrapper.nix {};
|
mkBundledWrapper = final.callPackage ./mk-bundled-wrapper.nix {};
|
||||||
mkExecutable = final.callPackage ./make-executable.nix {};
|
mkExecutable = final.callPackage ./mk-executable.nix {};
|
||||||
|
|
||||||
internal = final.callPackage ./internal.nix {};
|
internal = final.callPackage ./internal {};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue