@n42/cli 0.3.7 → 0.3.9

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.
@@ -1,3 +1,6 @@
1
+ let terminal;
2
+ let discoveryTrace;
3
+
1
4
  function formatSvg() {
2
5
  const bubble = document.getElementById("bubble");
3
6
  const svgEl = bubble.querySelector("svg");
@@ -42,7 +45,71 @@ function addDownloadLinkListener() {
42
45
  });
43
46
  }
44
47
 
48
+ function addSvgClickListener() {
49
+ const bubble = document.getElementById("bubble");
50
+ const svgEl = bubble.querySelector("svg");
51
+
52
+ svgEl.addEventListener("click", function (e) {
53
+ const link = e.target.closest("a");
54
+ if (link) {
55
+ e.preventDefault();
56
+ const url = link.getAttribute("href");
57
+
58
+ if (url.includes("issues?code=")) {
59
+ window.open(url, '_blank');
60
+ }
61
+ else {
62
+ if (!url.startsWith("#")) {
63
+ terminal.open({
64
+ url: decodeURIComponent(url),
65
+ method: "GET"
66
+ });
67
+ }
68
+ else {
69
+ const naptr = link.getAttribute("data-naptr");
70
+ console.log("naptr: " + naptr);
71
+ }
72
+ }
73
+ }
74
+ });
75
+ }
76
+
77
+ function _getDiscoveryTrace() {
78
+ const bubble = document.getElementById("bubble");
79
+ const svgEl = bubble.querySelector("svg");
80
+
81
+ if (!svgEl) return null;
82
+
83
+ const svgString = new XMLSerializer().serializeToString(svgEl);
84
+ const doc = new DOMParser().parseFromString(svgString, "image/svg+xml");
85
+
86
+ const meta = doc.getElementsByTagName("metadata")[0];
87
+ if (!meta) return null;
88
+
89
+ try {
90
+ return JSON.parse(meta.textContent);
91
+ } catch (e) {
92
+ console.error("Invalid metadata JSON", e);
93
+ return null;
94
+ }
95
+ }
96
+
97
+ function getDiscoveryTrace() {
98
+ const meta = document.querySelector("#bubble svg metadata");
99
+ return meta ? JSON.parse(meta.textContent) : null;
100
+ }
101
+
45
102
  document.addEventListener("DOMContentLoaded", () => {
46
103
  formatSvg();
47
104
  addDownloadLinkListener();
105
+
106
+ terminal = new Terminal({
107
+ title: "Terminal",
108
+ brand: "curl",
109
+ textColor: "#d6dde6",
110
+ terminalTextColor: "#33FF33",
111
+ });
112
+
113
+ addSvgClickListener();
114
+ discoveryTrace = getDiscoveryTrace();
48
115
  });
