@coldsmirk/inkstone-redis 0.22.0
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 +49 -0
- package/dist/commands-BMa2ec02.js +4610 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +85 -0
- package/dist/markers-BlM8eKCj.js +250 -0
- package/dist/markers-gZmuOyuR.d.ts +244 -0
- package/dist/monaco.d.ts +42 -0
- package/dist/monaco.js +184 -0
- package/dist/react.d.ts +95 -0
- package/dist/react.js +104 -0
- package/package.json +77 -0
package/dist/monaco.js
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { t as REDIS_COMMANDS } from "./commands-BMa2ec02.js";
|
|
2
|
+
//#region src/monaco.ts
|
|
3
|
+
const REDIS_LANGUAGE_ID = "redis";
|
|
4
|
+
const LANGUAGES_KEY = Symbol.for("coldsmirk.inkstone.redis.languages");
|
|
5
|
+
function definedLanguages(monaco) {
|
|
6
|
+
const holder = globalThis;
|
|
7
|
+
const registry = holder[LANGUAGES_KEY] ?? /* @__PURE__ */ new WeakMap();
|
|
8
|
+
holder[LANGUAGES_KEY] = registry;
|
|
9
|
+
const existing = registry.get(monaco);
|
|
10
|
+
if (existing) return existing;
|
|
11
|
+
const created = /* @__PURE__ */ new Set();
|
|
12
|
+
registry.set(monaco, created);
|
|
13
|
+
return created;
|
|
14
|
+
}
|
|
15
|
+
function grammar(commands) {
|
|
16
|
+
const names = /* @__PURE__ */ new Set();
|
|
17
|
+
const tokens = /* @__PURE__ */ new Set();
|
|
18
|
+
for (const command of commands) {
|
|
19
|
+
const [container, sub] = command.name.split(" ");
|
|
20
|
+
names.add(container);
|
|
21
|
+
if (sub !== void 0) tokens.add(sub);
|
|
22
|
+
for (const token of command.tokens) tokens.add(token);
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
ignoreCase: true,
|
|
26
|
+
unicode: true,
|
|
27
|
+
commands: [...names],
|
|
28
|
+
tokens: [...tokens],
|
|
29
|
+
tokenizer: {
|
|
30
|
+
root: [
|
|
31
|
+
[/^(?<blank>\s*)(?<word>[^\s"']+)/u, ["white", { cases: {
|
|
32
|
+
"$2@commands": "support.function",
|
|
33
|
+
"@default": "variable"
|
|
34
|
+
} }]],
|
|
35
|
+
[/"/u, {
|
|
36
|
+
token: "string",
|
|
37
|
+
next: "@double"
|
|
38
|
+
}],
|
|
39
|
+
[/'/u, {
|
|
40
|
+
token: "string",
|
|
41
|
+
next: "@single"
|
|
42
|
+
}],
|
|
43
|
+
[/-?\d+(?:\.\d+)?(?=\s|$)/u, "constant.numeric"],
|
|
44
|
+
[/[^\s"']+/u, { cases: {
|
|
45
|
+
"@tokens": "keyword",
|
|
46
|
+
"@default": "variable"
|
|
47
|
+
} }],
|
|
48
|
+
[/\s+/u, "white"]
|
|
49
|
+
],
|
|
50
|
+
double: [
|
|
51
|
+
[/\\x[0-9a-fA-F]{2}/u, "constant.character.escape"],
|
|
52
|
+
[/\\./u, "constant.character.escape"],
|
|
53
|
+
[/"/u, {
|
|
54
|
+
token: "string",
|
|
55
|
+
next: "@pop"
|
|
56
|
+
}],
|
|
57
|
+
[/[^\\"]+/u, "string"],
|
|
58
|
+
[/\\/u, "string"]
|
|
59
|
+
],
|
|
60
|
+
single: [
|
|
61
|
+
[/\\'/u, "constant.character.escape"],
|
|
62
|
+
[/'/u, {
|
|
63
|
+
token: "string",
|
|
64
|
+
next: "@pop"
|
|
65
|
+
}],
|
|
66
|
+
[/[^\\']+/u, "string"],
|
|
67
|
+
[/\\/u, "string"]
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function defineRedisLanguage(monaco, languageId = REDIS_LANGUAGE_ID, commands = REDIS_COMMANDS) {
|
|
73
|
+
const defined = definedLanguages(monaco);
|
|
74
|
+
if (defined.has(languageId)) return;
|
|
75
|
+
defined.add(languageId);
|
|
76
|
+
monaco.languages.register({ id: languageId });
|
|
77
|
+
monaco.languages.setLanguageConfiguration(languageId, {
|
|
78
|
+
autoClosingPairs: [{
|
|
79
|
+
open: "\"",
|
|
80
|
+
close: "\""
|
|
81
|
+
}, {
|
|
82
|
+
open: "'",
|
|
83
|
+
close: "'"
|
|
84
|
+
}],
|
|
85
|
+
surroundingPairs: [{
|
|
86
|
+
open: "\"",
|
|
87
|
+
close: "\""
|
|
88
|
+
}, {
|
|
89
|
+
open: "'",
|
|
90
|
+
close: "'"
|
|
91
|
+
}],
|
|
92
|
+
wordPattern: /[^\s"']+/u
|
|
93
|
+
});
|
|
94
|
+
monaco.languages.setMonarchTokensProvider(languageId, grammar(commands));
|
|
95
|
+
}
|
|
96
|
+
function itemKinds(monaco) {
|
|
97
|
+
const kinds = monaco.languages.CompletionItemKind;
|
|
98
|
+
return {
|
|
99
|
+
command: kinds.Function,
|
|
100
|
+
subcommand: kinds.Method,
|
|
101
|
+
token: kinds.Keyword
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function registerRedisLanguage(monaco, modelPath, hooks, languageId = REDIS_LANGUAGE_ID) {
|
|
105
|
+
const kinds = itemKinds(monaco);
|
|
106
|
+
const path = monaco.Uri.parse(modelPath).toString();
|
|
107
|
+
const answering = (model) => model.uri.toString() === path ? hooks.assist() : null;
|
|
108
|
+
return [
|
|
109
|
+
monaco.languages.registerCompletionItemProvider(languageId, { provideCompletionItems: (model, position) => {
|
|
110
|
+
const assist = answering(model);
|
|
111
|
+
if (assist === null) return { suggestions: [] };
|
|
112
|
+
const candidates = assist.complete(model.getValue(), model.getOffsetAt(position));
|
|
113
|
+
const word = model.getWordUntilPosition(position);
|
|
114
|
+
const range = new monaco.Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn);
|
|
115
|
+
return { suggestions: candidates.map((candidate, index) => {
|
|
116
|
+
return {
|
|
117
|
+
label: candidate.label,
|
|
118
|
+
kind: kinds[candidate.kind],
|
|
119
|
+
insertText: candidate.insertText,
|
|
120
|
+
detail: candidate.detail,
|
|
121
|
+
documentation: candidate.documentation,
|
|
122
|
+
range,
|
|
123
|
+
sortText: `${String(candidate.sortGroup)}:${String(index).padStart(4, "0")}`
|
|
124
|
+
};
|
|
125
|
+
}) };
|
|
126
|
+
} }),
|
|
127
|
+
monaco.languages.registerHoverProvider(languageId, { provideHover: (model, position) => {
|
|
128
|
+
const assist = answering(model);
|
|
129
|
+
if (assist === null) return null;
|
|
130
|
+
const card = assist.hover(model.getValue(), model.getOffsetAt(position));
|
|
131
|
+
if (card === null) return null;
|
|
132
|
+
const from = model.getPositionAt(card.from);
|
|
133
|
+
const to = model.getPositionAt(card.to);
|
|
134
|
+
return {
|
|
135
|
+
range: new monaco.Range(from.lineNumber, from.column, to.lineNumber, to.column),
|
|
136
|
+
contents: card.markdown.map((value) => {
|
|
137
|
+
return { value };
|
|
138
|
+
})
|
|
139
|
+
};
|
|
140
|
+
} }),
|
|
141
|
+
monaco.languages.registerSignatureHelpProvider(languageId, {
|
|
142
|
+
signatureHelpTriggerCharacters: [" "],
|
|
143
|
+
signatureHelpRetriggerCharacters: [" "],
|
|
144
|
+
provideSignatureHelp: (model, position) => {
|
|
145
|
+
const assist = answering(model);
|
|
146
|
+
if (assist === null) return null;
|
|
147
|
+
const help = assist.signature(model.getValue(), model.getOffsetAt(position));
|
|
148
|
+
if (help === null) return null;
|
|
149
|
+
return {
|
|
150
|
+
value: {
|
|
151
|
+
signatures: [{
|
|
152
|
+
label: help.label,
|
|
153
|
+
documentation: help.documentation,
|
|
154
|
+
parameters: help.parameters.map((span) => {
|
|
155
|
+
return { label: span };
|
|
156
|
+
})
|
|
157
|
+
}],
|
|
158
|
+
activeSignature: 0,
|
|
159
|
+
activeParameter: help.active
|
|
160
|
+
},
|
|
161
|
+
dispose: () => void 0
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
})
|
|
165
|
+
];
|
|
166
|
+
}
|
|
167
|
+
const REDIS_MARKER_OWNER = "inkstone-redis";
|
|
168
|
+
function setRedisMarkers(monaco, model, markers, wording) {
|
|
169
|
+
const severities = monaco.MarkerSeverity;
|
|
170
|
+
monaco.editor.setModelMarkers(model, REDIS_MARKER_OWNER, markers.map((marker) => {
|
|
171
|
+
const from = model.getPositionAt(marker.from);
|
|
172
|
+
const to = model.getPositionAt(marker.to);
|
|
173
|
+
return {
|
|
174
|
+
severity: marker.severity === "error" ? severities.Error : marker.severity === "warning" ? severities.Warning : severities.Hint,
|
|
175
|
+
message: wording(marker),
|
|
176
|
+
startLineNumber: from.lineNumber,
|
|
177
|
+
startColumn: from.column,
|
|
178
|
+
endLineNumber: to.lineNumber,
|
|
179
|
+
endColumn: to.column
|
|
180
|
+
};
|
|
181
|
+
}));
|
|
182
|
+
}
|
|
183
|
+
//#endregion
|
|
184
|
+
export { REDIS_LANGUAGE_ID, REDIS_MARKER_OWNER, defineRedisLanguage, registerRedisLanguage, setRedisMarkers };
|
package/dist/react.d.ts
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { p as RedisAssist, t as RedisMarker } from "./markers-gZmuOyuR.js";
|
|
2
|
+
import { MonacoModule } from "./monaco.js";
|
|
3
|
+
import { ReactNode } from "react";
|
|
4
|
+
import { editor } from "monaco-editor";
|
|
5
|
+
//#region src/react.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* What a host reaches into the editor for: inserting at the caret — a key tree is an input
|
|
8
|
+
* device — and the focus.
|
|
9
|
+
*/
|
|
10
|
+
interface RedisEditorHandle {
|
|
11
|
+
insert: (text: string) => void;
|
|
12
|
+
focus: () => void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Where the operator is in the document, in offsets — what `runnableLine` reads to decide the
|
|
16
|
+
* line a run sends. `from` and `to` are the selection's bounds and equal where nothing is
|
|
17
|
+
* selected. It rides with the text because the two must belong to the same instant: the
|
|
18
|
+
* controlled `value` is one render behind the keystroke that triggered a run.
|
|
19
|
+
*/
|
|
20
|
+
interface RedisCaret {
|
|
21
|
+
text: string;
|
|
22
|
+
from: number;
|
|
23
|
+
to: number;
|
|
24
|
+
}
|
|
25
|
+
interface RedisEditorProps {
|
|
26
|
+
value: string;
|
|
27
|
+
onChange: (value: string) => void;
|
|
28
|
+
/**
|
|
29
|
+
* Render with the dark theme; the component never reads the OS `prefers-color-scheme`.
|
|
30
|
+
*
|
|
31
|
+
* @default false
|
|
32
|
+
*/
|
|
33
|
+
dark?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Editor height in px, or `"fill"` to consume the parent's resolved height (the parent must be
|
|
36
|
+
* a `min-height: 0` flex item).
|
|
37
|
+
*/
|
|
38
|
+
height?: number | "fill";
|
|
39
|
+
fontSize?: number;
|
|
40
|
+
/**
|
|
41
|
+
* UI locale for Monaco's chrome — page-global and locked by the first editor to mount.
|
|
42
|
+
*/
|
|
43
|
+
locale?: "en" | "zh-cn";
|
|
44
|
+
placeholder?: string;
|
|
45
|
+
/**
|
|
46
|
+
* The editor's accessible name, set on Monaco's own input surface.
|
|
47
|
+
*/
|
|
48
|
+
ariaLabel: string;
|
|
49
|
+
/**
|
|
50
|
+
* The Monaco language id the model registers under; the grammar is defined under it.
|
|
51
|
+
*
|
|
52
|
+
* @default "redis"
|
|
53
|
+
*/
|
|
54
|
+
languageId?: string;
|
|
55
|
+
loading?: ReactNode;
|
|
56
|
+
failure?: ReactNode;
|
|
57
|
+
/**
|
|
58
|
+
* Ctrl/Cmd-Enter — the run key, handed the editor's live caret; the host reads the line to
|
|
59
|
+
* send off it with `runnableLine`.
|
|
60
|
+
*/
|
|
61
|
+
onRun?: (caret: RedisCaret) => void;
|
|
62
|
+
/**
|
|
63
|
+
* The label the run action shows in Monaco's own chrome.
|
|
64
|
+
*
|
|
65
|
+
* @default "Run command"
|
|
66
|
+
*/
|
|
67
|
+
runActionLabel?: string;
|
|
68
|
+
/**
|
|
69
|
+
* The caret moved, or the text under it changed.
|
|
70
|
+
*/
|
|
71
|
+
onCaret?: (caret: RedisCaret) => void;
|
|
72
|
+
onReady?: (handle: RedisEditorHandle) => void;
|
|
73
|
+
/**
|
|
74
|
+
* Runs after this component's own mount wiring, with the live editor and the monaco module.
|
|
75
|
+
*/
|
|
76
|
+
onMount?: (instance: editor.IStandaloneCodeEditor, monaco: MonacoModule) => void;
|
|
77
|
+
/**
|
|
78
|
+
* What completion, hover and signature help answer from; none of the three without it.
|
|
79
|
+
*/
|
|
80
|
+
assist?: RedisAssist;
|
|
81
|
+
/**
|
|
82
|
+
* The words each line marker shows, per code (`lineMarkers`) — the host's language. No
|
|
83
|
+
* markers are drawn without it.
|
|
84
|
+
*/
|
|
85
|
+
markerWording?: (marker: RedisMarker) => string;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The command-line editing surface: Monaco under the `redis` grammar, one command a line, the
|
|
89
|
+
* run key handing the caret over, the table's completion, hover and signature help wired
|
|
90
|
+
* through `registerRedisLanguage`, and each line's markers refreshed on every change (they are
|
|
91
|
+
* one split per line, cheap enough to run synchronously).
|
|
92
|
+
*/
|
|
93
|
+
declare function RedisEditor({ value, onChange, dark, height, fontSize, locale, placeholder, ariaLabel, languageId, loading, failure, onRun, runActionLabel, onCaret, onReady, onMount, assist, markerWording }: RedisEditorProps): import("react").JSX.Element;
|
|
94
|
+
//#endregion
|
|
95
|
+
export { RedisCaret, RedisEditor, RedisEditorHandle, RedisEditorProps };
|
package/dist/react.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { t as lineMarkers } from "./markers-BlM8eKCj.js";
|
|
2
|
+
import { REDIS_LANGUAGE_ID, defineRedisLanguage, registerRedisLanguage, setRedisMarkers } from "./monaco.js";
|
|
3
|
+
import { MonacoEditor } from "@coldsmirk/inkstone-react/monaco";
|
|
4
|
+
import { useEffect, useInsertionEffect, useRef, useState } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
//#region src/react.tsx
|
|
7
|
+
const EDITOR_ID_KEY = Symbol.for("coldsmirk.inkstone.redis.editorId");
|
|
8
|
+
function nextEditorId() {
|
|
9
|
+
const holder = globalThis;
|
|
10
|
+
const id = holder[EDITOR_ID_KEY] ?? 0;
|
|
11
|
+
holder[EDITOR_ID_KEY] = id + 1;
|
|
12
|
+
return id;
|
|
13
|
+
}
|
|
14
|
+
function useLatest(value) {
|
|
15
|
+
const ref = useRef(value);
|
|
16
|
+
useInsertionEffect(() => {
|
|
17
|
+
ref.current = value;
|
|
18
|
+
});
|
|
19
|
+
return ref;
|
|
20
|
+
}
|
|
21
|
+
function caretOf(instance) {
|
|
22
|
+
const model = instance.getModel();
|
|
23
|
+
const selection = instance.getSelection();
|
|
24
|
+
if (model === null || selection === null) return {
|
|
25
|
+
text: "",
|
|
26
|
+
from: 0,
|
|
27
|
+
to: 0
|
|
28
|
+
};
|
|
29
|
+
return {
|
|
30
|
+
text: model.getValue(),
|
|
31
|
+
from: model.getOffsetAt(selection.getStartPosition()),
|
|
32
|
+
to: model.getOffsetAt(selection.getEndPosition())
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function RedisEditor({ value, onChange, dark = false, height = 200, fontSize, locale, placeholder, ariaLabel, languageId = REDIS_LANGUAGE_ID, loading, failure, onRun, runActionLabel = "Run command", onCaret, onReady, onMount, assist, markerWording }) {
|
|
36
|
+
const [modelPath] = useState(() => `file:///inkstone-redis/${String(nextEditorId())}.redis`);
|
|
37
|
+
const bindings = useRef([]);
|
|
38
|
+
const assistRef = useLatest(assist ?? null);
|
|
39
|
+
const runRef = useLatest(onRun);
|
|
40
|
+
const caretChangedRef = useLatest(onCaret);
|
|
41
|
+
const readyRef = useLatest(onReady);
|
|
42
|
+
const mountRef = useLatest(onMount);
|
|
43
|
+
const wordingRef = useLatest(markerWording);
|
|
44
|
+
useEffect(() => () => {
|
|
45
|
+
for (const binding of bindings.current) binding.dispose();
|
|
46
|
+
bindings.current = [];
|
|
47
|
+
}, []);
|
|
48
|
+
const fill = height === "fill";
|
|
49
|
+
return /* @__PURE__ */ jsx("div", {
|
|
50
|
+
style: fill ? {
|
|
51
|
+
height: "100%",
|
|
52
|
+
minHeight: 0
|
|
53
|
+
} : { height },
|
|
54
|
+
children: /* @__PURE__ */ jsx(MonacoEditor, {
|
|
55
|
+
showLineNumbers: true,
|
|
56
|
+
dark,
|
|
57
|
+
failure,
|
|
58
|
+
fontSize,
|
|
59
|
+
height: fill ? "100%" : height,
|
|
60
|
+
language: languageId,
|
|
61
|
+
loading,
|
|
62
|
+
locale,
|
|
63
|
+
options: { ariaLabel },
|
|
64
|
+
path: modelPath,
|
|
65
|
+
placeholder,
|
|
66
|
+
value,
|
|
67
|
+
beforeMount: (monaco) => {
|
|
68
|
+
defineRedisLanguage(monaco, languageId);
|
|
69
|
+
},
|
|
70
|
+
onChange,
|
|
71
|
+
onMount: (live, monaco) => {
|
|
72
|
+
const mark = () => {
|
|
73
|
+
const model = live.getModel();
|
|
74
|
+
const wording = wordingRef.current;
|
|
75
|
+
if (model !== null && wording !== void 0) setRedisMarkers(monaco, model, lineMarkers(model.getValue()), wording);
|
|
76
|
+
};
|
|
77
|
+
bindings.current.push(live.onDidChangeCursorSelection(() => caretChangedRef.current?.(caretOf(live))), live.onDidChangeModelContent(mark), live.addAction({
|
|
78
|
+
id: "inkstone-redis.run",
|
|
79
|
+
label: runActionLabel,
|
|
80
|
+
keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter],
|
|
81
|
+
run: (current) => runRef.current?.(caretOf(current))
|
|
82
|
+
}), ...registerRedisLanguage(monaco, modelPath, { assist: () => assistRef.current }, languageId));
|
|
83
|
+
mark();
|
|
84
|
+
readyRef.current?.({
|
|
85
|
+
insert: (text) => {
|
|
86
|
+
const selection = live.getSelection();
|
|
87
|
+
if (selection) live.executeEdits("inkstone-redis-insert", [{
|
|
88
|
+
range: selection,
|
|
89
|
+
text,
|
|
90
|
+
forceMoveMarkers: true
|
|
91
|
+
}]);
|
|
92
|
+
live.focus();
|
|
93
|
+
},
|
|
94
|
+
focus: () => {
|
|
95
|
+
live.focus();
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
mountRef.current?.(live, monaco);
|
|
99
|
+
}
|
|
100
|
+
})
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
//#endregion
|
|
104
|
+
export { RedisEditor };
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@coldsmirk/inkstone-redis",
|
|
3
|
+
"version": "0.22.0",
|
|
4
|
+
"description": "Redis command-line editing intelligence for Monaco: the command table of Redis 7.2 (names, syntax, arity), redis-cli's own line splitting, completion / hover / signature help, line markers, and a drop-in React command editor.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"redis",
|
|
7
|
+
"monaco",
|
|
8
|
+
"completion",
|
|
9
|
+
"editor",
|
|
10
|
+
"autocomplete"
|
|
11
|
+
],
|
|
12
|
+
"homepage": "https://github.com/coldsmirk/inkstone/tree/main/packages/redis#readme",
|
|
13
|
+
"bugs": "https://github.com/coldsmirk/inkstone/issues",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/coldsmirk/inkstone.git",
|
|
17
|
+
"directory": "packages/redis"
|
|
18
|
+
},
|
|
19
|
+
"license": "UNLICENSED",
|
|
20
|
+
"author": {
|
|
21
|
+
"name": "Venus"
|
|
22
|
+
},
|
|
23
|
+
"sideEffects": false,
|
|
24
|
+
"type": "module",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"default": "./dist/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./monaco": {
|
|
31
|
+
"types": "./dist/monaco.d.ts",
|
|
32
|
+
"default": "./dist/monaco.js"
|
|
33
|
+
},
|
|
34
|
+
"./react": {
|
|
35
|
+
"types": "./dist/react.d.ts",
|
|
36
|
+
"default": "./dist/react.js"
|
|
37
|
+
},
|
|
38
|
+
"./package.json": "./package.json"
|
|
39
|
+
},
|
|
40
|
+
"types": "./dist/index.d.ts",
|
|
41
|
+
"files": [
|
|
42
|
+
"dist"
|
|
43
|
+
],
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"monaco-editor": "^0.56.0",
|
|
46
|
+
"react": "^19.2.8",
|
|
47
|
+
"react-dom": "^19.2.8",
|
|
48
|
+
"@coldsmirk/inkstone-react": "^0.22.0"
|
|
49
|
+
},
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"monaco-editor": "^0.56.0",
|
|
52
|
+
"react": ">=19",
|
|
53
|
+
"@coldsmirk/inkstone-react": "^0.22.0"
|
|
54
|
+
},
|
|
55
|
+
"peerDependenciesMeta": {
|
|
56
|
+
"@coldsmirk/inkstone-react": {
|
|
57
|
+
"optional": true
|
|
58
|
+
},
|
|
59
|
+
"monaco-editor": {
|
|
60
|
+
"optional": true
|
|
61
|
+
},
|
|
62
|
+
"react": {
|
|
63
|
+
"optional": true
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"engines": {
|
|
67
|
+
"node": ">=24"
|
|
68
|
+
},
|
|
69
|
+
"publishConfig": {
|
|
70
|
+
"access": "public"
|
|
71
|
+
},
|
|
72
|
+
"scripts": {
|
|
73
|
+
"build": "tsdown",
|
|
74
|
+
"clean": "rimraf dist",
|
|
75
|
+
"typecheck": "tsc --noEmit"
|
|
76
|
+
}
|
|
77
|
+
}
|