@woosau/dsh-custom-env 0.1.6 → 0.1.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.
- package/README.md +28 -9
- package/README.zh-CN.md +28 -9
- package/lib/client.js +980 -289
- package/lib/index.js +288 -11
- package/lib/typert.host.js +407 -465
- package/lib/typert.remote-client.d.ts +2 -1
- package/lib/typert.remote-client.js +371 -373
- package/lib/types/client/EnvSettingsSection.d.ts +7 -3
- package/lib/types/client/env-row-select.d.ts +36 -0
- package/lib/types/client/locales.d.ts +22 -2
- package/lib/types/client/parse-env-paste.d.ts +21 -0
- package/lib/types/group-ids.d.ts +5 -0
- package/lib/types/groups-store.d.ts +73 -0
- package/lib/types/index.d.ts +40 -6
- package/lib/types/types.d.ts +22 -0
- package/package.json +1 -1
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
/** Settings section: `$DSH_HOME/.env` editor + global `dsh` path. */
|
|
2
2
|
import type { InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
3
|
-
import type { CliStatus, EnvSnapshot } from '../types.ts';
|
|
3
|
+
import type { CliStatus, EnvGroup, EnvSnapshot } from '../types.ts';
|
|
4
4
|
import type { EnvSettingsKey } from './locales.ts';
|
|
5
5
|
export interface EnvSettingsInjected {
|
|
6
6
|
readonly load: () => Promise<EnvSnapshot>;
|
|
7
7
|
/** Create (`id === ""`) or update/rename one row by stable id. */
|
|
8
|
-
readonly upsert: (id: string, name: string, value: string) => Promise<EnvSnapshot>;
|
|
8
|
+
readonly upsert: (id: string, name: string, value: string, groupId?: string) => Promise<EnvSnapshot>;
|
|
9
9
|
readonly remove: (id: string) => Promise<EnvSnapshot>;
|
|
10
10
|
readonly restore: (id: string) => Promise<EnvSnapshot>;
|
|
11
|
+
readonly moveEntry: (id: string, groupId: string) => Promise<EnvSnapshot>;
|
|
12
|
+
readonly createGroup: (title: string) => Promise<EnvGroup>;
|
|
13
|
+
readonly renameGroup: (id: string, title: string) => Promise<EnvGroup>;
|
|
14
|
+
readonly deleteGroup: (id: string, moveToDefault: boolean) => Promise<EnvSnapshot>;
|
|
11
15
|
readonly cliStatus: () => Promise<CliStatus>;
|
|
12
16
|
readonly cliInstall: () => Promise<CliStatus>;
|
|
13
17
|
}
|
|
@@ -16,5 +20,5 @@ export type EnvSettingsSectionProps = PropsRuntime<'settings.section'> & PropsLo
|
|
|
16
20
|
* Render the environment settings page.
|
|
17
21
|
* @param props - locale `t` and Host remote callbacks.
|
|
18
22
|
*/
|
|
19
|
-
export declare function EnvSettingsSection({ t, load, upsert, remove, restore, cliStatus, cliInstall, }: EnvSettingsSectionProps): any;
|
|
23
|
+
export declare function EnvSettingsSection({ t, load, upsert, remove, restore, moveEntry, createGroup, renameGroup, deleteGroup, cliStatus, cliInstall, }: EnvSettingsSectionProps): any;
|
|
20
24
|
export type { EnvSettingsKey };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Pure helpers for Environment row multi-select and KEY=VALUE copy. */
|
|
2
|
+
/** Ctrl (Windows/Linux) or Meta (macOS) — required for click-to-toggle selection. */
|
|
3
|
+
export declare function isSelectionEditKey(event: {
|
|
4
|
+
ctrlKey: boolean;
|
|
5
|
+
metaKey: boolean;
|
|
6
|
+
}): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Inclusive id span between two anchors in list order.
|
|
9
|
+
* @param ordered - Selectable row ids in display order.
|
|
10
|
+
* @param from - Range start id.
|
|
11
|
+
* @param to - Range end id.
|
|
12
|
+
* @returns Ordered ids from the earlier index through the later; empty if either id is missing.
|
|
13
|
+
*/
|
|
14
|
+
export declare function rangeIds(ordered: readonly string[], from: string, to: string): string[];
|
|
15
|
+
/** Drop the browser text selection (not row selection). */
|
|
16
|
+
export declare function clearDomTextSelection(): void;
|
|
17
|
+
/** True when the focused input/textarea has a non-empty character range. */
|
|
18
|
+
export declare function hasFocusedInputTextSelection(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Build clipboard text for selected rows in list order.
|
|
21
|
+
* @param selectedIds - Selected row ids.
|
|
22
|
+
* @param orderedIds - Display order (saved then pending).
|
|
23
|
+
* @param drafts - Current name/value drafts by id.
|
|
24
|
+
* @returns `NAME=VALUE` lines, or empty when nothing usable.
|
|
25
|
+
*/
|
|
26
|
+
export declare function selectedEnvCopyText(selectedIds: ReadonlySet<string>, orderedIds: readonly string[], drafts: Readonly<Record<string, {
|
|
27
|
+
name: string;
|
|
28
|
+
value: string;
|
|
29
|
+
}>>): string;
|
|
30
|
+
/**
|
|
31
|
+
* Resolve the env row under a client point, if any.
|
|
32
|
+
* @param clientX - Viewport X.
|
|
33
|
+
* @param clientY - Viewport Y.
|
|
34
|
+
* @returns `data-env-row` id, or undefined.
|
|
35
|
+
*/
|
|
36
|
+
export declare function rowIdFromPoint(clientX: number, clientY: number): string | undefined;
|
|
@@ -5,7 +5,6 @@ export declare const NS: "settings.env";
|
|
|
5
5
|
export declare const zh: {
|
|
6
6
|
'panel.nav': string;
|
|
7
7
|
'panel.title': string;
|
|
8
|
-
'panel.empty': string;
|
|
9
8
|
'panel.loading': string;
|
|
10
9
|
'field.name': string;
|
|
11
10
|
'field.value': string;
|
|
@@ -19,6 +18,16 @@ export declare const zh: {
|
|
|
19
18
|
'action.removeConfirm': string;
|
|
20
19
|
'action.restore': string;
|
|
21
20
|
'action.close': string;
|
|
21
|
+
'action.moveGroup': string;
|
|
22
|
+
'action.createGroup': string;
|
|
23
|
+
'action.renameGroup': string;
|
|
24
|
+
'action.deleteGroup': string;
|
|
25
|
+
'action.deleteGroupTitle': string;
|
|
26
|
+
'action.deleteGroupConfirm': string;
|
|
27
|
+
'action.deleteGroupMove': string;
|
|
28
|
+
'action.groupTitle': string;
|
|
29
|
+
'action.groupTitlePlaceholder': string;
|
|
30
|
+
'group.defaultTitle': string;
|
|
22
31
|
'status.restartRequired': string;
|
|
23
32
|
'cli.title': string;
|
|
24
33
|
'cli.activeMissing': string;
|
|
@@ -27,6 +36,7 @@ export declare const zh: {
|
|
|
27
36
|
'error.generic': string;
|
|
28
37
|
'error.invalidName': string;
|
|
29
38
|
'error.invalidValue': string;
|
|
39
|
+
'error.invalidGroup': string;
|
|
30
40
|
'error.restoreFailed': string;
|
|
31
41
|
'error.cliInstall': string;
|
|
32
42
|
'error.cliUnresolved': string;
|
|
@@ -38,7 +48,6 @@ export type EnvSettingsKey = keyof typeof zh;
|
|
|
38
48
|
export declare const en: {
|
|
39
49
|
'panel.nav': string;
|
|
40
50
|
'panel.title': string;
|
|
41
|
-
'panel.empty': string;
|
|
42
51
|
'panel.loading': string;
|
|
43
52
|
'field.name': string;
|
|
44
53
|
'field.value': string;
|
|
@@ -52,6 +61,16 @@ export declare const en: {
|
|
|
52
61
|
'action.removeConfirm': string;
|
|
53
62
|
'action.restore': string;
|
|
54
63
|
'action.close': string;
|
|
64
|
+
'action.moveGroup': string;
|
|
65
|
+
'action.createGroup': string;
|
|
66
|
+
'action.renameGroup': string;
|
|
67
|
+
'action.deleteGroup': string;
|
|
68
|
+
'action.deleteGroupTitle': string;
|
|
69
|
+
'action.deleteGroupConfirm': string;
|
|
70
|
+
'action.deleteGroupMove': string;
|
|
71
|
+
'action.groupTitle': string;
|
|
72
|
+
'action.groupTitlePlaceholder': string;
|
|
73
|
+
'group.defaultTitle': string;
|
|
55
74
|
'status.restartRequired': string;
|
|
56
75
|
'cli.title': string;
|
|
57
76
|
'cli.activeMissing': string;
|
|
@@ -60,6 +79,7 @@ export declare const en: {
|
|
|
60
79
|
'error.generic': string;
|
|
61
80
|
'error.invalidName': string;
|
|
62
81
|
'error.invalidValue': string;
|
|
82
|
+
'error.invalidGroup': string;
|
|
63
83
|
'error.restoreFailed': string;
|
|
64
84
|
'error.cliInstall': string;
|
|
65
85
|
'error.cliUnresolved': string;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Parse clipboard text into environment name/value pairs for Settings paste. */
|
|
2
|
+
/** One parsed assignment from a paste. */
|
|
3
|
+
export interface ParsedEnvPair {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly value: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Parse multiline `NAME=VALUE` paste text into pairs.
|
|
9
|
+
* Trims lines and spaces around `=`; splits on the first `=`; skips blanks and invalid names.
|
|
10
|
+
* Duplicate names in one paste keep the last value.
|
|
11
|
+
* @param text - Clipboard text.
|
|
12
|
+
* @returns Ordered unique pairs (last duplicate wins).
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseEnvPaste(text: string): ParsedEnvPair[];
|
|
15
|
+
/**
|
|
16
|
+
* Format pairs for clipboard copy (one `NAME=VALUE` per line).
|
|
17
|
+
* Skips empty names. Does not trim values beyond what the caller provides.
|
|
18
|
+
* @param pairs - Ordered name/value pairs.
|
|
19
|
+
* @returns Clipboard text; empty string when no usable pairs.
|
|
20
|
+
*/
|
|
21
|
+
export declare function formatEnvCopy(pairs: readonly ParsedEnvPair[]): string;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Shared group id constants (safe for Host and Client bundles). */
|
|
2
|
+
/** Stable id of the built-in default group. */
|
|
3
|
+
export declare const DEFAULT_GROUP_ID = "default";
|
|
4
|
+
/** Fixed title stored for the default group (UI may localize on display). */
|
|
5
|
+
export declare const DEFAULT_GROUP_TITLE = "\u9ED8\u8BA4\u5206\u7EC4";
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/** Sidecar JSON for environment variable groups (UI / plugin metadata only). */
|
|
2
|
+
import type { EnvGroup } from './types.ts';
|
|
3
|
+
export { DEFAULT_GROUP_ID, DEFAULT_GROUP_TITLE } from './group-ids.ts';
|
|
4
|
+
/** On-disk groups document. */
|
|
5
|
+
export interface GroupsFile {
|
|
6
|
+
readonly version: 1;
|
|
7
|
+
readonly groups: readonly EnvGroup[];
|
|
8
|
+
/** entryId → groupId */
|
|
9
|
+
readonly membership: Readonly<Record<string, string>>;
|
|
10
|
+
}
|
|
11
|
+
/** Absolute path of `$DSH_HOME/.dsh-custom-env-groups.json`. */
|
|
12
|
+
export declare function groupsFilePath(): string;
|
|
13
|
+
/**
|
|
14
|
+
* Normalize arbitrary JSON into a valid groups file (always includes default).
|
|
15
|
+
* @param raw - Parsed JSON or undefined.
|
|
16
|
+
*/
|
|
17
|
+
export declare function normalizeGroupsFile(raw: unknown): GroupsFile;
|
|
18
|
+
/** Read and normalize the groups sidecar (missing file → default only). */
|
|
19
|
+
export declare function readGroupsFile(): GroupsFile;
|
|
20
|
+
/** Persist a groups file under `$DSH_HOME`. */
|
|
21
|
+
export declare function writeGroupsFile(file: GroupsFile): void;
|
|
22
|
+
/**
|
|
23
|
+
* Drop membership keys that no longer exist as live row ids.
|
|
24
|
+
* @param file - Current groups file.
|
|
25
|
+
* @param liveIds - Row ids still present.
|
|
26
|
+
*/
|
|
27
|
+
export declare function pruneMembership(file: GroupsFile, liveIds: ReadonlySet<string>): GroupsFile;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve the group for a row id (missing → default).
|
|
30
|
+
* @param file - Groups file.
|
|
31
|
+
* @param entryId - Stable row id.
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveGroupId(file: GroupsFile, entryId: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Assign a row to a group.
|
|
36
|
+
* @param file - Groups file.
|
|
37
|
+
* @param entryId - Row id.
|
|
38
|
+
* @param groupId - Target group (must exist, or default).
|
|
39
|
+
*/
|
|
40
|
+
export declare function setMembership(file: GroupsFile, entryId: string, groupId: string): GroupsFile;
|
|
41
|
+
/** Remove one row from membership. */
|
|
42
|
+
export declare function clearMembership(file: GroupsFile, entryId: string): GroupsFile;
|
|
43
|
+
/** Remove many rows from membership. */
|
|
44
|
+
export declare function clearMembershipMany(file: GroupsFile, entryIds: readonly string[]): GroupsFile;
|
|
45
|
+
/**
|
|
46
|
+
* Append a custom group.
|
|
47
|
+
* @param file - Groups file.
|
|
48
|
+
* @param title - Non-empty display title.
|
|
49
|
+
*/
|
|
50
|
+
export declare function createGroup(file: GroupsFile, title: string): {
|
|
51
|
+
readonly file: GroupsFile;
|
|
52
|
+
readonly group: EnvGroup;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Rename a custom group (not default).
|
|
56
|
+
* @param file - Groups file.
|
|
57
|
+
* @param id - Group id.
|
|
58
|
+
* @param title - New title.
|
|
59
|
+
*/
|
|
60
|
+
export declare function renameGroup(file: GroupsFile, id: string, title: string): GroupsFile;
|
|
61
|
+
/**
|
|
62
|
+
* Delete a custom group and either move or drop its membership keys.
|
|
63
|
+
* Does not delete `.env` values — caller handles variable deletion when needed.
|
|
64
|
+
* @param file - Groups file.
|
|
65
|
+
* @param id - Group id to remove.
|
|
66
|
+
* @param moveToDefault - When true, reassign members to default; else clear membership.
|
|
67
|
+
*/
|
|
68
|
+
export declare function deleteGroupMeta(file: GroupsFile, id: string, moveToDefault: boolean): {
|
|
69
|
+
readonly file: GroupsFile;
|
|
70
|
+
readonly memberIds: readonly string[];
|
|
71
|
+
};
|
|
72
|
+
/** Whether `groupId` exists in the file (including default). */
|
|
73
|
+
export declare function hasGroup(file: GroupsFile, groupId: string): boolean;
|
package/lib/types/index.d.ts
CHANGED
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
import type { Context } from '@deepseek-ai/cordis';
|
|
5
5
|
import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
|
|
6
6
|
import { envFilePath } from './env-file.ts';
|
|
7
|
-
import { type CliStatus, type EnvSnapshot, type EnvVarWrite } from './types.ts';
|
|
8
|
-
export type { BaselineRow, CliStatus, EnvEntry, EnvSnapshot, EnvVarWrite } from './types.ts';
|
|
7
|
+
import { type CliStatus, type DeleteGroupOptions, type EnvGroup, type EnvSnapshot, type EnvVarWrite } from './types.ts';
|
|
8
|
+
export type { BaselineRow, CliStatus, DeleteGroupOptions, EnvEntry, EnvGroup, EnvSnapshot, EnvVarWrite, } from './types.ts';
|
|
9
9
|
export { classifyEntry } from './types.ts';
|
|
10
|
+
export { DEFAULT_GROUP_ID, DEFAULT_GROUP_TITLE } from './group-ids.ts';
|
|
10
11
|
declare module '@deepseek-ai/cordis' {
|
|
11
12
|
interface Context {
|
|
12
13
|
customEnv: CustomEnvController;
|
|
@@ -20,6 +21,9 @@ declare module '@deepseek-ai/dsh-typert-protocol' {
|
|
|
20
21
|
'custom-env/invalid-value': {
|
|
21
22
|
readonly name: string;
|
|
22
23
|
};
|
|
24
|
+
'custom-env/invalid-group': {
|
|
25
|
+
readonly group: string;
|
|
26
|
+
};
|
|
23
27
|
'custom-env/cli-install-failed': {
|
|
24
28
|
readonly code: string;
|
|
25
29
|
};
|
|
@@ -39,34 +43,41 @@ export default class CustomEnvController extends TypertRemoteService {
|
|
|
39
43
|
private bind;
|
|
40
44
|
private unbind;
|
|
41
45
|
private requireName;
|
|
46
|
+
private loadGroups;
|
|
47
|
+
private saveGroups;
|
|
48
|
+
private requireGroup;
|
|
42
49
|
/**
|
|
43
50
|
* Write `name=value` replacing `from` in place; sync process.env / OS.
|
|
44
51
|
* Empty values create missing keys only, unless `forceEmpty` (restore).
|
|
45
52
|
*/
|
|
46
53
|
private commit;
|
|
47
|
-
/** @returns path, existence, and file-ordered entries. */
|
|
54
|
+
/** @returns path, existence, groups, and file-ordered entries. */
|
|
48
55
|
list(): Promise<EnvSnapshot>;
|
|
49
56
|
/**
|
|
50
57
|
* Create or update one row. Empty `id` creates; otherwise keeps that baseline id across renames.
|
|
51
58
|
* @param id - row id, or `""` for a new row.
|
|
52
59
|
* @param name - variable name.
|
|
53
60
|
* @param value - value (empty creates only when missing; Settings UI may still reject empty drafts).
|
|
61
|
+
* @param groupId - required for create semantics (`id === ""`, defaults to `default`);
|
|
62
|
+
* on update, omit to keep membership, or pass to reassign (same as `moveEntry`).
|
|
54
63
|
*/
|
|
55
|
-
upsert(id: string, name: string, value: string): Promise<EnvSnapshot>;
|
|
64
|
+
upsert(id: string, name: string, value: string, groupId?: string): Promise<EnvSnapshot>;
|
|
56
65
|
/**
|
|
57
66
|
* Create or replace many variables by name (plugin-facing).
|
|
58
67
|
* Non-empty values always write; empty values create missing keys only and do not
|
|
59
68
|
* clear existing `$DSH_HOME/.env` or OS user values. One file rewrite; last
|
|
60
69
|
* duplicate name wins. Invalid names reject the whole batch.
|
|
61
|
-
* @param entries - name/value pairs.
|
|
70
|
+
* @param entries - name/value pairs; optional `group` assigns membership when set.
|
|
71
|
+
* Omitted `group`: new names → `default`; existing names keep their group.
|
|
62
72
|
*/
|
|
63
73
|
setVars(entries: readonly EnvVarWrite[]): Promise<void>;
|
|
64
74
|
/**
|
|
65
75
|
* Create or replace one variable by name (plugin-facing).
|
|
66
76
|
* @param name - writable variable name.
|
|
67
77
|
* @param value - non-empty always stores; `""` writes `NAME=` only when the key is absent.
|
|
78
|
+
* @param group - optional group id; when omitted, new names use `default` and existing keep theirs.
|
|
68
79
|
*/
|
|
69
|
-
setVar(name: string, value: string): Promise<void>;
|
|
80
|
+
setVar(name: string, value: string, group?: string): Promise<void>;
|
|
70
81
|
/**
|
|
71
82
|
* Remove many variables by name (plugin-facing).
|
|
72
83
|
* @param names - writable variable names.
|
|
@@ -83,6 +94,29 @@ export default class CustomEnvController extends TypertRemoteService {
|
|
|
83
94
|
deleteEntry(id: string): Promise<EnvSnapshot>;
|
|
84
95
|
/** Restore Host-start original name+value, or delete if added after start. */
|
|
85
96
|
restore(id: string): Promise<EnvSnapshot>;
|
|
97
|
+
/**
|
|
98
|
+
* Create a custom group.
|
|
99
|
+
* @param title - Non-empty display title.
|
|
100
|
+
*/
|
|
101
|
+
createGroup(title: string): Promise<EnvGroup>;
|
|
102
|
+
/**
|
|
103
|
+
* Rename a custom group (not the default group).
|
|
104
|
+
* @param id - Group id.
|
|
105
|
+
* @param title - New title.
|
|
106
|
+
*/
|
|
107
|
+
renameGroup(id: string, title: string): Promise<EnvGroup>;
|
|
108
|
+
/**
|
|
109
|
+
* Delete a custom group.
|
|
110
|
+
* @param id - Group id (not `default`).
|
|
111
|
+
* @param options - When `moveToDefault` is false, member variables are removed from `.env`.
|
|
112
|
+
*/
|
|
113
|
+
deleteGroup(id: string, options: DeleteGroupOptions): Promise<EnvSnapshot>;
|
|
114
|
+
/**
|
|
115
|
+
* Move one row into another group.
|
|
116
|
+
* @param id - Row id.
|
|
117
|
+
* @param groupId - Target group id.
|
|
118
|
+
*/
|
|
119
|
+
moveEntry(id: string, groupId: string): Promise<EnvSnapshot>;
|
|
86
120
|
cliStatus(): Promise<CliStatus>;
|
|
87
121
|
cliInstall(): Promise<CliStatus>;
|
|
88
122
|
}
|
package/lib/types/types.d.ts
CHANGED
|
@@ -5,12 +5,19 @@ export interface BaselineRow {
|
|
|
5
5
|
readonly name: string;
|
|
6
6
|
readonly value: string;
|
|
7
7
|
}
|
|
8
|
+
/** One settings grouping for environment rows (UI / plugin metadata only). */
|
|
9
|
+
export interface EnvGroup {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly title: string;
|
|
12
|
+
}
|
|
8
13
|
/** One editable environment variable row. */
|
|
9
14
|
export interface EnvEntry {
|
|
10
15
|
/** Stable row id; survives renames. */
|
|
11
16
|
readonly id: string;
|
|
12
17
|
readonly name: string;
|
|
13
18
|
readonly value: string;
|
|
19
|
+
/** Group id from the groups sidecar; defaults to `default`. */
|
|
20
|
+
readonly groupId: string;
|
|
14
21
|
readonly kind: EnvEntryKind;
|
|
15
22
|
/** Host-start original value when `kind === 'modified'`; otherwise `null`. */
|
|
16
23
|
readonly previous: string | null;
|
|
@@ -19,12 +26,27 @@ export interface EnvEntry {
|
|
|
19
26
|
export interface EnvSnapshot {
|
|
20
27
|
readonly path: string;
|
|
21
28
|
readonly exists: boolean;
|
|
29
|
+
readonly groups: readonly EnvGroup[];
|
|
22
30
|
readonly entries: readonly EnvEntry[];
|
|
23
31
|
}
|
|
24
32
|
/** One name/value pair for plugin-facing `setVar` / `setVars`. */
|
|
25
33
|
export interface EnvVarWrite {
|
|
26
34
|
readonly name: string;
|
|
27
35
|
readonly value: string;
|
|
36
|
+
/**
|
|
37
|
+
* Target group id.
|
|
38
|
+
* When set, membership is assigned to that group.
|
|
39
|
+
* When omitted, new names use `default` and existing names keep their group.
|
|
40
|
+
*/
|
|
41
|
+
readonly group?: string;
|
|
42
|
+
}
|
|
43
|
+
/** Options for `customEnv/deleteGroup`. */
|
|
44
|
+
export interface DeleteGroupOptions {
|
|
45
|
+
/**
|
|
46
|
+
* When true, move member rows into the default group.
|
|
47
|
+
* When false, delete those variables from `.env` as well.
|
|
48
|
+
*/
|
|
49
|
+
readonly moveToDefault: boolean;
|
|
28
50
|
}
|
|
29
51
|
/** Snapshot returned by `customEnv/cliStatus` and `cliInstall`. */
|
|
30
52
|
export interface CliStatus {
|