@@ -0,0 +1,69 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
3
+
4
+ <svg
5
+ width="800px"
6
+ height="800px"
7
+ viewBox="0 0 512 512"
8
+ version="1.1"
9
+ id="svg7"
10
+ sodipodi:docname="download-light.svg"
11
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
12
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
14
+ xmlns="http://www.w3.org/2000/svg"
15
+ xmlns:svg="http://www.w3.org/2000/svg"
16
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
17
+ xmlns:cc="http://creativecommons.org/ns#"
18
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
19
+ <sodipodi:namedview
20
+ id="namedview9"
21
+ pagecolor="#ffffff"
22
+ bordercolor="#000000"
23
+ borderopacity="0.25"
24
+ inkscape:showpageshadow="2"
25
+ inkscape:pageopacity="0.0"
26
+ inkscape:pagecheckerboard="0"
27
+ inkscape:deskcolor="#d1d1d1"
28
+ showgrid="false"
29
+ inkscape:zoom="1.28375"
30
+ inkscape:cx="366.1149"
31
+ inkscape:cy="400.77897"
32
+ inkscape:window-width="3440"
33
+ inkscape:window-height="1371"
34
+ inkscape:window-x="0"
35
+ inkscape:window-y="32"
36
+ inkscape:window-maximized="1"
37
+ inkscape:current-layer="svg7" />
38
+ <defs
39
+ id="defs11" />
40
+ <title
41
+ id="title2">download</title>
42
+ <g
43
+ id="Page-1"
44
+ stroke="none"
45
+ stroke-width="1"
46
+ fill="none"
47
+ fill-rule="evenodd"
48
+ transform="matrix(1.1025,0,0,1.1025,-26.239998,-2.7200004)">
49
+ <g
50
+ id="icon"
51
+ fill="#000000"
52
+ transform="translate(85.333333,42.666667)"
53
+ style="fill:#6b7280;fill-opacity:1">
54
+ <path
55
+ d="M 312.32,165.76 285.01333,132.90667 192,210.56 V 0 H 149.33333 V 210.56 L 56.32,132.90667 29.013333,165.76 170.66667,283.73333 Z M 0,341.33333 H 341.33333 V 384 H 0 Z"
56
+ id="Combined-Shape"
57
+ style="fill:#6b7280;fill-opacity:1" />
58
+ </g>
59
+ </g>
60
+ <metadata
61
+ id="metadata875">
62
+ <rdf:RDF>
63
+ <cc:Work
64
+ rdf:about="">
65
+ <dc:title>download</dc:title>
66
+ </cc:Work>
67
+ </rdf:RDF>
68
+ </metadata>
69
+ </svg>
@@ -0,0 +1,69 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
3
+
4
+ <svg
5
+ width="800px"
6
+ height="800px"
7
+ viewBox="0 0 512 512"
8
+ version="1.1"
9
+ id="svg7"
10
+ sodipodi:docname="open-external-light.svg"
11
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
12
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
14
+ xmlns="http://www.w3.org/2000/svg"
15
+ xmlns:svg="http://www.w3.org/2000/svg"
16
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
17
+ xmlns:cc="http://creativecommons.org/ns#"
18
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
19
+ <sodipodi:namedview
20
+ id="namedview566"
21
+ pagecolor="#ffffff"
22
+ bordercolor="#000000"
23
+ borderopacity="0.25"
24
+ inkscape:showpageshadow="2"
25
+ inkscape:pageopacity="0.0"
26
+ inkscape:pagecheckerboard="0"
27
+ inkscape:deskcolor="#d1d1d1"
28
+ showgrid="false"
29
+ inkscape:zoom="1.28375"
30
+ inkscape:cx="366.1149"
31
+ inkscape:cy="400.77897"
32
+ inkscape:window-width="3440"
33
+ inkscape:window-height="1371"
34
+ inkscape:window-x="0"
35
+ inkscape:window-y="32"
36
+ inkscape:window-maximized="1"
37
+ inkscape:current-layer="svg7" />
38
+ <defs
39
+ id="defs11" />
40
+ <title
41
+ id="title2">open-external</title>
42
+ <g
43
+ id="Page-1"
44
+ stroke="none"
45
+ stroke-width="1"
46
+ fill="none"
47
+ fill-rule="evenodd"
48
+ transform="matrix(1.061208,0,0,1.061208,-26.9888,-4.3496978)">
49
+ <g
50
+ id="icon"
51
+ fill="#000000"
52
+ transform="translate(85.333333,64)"
53
+ style="fill:#6b7280;fill-opacity:1">
54
+ <path
55
+ d="m 128,63.999444 v 42.666996 l -85.333333,2.3e-4 V 320 H 256 v -85.33356 h 42.666 l 6.7e-4,128.00023 H 0 V 64 Z M 362.66667,0 V 170.66667 H 320 V 72.835 L 143.08494,249.75161 112.91505,219.58172 289.83,42.666 192,42.666667 V 0 Z"
56
+ id="Combined-Shape"
57
+ style="fill:#6b7280;fill-opacity:1" />
58
+ </g>
59
+ </g>
60
+ <metadata
61
+ id="metadata1601">
62
+ <rdf:RDF>
63
+ <cc:Work
64
+ rdf:about="">
65
+ <dc:title>open-external</dc:title>
66
+ </cc:Work>
67
+ </rdf:RDF>
68
+ </metadata>
69
+ </svg>
@@ -0,0 +1,139 @@
1
+ .cm-overlay {
2
+ position: fixed; inset: 0;
3
+ background: rgba(0,0,0,.55);
4
+ display: flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ padding: 24px;
8
+ z-index: 2147483647;
9
+ }
10
+
11
+ .cm-overlay.hidden {
12
+ display: none;
13
+ }
14
+
15
+ .cm-dialog {
16
+ width: min(980px, 100%);
17
+ height: min(720px, 100%);
18
+ background: #0b0f14;
19
+ color: #d6dde6;
20
+ border: 1px solid rgba(255,255,255,.12);
21
+ border-radius: 12px;
22
+ box-shadow: 0 18px 60px rgba(0,0,0,.55);
23
+ display: flex;
24
+ flex-direction: column;
25
+ overflow: hidden;
26
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
27
+ }
28
+
29
+ .cm-display.hidden {
30
+ display: none;
31
+ }
32
+
33
+ .cm-head {
34
+ display: flex; align-items: center; gap: 12px;
35
+ padding: 10px 11px 10px 14px;
36
+ border-bottom: 1px solid rgba(255,255,255,.10);
37
+ background: rgba(255,255,255,.03);
38
+ }
39
+
40
+ .cm-title {
41
+ font-weight: 600;
42
+ font-size: 14px;
43
+ opacity: .95;
44
+ }
45
+
46
+ .cm-spacer { flex: 1; }
47
+
48
+ .cm-btn {
49
+ appearance: none;
50
+ border: 1px solid rgba(255,255,255,.18);
51
+ background: transparent;
52
+ color: inherit;
53
+ padding: 2px 6px 0 6px;
54
+ border-radius: 6px;
55
+ font-size: 12px;
56
+ cursor: pointer;
57
+ }
58
+
59
+ .cm-btn img {
60
+ width: 17px;
61
+ }
62
+
63
+ .cm-btn:hover {
64
+ border: 1px solid rgba(255,255,255,.38);
65
+ }
66
+
67
+ .cm-btn:disabled { opacity: .55; cursor: not-allowed; }
68
+ .cm-body {
69
+ flex: 1;
70
+ overflow: auto;
71
+ padding: 12px;
72
+ scrollbar-color: #323232 #0b0f14;
73
+ scrollbar-width: thin;
74
+ }
75
+
76
+ .cm-body::-webkit-scrollbar {
77
+ width: 10px;
78
+ }
79
+
80
+ .cm-body::-webkit-scrollbar-track {
81
+ background: #0b0f14;
82
+ }
83
+
84
+ .cm-body::-webkit-scrollbar-thumb {
85
+ background: #323232;
86
+ border-radius: 6px;
87
+ }
88
+
89
+ .cm-body::-webkit-scrollbar-thumb:hover {
90
+ background: #656565;
91
+ }
92
+
93
+ .cm-term {
94
+ white-space: pre-wrap;
95
+ word-break: break-word;
96
+ color: #33FF33;
97
+ line-height: 1.35;
98
+ font-size: 12px;
99
+ }
100
+
101
+ .cm-foot {
102
+ padding: 10px 12px;
103
+ border-top: 1px solid rgba(255,255,255,.10);
104
+ display: flex; align-items: center; gap: 10px;
105
+ background: rgba(255,255,255,.02);
106
+ }
107
+
108
+ .cm-status { font-size: 12px; opacity: .85; }
109
+
110
+ .cm-kbd {
111
+ font-size: 11px; opacity: .7;
112
+ border: 1px solid rgba(255,255,255,.16);
113
+ padding: 3px 6px 2px 6px;
114
+ border-radius: 6px;
115
+ }
116
+
117
+ .cm-input-row {
118
+ display: flex;
119
+ align-items: center;
120
+ gap: 8px;
121
+ padding: 8px 12px;
122
+ border-top: 1px solid rgba(255,255,255,.10);
123
+ background: rgba(255,255,255,.02);
124
+ }
125
+
126
+ .cm-prompt {
127
+ opacity: .8;
128
+ font-size: 12px;
129
+ }
130
+
131
+ .cm-input {
132
+ flex: 1;
133
+ background: transparent;
134
+ color: #33FF33;
135
+ border: none;
136
+ outline: none;
137
+ font-family: inherit;
138
+ font-size: 12px;
139
+ }
@@ -0,0 +1,146 @@
1
+ .cm-overlay {
2
+ position: fixed; inset: 0;
3
+ background: rgba(255,255,255,.55);
4
+ display: flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ padding: 24px;
8
+ z-index: 2147483647;
9
+ }
10
+
11
+ .cm-overlay.hidden {
12
+ display: none;
13
+ }
14
+
15
+ .cm-dialog {
16
+ width: min(980px, 100%);
17
+ height: min(720px, 100%);
18
+ background: #ffffff;
19
+ color: #111827;
20
+ border: 1px solid rgba(0,0,0,.12);
21
+ border-radius: 12px;
22
+ box-shadow: 0 18px 60px rgba(255,255,255,.55);
23
+ display: flex;
24
+ flex-direction: column;
25
+ overflow: hidden;
26
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
27
+ }
28
+
29
+ .cm-display.hidden {
30
+ display: none;
31
+ }
32
+
33
+ .cm-head {
34
+ display: flex; align-items: center; gap: 12px;
35
+ padding: 10px 11px 10px 14px;
36
+ border-bottom: 1px solid rgba(0,0,0,.10);
37
+ background: rgba(0,0,0,.03);
38
+ }
39
+
40
+ .cm-title {
41
+ font-weight: 600;
42
+ font-size: 14px;
43
+ opacity: .95;
44
+ }
45
+
46
+ .cm-spacer { flex: 1; }
47
+
48
+ .cm-btn {
49
+ appearance: none;
50
+ border: 1px solid rgba(0,0,0,.18);
51
+ background: #ffffff;
52
+ color: inherit;
53
+ padding: 2px 6px 0 6px;
54
+ border-radius: 6px;
55
+ font-size: 12px;
56
+ cursor: pointer;
57
+ }
58
+
59
+ .cm-btn img {
60
+ width: 17px;
61
+ }
62
+
63
+ .cm-btn:hover {
64
+ border: 1px solid rgba(0,0,0,.38);
65
+ }
66
+
67
+ .cm-btn:disabled {
68
+ opacity: .55;
69
+ cursor: not-allowed;
70
+ }
71
+
72
+ .cm-body {
73
+ flex: 1;
74
+ overflow: auto;
75
+ padding: 12px;
76
+ scrollbar-color: #d1d5db #ffffff;
77
+ scrollbar-width: thin;
78
+ }
79
+
80
+ .cm-body::-webkit-scrollbar {
81
+ width: 10px;
82
+ }
83
+
84
+ .cm-body::-webkit-scrollbar-track {
85
+ background: #ffffff;
86
+ }
87
+
88
+ .cm-body::-webkit-scrollbar-thumb {
89
+ background: #ffffff;
90
+ border-radius: 6px;
91
+ }
92
+
93
+ .cm-body::-webkit-scrollbar-thumb:hover {
94
+ background: #d1d5db;
95
+ }
96
+
97
+ .cm-term {
98
+ white-space: pre-wrap;
99
+ word-break: break-word;
100
+ color: #111827;
101
+ line-height: 1.35;
102
+ font-size: 12px;
103
+ }
104
+
105
+ .cm-foot {
106
+ padding: 10px 12px;
107
+ border-top: 1px solid rgba(0,0,0,.10);
108
+ display: flex; align-items: center; gap: 10px;
109
+ background: rgba(0,0,0,.02);
110
+ }
111
+
112
+ .cm-status {
113
+ font-size: 12px;
114
+ opacity: .85;
115
+ }
116
+
117
+ .cm-kbd {
118
+ font-size: 11px; opacity: .7;
119
+ border: 1px solid rgba(0,0,0,.16);
120
+ padding: 3px 6px 2px 6px;
121
+ border-radius: 6px;
122
+ }
123
+
124
+ .cm-input-row {
125
+ display: flex;
126
+ align-items: center;
127
+ gap: 8px;
128
+ padding: 8px 12px;
129
+ border-top: 1px solid rgba(0,0,0,.10);
130
+ background: rgba(0,0,0,.02);
131
+ }
132
+
133
+ .cm-prompt {
134
+ opacity: .8;
135
+ font-size: 12px;
136
+ }
137
+
138
+ .cm-input {
139
+ flex: 1;
140
+ background: transparent;
141
+ color: #111827;
142
+ border: none;
143
+ outline: none;
144
+ font-family: inherit;
145
+ font-size: 12px;
146
+ }