mono-jsx-dom 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -16,12 +16,6 @@
16
16
 
17
17
  Playground: https://val.town/x/ije/mono-jsx-dom
18
18
 
19
- ## Installation
20
-
21
- ```bash
22
- npm install mono-jsx-dom
23
- ```
24
-
25
19
  ## Getting Started
26
20
 
27
21
  You can run the `mono-jsx-dom int` command to initialize a project with mono-jsx-dom boilerplate.
package/bin/build.mjs CHANGED
@@ -5,7 +5,7 @@ import { lstat, readFile, writeFile } from "node:fs/promises";
5
5
  import * as esbuild from "esbuild";
6
6
 
7
7
  // bin/utils.ts
8
- import { argv, stdin, stdout } from "node:process";
8
+ import { argv, exit, stdin, stdout } from "node:process";
9
9
  import { access, mkdir } from "node:fs/promises";
10
10
  import { createInterface } from "node:readline/promises";
11
11
  function parseFlags() {
package/bin/dev.mjs CHANGED
@@ -1,10 +1,10 @@
1
1
  // bin/dev.ts
2
- import { cwd, env, exit, versions } from "node:process";
2
+ import { cwd, env, exit as exit2, versions } from "node:process";
3
3
  import { join, relative } from "node:path";
4
4
  import { spawn } from "node:child_process";
5
5
 
6
6
  // bin/utils.ts
7
- import { argv, stdin, stdout } from "node:process";
7
+ import { argv, exit, stdin, stdout } from "node:process";
8
8
  import { access, mkdir } from "node:fs/promises";
9
9
  import { createInterface } from "node:readline/promises";
10
10
  function parseFlags() {
@@ -178,10 +178,10 @@ async function dev(options) {
178
178
  ac.abort();
179
179
  };
180
180
  if (!isBun) {
181
- const [major, minor] = versions.node.slice(1).split(".").map(Number);
181
+ const [major, minor] = versions.node.split(".").map(Number);
182
182
  if (major < 22 || major === 22 && minor < 18) {
183
183
  console.error("Node.js version 22.18.0 or higher is required to use the dev command.");
184
- exit(1);
184
+ exit2(1);
185
185
  }
186
186
  }
187
187
  await build({
package/bin/init.mjs CHANGED
@@ -5,14 +5,125 @@ import { dirname, join } from "node:path";
5
5
  import { readFile, writeFile } from "node:fs/promises";
6
6
 
7
7
  // bin/utils.ts
8
- import { argv, stdin, stdout } from "node:process";
8
+ import { argv, exit, stdin, stdout } from "node:process";
9
9
  import { access, mkdir } from "node:fs/promises";
10
10
  import { createInterface } from "node:readline/promises";
11
+ async function input(prompt, placeholder = "") {
12
+ const hint = `\x1B[34m?\x1B[0m ${prompt}:`;
13
+ if (stdin.isTTY && stdout.isTTY) {
14
+ let text = "";
15
+ const render = () => {
16
+ stdout.write(`\r\x1B[2K${hint} `);
17
+ if (text) {
18
+ stdout.write(text);
19
+ } else if (placeholder) {
20
+ stdout.write(`\x1B[90m${placeholder}\x1B[0m`);
21
+ stdout.write(`\x1B[${placeholder.length}D`);
22
+ }
23
+ };
24
+ render();
25
+ const wasRaw = stdin.isRaw;
26
+ stdin.setRawMode(true);
27
+ stdin.resume();
28
+ try {
29
+ text = await new Promise((resolve) => {
30
+ const decoder = new TextDecoder("utf8");
31
+ const onData = (buf) => {
32
+ const chars = typeof buf === "string" ? buf : decoder.decode(buf);
33
+ switch (chars) {
34
+ case "":
35
+ stdout.write("\x1B[999C\n\x1B[90mcancelled\x1B[0m\n");
36
+ exit(130);
37
+ return;
38
+ case "\r":
39
+ case "\n":
40
+ stdin.off("data", onData);
41
+ resolve(text.trim() || placeholder);
42
+ return;
43
+ case "\x7F":
44
+ case "\b":
45
+ text = text.slice(0, -1);
46
+ render();
47
+ return;
48
+ case "":
49
+ text = "";
50
+ render();
51
+ return;
52
+ case " ":
53
+ if (!text && placeholder) {
54
+ text = placeholder;
55
+ render();
56
+ }
57
+ return;
58
+ }
59
+ if (chars.startsWith("\x1B")) {
60
+ return;
61
+ }
62
+ text += chars;
63
+ render();
64
+ };
65
+ stdin.on("data", onData);
66
+ });
67
+ stdout.write(`\r\x1B[2K${hint} \x1B[32m${text}\x1B[0m
68
+ `);
69
+ return text;
70
+ } finally {
71
+ stdin.setRawMode(wasRaw ?? false);
72
+ }
73
+ }
74
+ const rl = createInterface({ input: stdin, output: stdout });
75
+ try {
76
+ const line = await rl.question(hint + (placeholder ? " \x1B[90m" + placeholder + "\x1B[0m" : ""));
77
+ if (stdout.isTTY) {
78
+ stdout.write(`\x1B[1A\r\x1B[34m?\x1B[0m ${prompt} \x1B[32m${line.trim()}\x1B[0m\x1B[K
79
+ `);
80
+ }
81
+ return line.trim() || placeholder;
82
+ } finally {
83
+ rl.close();
84
+ }
85
+ }
11
86
  async function confirm(prompt) {
87
+ const hint = "\x1B[34m?\x1B[0m " + prompt + " \x1B[90m(y/N)\x1B[0m ";
88
+ if (stdin.isTTY) {
89
+ stdout.write(hint);
90
+ const wasRaw = stdin.isRaw;
91
+ stdin.setRawMode(true);
92
+ try {
93
+ const yes = await new Promise((resolve) => {
94
+ stdin.once("data", (buf) => {
95
+ const c = typeof buf === "string" ? buf.charCodeAt(0) : buf[0];
96
+ switch (c) {
97
+ case 3:
98
+ stdout.write("\x1B[999C\n\x1B[90mcancelled\x1B[0m\n");
99
+ exit(130);
100
+ break;
101
+ case 89:
102
+ // Y
103
+ case 121:
104
+ resolve(true);
105
+ break;
106
+ default:
107
+ resolve(false);
108
+ break;
109
+ }
110
+ });
111
+ });
112
+ if (stdout.isTTY) {
113
+ const answer = yes ? "\x1B[32myes\x1B[0m" : "\x1B[90mno\x1B[0m";
114
+ stdout.write(`\r\x1B[2K\x1B[34m?\x1B[0m ${prompt} ${answer}
115
+ `);
116
+ }
117
+ return yes;
118
+ } finally {
119
+ stdin.setRawMode(wasRaw ?? false);
120
+ }
121
+ }
12
122
  const rl = createInterface({ input: stdin, output: stdout });
13
123
  try {
14
- const line = await rl.question("\x1B[34m?\x1B[0m " + prompt + " \x1B[90m(y/N)\x1B[0m ");
15
- const yes = /^y(es)?$/i.test(line.trim());
124
+ const line = await rl.question(hint);
125
+ const t = line.trim();
126
+ const yes = t === "" || /^y(es)?$/i.test(t);
16
127
  if (stdout.isTTY) {
17
128
  const answer = yes ? "\x1B[32myes\x1B[0m" : "\x1B[90mno\x1B[0m";
18
129
  stdout.write(`\x1B[1A\r\x1B[34m?\x1B[0m ${prompt} ${answer}\x1B[K
@@ -53,9 +164,9 @@ var template = {
53
164
  version: "0.0.0",
54
165
  private: true,
55
166
  scripts: {
56
- dev: "mono-jsx-dom dev",
57
- build: "mono-jsx-dom build",
58
- start: bun ? "mono-jsx-dom build && bun dist/server.mjs" : "mono-jsx-dom build --node && node dist/server.mjs"
167
+ dev: (bun ? "bun --bun" : "") + " mono-jsx-dom dev",
168
+ build: (bun ? "bun --bun" : "") + " mono-jsx-dom build",
169
+ start: bun ? "bun --bun mono-jsx-dom build && bun dist/server.mjs" : "mono-jsx-dom build --node && node dist/server.mjs"
59
170
  }
60
171
  },
61
172
  null,
@@ -109,8 +220,8 @@ export default {
109
220
  }
110
221
  `
111
222
  };
112
- function run() {
113
- const appName = argv2[3] ?? "mono-app";
223
+ async function run() {
224
+ const appName = argv2[3] ?? await input("Enter the name of the app", "mono-app");
114
225
  return init(appName);
115
226
  }
116
227
  async function init(appName) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mono-jsx-dom",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "A JSX runtime for browsers.",
5
5
  "keywords": [
6
6
  "jsx",