@dx-pkg/mksymlink 1.0.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 +176 -0
- package/examples/advanced-usage.d.ts +2 -0
- package/examples/advanced-usage.d.ts.map +1 -0
- package/examples/advanced-usage.js +39 -0
- package/examples/advanced-usage.js.map +1 -0
- package/examples/basic-usage.d.ts +2 -0
- package/examples/basic-usage.d.ts.map +1 -0
- package/examples/basic-usage.js +15 -0
- package/examples/basic-usage.js.map +1 -0
- package/examples/config-usage.d.ts +3 -0
- package/examples/config-usage.d.ts.map +1 -0
- package/examples/config-usage.js +65 -0
- package/examples/config-usage.js.map +1 -0
- package/examples/cross-platform.d.ts +2 -0
- package/examples/cross-platform.d.ts.map +1 -0
- package/examples/cross-platform.js +41 -0
- package/examples/cross-platform.js.map +1 -0
- package/examples/index.d.ts +2 -0
- package/examples/index.d.ts.map +1 -0
- package/examples/index.js +7 -0
- package/examples/index.js.map +1 -0
- package/package.json +51 -0
- package/src/commands/config/config.command-factory.d.ts +5 -0
- package/src/commands/config/config.command-factory.d.ts.map +1 -0
- package/src/commands/config/config.command-factory.js +18 -0
- package/src/commands/config/config.command-factory.js.map +1 -0
- package/src/commands/config/config.command.d.ts +23 -0
- package/src/commands/config/config.command.d.ts.map +1 -0
- package/src/commands/config/config.command.js +94 -0
- package/src/commands/config/config.command.js.map +1 -0
- package/src/commands/config/config.option-validator.d.ts +9 -0
- package/src/commands/config/config.option-validator.d.ts.map +1 -0
- package/src/commands/config/config.option-validator.js +41 -0
- package/src/commands/config/config.option-validator.js.map +1 -0
- package/src/commands/config.command-factory.d.ts +5 -0
- package/src/commands/config.command-factory.d.ts.map +1 -0
- package/src/commands/config.command-factory.js +18 -0
- package/src/commands/config.command-factory.js.map +1 -0
- package/src/commands/config.command.d.ts +22 -0
- package/src/commands/config.command.d.ts.map +1 -0
- package/src/commands/config.command.js +80 -0
- package/src/commands/config.command.js.map +1 -0
- package/src/commands/config.option-validator.d.ts +9 -0
- package/src/commands/config.option-validator.d.ts.map +1 -0
- package/src/commands/config.option-validator.js +41 -0
- package/src/commands/config.option-validator.js.map +1 -0
- package/src/commands/create/mksymlink.command-factory.d.ts +5 -0
- package/src/commands/create/mksymlink.command-factory.d.ts.map +1 -0
- package/src/commands/create/mksymlink.command-factory.js +20 -0
- package/src/commands/create/mksymlink.command-factory.js.map +1 -0
- package/src/commands/create/mksymlink.command.d.ts +22 -0
- package/src/commands/create/mksymlink.command.d.ts.map +1 -0
- package/src/commands/create/mksymlink.command.js +68 -0
- package/src/commands/create/mksymlink.command.js.map +1 -0
- package/src/commands/create/mksymlink.option-validator.d.ts +9 -0
- package/src/commands/create/mksymlink.option-validator.d.ts.map +1 -0
- package/src/commands/create/mksymlink.option-validator.js +35 -0
- package/src/commands/create/mksymlink.option-validator.js.map +1 -0
- package/src/commands/index.d.ts +3 -0
- package/src/commands/index.d.ts.map +1 -0
- package/src/commands/index.js +118 -0
- package/src/commands/index.js.map +1 -0
- package/src/commands/mksymlink.command-factory.d.ts +5 -0
- package/src/commands/mksymlink.command-factory.d.ts.map +1 -0
- package/src/commands/mksymlink.command-factory.js +20 -0
- package/src/commands/mksymlink.command-factory.js.map +1 -0
- package/src/commands/mksymlink.command.d.ts +22 -0
- package/src/commands/mksymlink.command.d.ts.map +1 -0
- package/src/commands/mksymlink.command.js +68 -0
- package/src/commands/mksymlink.command.js.map +1 -0
- package/src/commands/mksymlink.option-validator.d.ts +9 -0
- package/src/commands/mksymlink.option-validator.d.ts.map +1 -0
- package/src/commands/mksymlink.option-validator.js +35 -0
- package/src/commands/mksymlink.option-validator.js.map +1 -0
- package/src/index.d.ts +12 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +28 -0
- package/src/index.js.map +1 -0
- package/src/services/config.service.d.ts +45 -0
- package/src/services/config.service.d.ts.map +1 -0
- package/src/services/config.service.js +113 -0
- package/src/services/config.service.js.map +1 -0
- package/src/services/os-detector.d.ts +11 -0
- package/src/services/os-detector.d.ts.map +1 -0
- package/src/services/os-detector.js +36 -0
- package/src/services/os-detector.js.map +1 -0
- package/src/services/platform-detector.d.ts +11 -0
- package/src/services/platform-detector.d.ts.map +1 -0
- package/src/services/platform-detector.js +36 -0
- package/src/services/platform-detector.js.map +1 -0
- package/src/services/symlink-error.d.ts +12 -0
- package/src/services/symlink-error.d.ts.map +1 -0
- package/src/services/symlink-error.js +33 -0
- package/src/services/symlink-error.js.map +1 -0
- package/src/services/symlink-manager.d.ts +13 -0
- package/src/services/symlink-manager.d.ts.map +1 -0
- package/src/services/symlink-manager.js +115 -0
- package/src/services/symlink-manager.js.map +1 -0
- package/src/services/symlink.service.d.ts +13 -0
- package/src/services/symlink.service.d.ts.map +1 -0
- package/src/services/symlink.service.js +115 -0
- package/src/services/symlink.service.js.map +1 -0
- package/src/types/index.d.ts +40 -0
- package/src/types/index.d.ts.map +1 -0
- package/src/types/index.js +3 -0
- package/src/types/index.js.map +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# @dx-tools/mksymlink
|
|
2
|
+
|
|
3
|
+
Cross-platform symbolic link creation tool for macOS, Windows, and Linux.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Cross-platform support** - Works on macOS, Windows, and Linux
|
|
8
|
+
- **Git-like configuration** - Manage settings with `mksymlink config`
|
|
9
|
+
- **Flexible symlink creation** - Auto-generated or custom paths
|
|
10
|
+
- **Configurable defaults** - Set your preferred symlink directory once
|
|
11
|
+
- **Windows symlink types** - Support for file, directory, and junction
|
|
12
|
+
- **Force overwrite** - Replace existing symlinks when needed
|
|
13
|
+
- **CLI & Programmatic API** - Use from command line or Node.js
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install @dx-tools/mksymlink
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# 1. Configure default symlink directory
|
|
25
|
+
mksymlink config set symlink.defaultDir ~/my-symlinks
|
|
26
|
+
|
|
27
|
+
# 2. Create symlinks from any project
|
|
28
|
+
cd ~/projects/my-app
|
|
29
|
+
mksymlink
|
|
30
|
+
|
|
31
|
+
# Creates: ~/my-symlinks/projects--my-app -> ~/projects/my-app
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## CLI Commands
|
|
35
|
+
|
|
36
|
+
### `mksymlink` (Quick Mode)
|
|
37
|
+
|
|
38
|
+
Create symlink from current directory with auto-generated target.
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
mksymlink [--type <type>] [-f]
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### `mksymlink create`
|
|
45
|
+
|
|
46
|
+
Create symlink with full control over source and target.
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
mksymlink create -s <source> -t <target> [--type <type>] [-f]
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### `mksymlink config`
|
|
53
|
+
|
|
54
|
+
Manage configuration settings.
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
mksymlink config <get|set|unset|list|info> [key] [value]
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**📖 Detailed Documentation:**
|
|
61
|
+
|
|
62
|
+
- [Create Command](src/commands/create/create-command.md) - Symlink creation options and examples
|
|
63
|
+
- [Config Command](src/commands/config/config-command.md) - Configuration management
|
|
64
|
+
|
|
65
|
+
## Programmatic API
|
|
66
|
+
|
|
67
|
+
### Configuration API
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
import { ConfigService, ConfigCommandFactory } from '@dx-tools/mksymlink';
|
|
71
|
+
|
|
72
|
+
// Using ConfigService directly
|
|
73
|
+
const config = new ConfigService();
|
|
74
|
+
config.set('symlink.defaultDir', '/path/to/symlinks');
|
|
75
|
+
const dir = config.getDefaultSymlinkDir();
|
|
76
|
+
|
|
77
|
+
// Using ConfigCommandFactory
|
|
78
|
+
const setCmd = ConfigCommandFactory.create({
|
|
79
|
+
action: 'set',
|
|
80
|
+
key: 'symlink.defaultDir',
|
|
81
|
+
value: '/path/to/symlinks',
|
|
82
|
+
});
|
|
83
|
+
await setCmd.execute();
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Symlink Creation API
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
import { MkSymlinkCommandFactory } from '@dx-tools/mksymlink';
|
|
90
|
+
|
|
91
|
+
const command = MkSymlinkCommandFactory.create({
|
|
92
|
+
source: '/path/to/source',
|
|
93
|
+
target: '/path/to/target',
|
|
94
|
+
type: 'dir',
|
|
95
|
+
force: false,
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
await command.execute();
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Advanced Usage
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
import { SymlinkService, PlatformDetector, ConsoleLogger } from '@dx-tools/mksymlink';
|
|
105
|
+
|
|
106
|
+
const logger = new ConsoleLogger();
|
|
107
|
+
const osDetector = new PlatformDetector();
|
|
108
|
+
const symlinkManager = new SymlinkService(logger, osDetector);
|
|
109
|
+
|
|
110
|
+
const result = await symlinkManager.createSymlink({
|
|
111
|
+
source: '/source/path',
|
|
112
|
+
target: '/target/path',
|
|
113
|
+
type: 'dir',
|
|
114
|
+
force: true,
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
if (result.success) {
|
|
118
|
+
console.log('Symlink created:', result.target);
|
|
119
|
+
} else {
|
|
120
|
+
console.error('Failed:', result.message);
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Windows Symlink Types
|
|
125
|
+
|
|
126
|
+
| Type | Description | Admin Required |
|
|
127
|
+
| ---------- | -------------------------------- | -------------- |
|
|
128
|
+
| `dir` | Directory symlink | Yes |
|
|
129
|
+
| `file` | File symlink | Yes |
|
|
130
|
+
| `junction` | Directory junction (recommended) | No |
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# Recommended for directories (no admin)
|
|
134
|
+
mksymlink --type junction
|
|
135
|
+
|
|
136
|
+
# Requires administrator
|
|
137
|
+
mksymlink --type dir
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**📖 See:** [Create Command - Windows Types](src/commands/create/create-command.md#windows-symlink-types)
|
|
141
|
+
|
|
142
|
+
## Development
|
|
143
|
+
|
|
144
|
+
### Build & Test
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# Build
|
|
148
|
+
npm run build
|
|
149
|
+
|
|
150
|
+
# Test
|
|
151
|
+
npm test
|
|
152
|
+
|
|
153
|
+
# Lint & Format
|
|
154
|
+
npm run lint
|
|
155
|
+
npm run format
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Testing CLI Commands
|
|
159
|
+
|
|
160
|
+
After building, test the CLI locally:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# Quick mode
|
|
164
|
+
npx mksymlink
|
|
165
|
+
|
|
166
|
+
# Config commands
|
|
167
|
+
npx mksymlink config set symlink.defaultDir ~/test-symlinks
|
|
168
|
+
npx mksymlink config list
|
|
169
|
+
npx mksymlink config get symlink.defaultDir
|
|
170
|
+
npx mksymlink config unset symlink.defaultDir
|
|
171
|
+
|
|
172
|
+
# Create mode
|
|
173
|
+
npx mksymlink create -s /path/to/source -t /path/to/target
|
|
174
|
+
npx mksymlink create -f
|
|
175
|
+
npx mksymlink create --type junction # Windows
|
|
176
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanced-usage.d.ts","sourceRoot":"","sources":["../../../../packages/mksymlink/examples/advanced-usage.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const src_1 = require("../src");
|
|
4
|
+
const logger_1 = require("@dx-tools/logger");
|
|
5
|
+
async function advancedExample() {
|
|
6
|
+
console.log('=== Advanced Symlink Manager Usage ===\n');
|
|
7
|
+
const logger = new logger_1.ConsoleLogger();
|
|
8
|
+
const osDetector = new src_1.PlatformDetector();
|
|
9
|
+
const symlinkManager = new src_1.SymlinkService(logger, osDetector);
|
|
10
|
+
console.log(`Detected OS: ${osDetector.getPlatform()}\n`);
|
|
11
|
+
const source = process.cwd();
|
|
12
|
+
const target = '/tmp/advanced-symlink';
|
|
13
|
+
console.log('Checking if symlink exists...');
|
|
14
|
+
const exists = await symlinkManager.symlinkExists(target);
|
|
15
|
+
console.log(`Symlink exists: ${exists}\n`);
|
|
16
|
+
if (exists) {
|
|
17
|
+
console.log('Removing existing symlink...');
|
|
18
|
+
await symlinkManager.removeSymlink(target);
|
|
19
|
+
console.log('Removed successfully\n');
|
|
20
|
+
}
|
|
21
|
+
console.log('Creating new symlink...');
|
|
22
|
+
const result = await symlinkManager.createSymlink({
|
|
23
|
+
source,
|
|
24
|
+
target,
|
|
25
|
+
type: osDetector.isWindows() ? 'junction' : 'dir',
|
|
26
|
+
force: false,
|
|
27
|
+
});
|
|
28
|
+
if (result.success) {
|
|
29
|
+
console.log('\nSymlink created successfully!');
|
|
30
|
+
console.log(` Source: ${result.source}`);
|
|
31
|
+
console.log(` Target: ${result.target}`);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.error('\nFailed to create symlink:');
|
|
35
|
+
console.error(` ${result.message || result.error?.message}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
advancedExample().catch(console.error);
|
|
39
|
+
//# sourceMappingURL=advanced-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanced-usage.js","sourceRoot":"","sources":["../../../../packages/mksymlink/examples/advanced-usage.ts"],"names":[],"mappings":";;AAAA,gCAA0D;AAC1D,6CAAiD;AAEjD,KAAK,UAAU,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,IAAI,sBAAa,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,sBAAgB,EAAE,CAAC;IAC1C,MAAM,cAAc,GAAG,IAAI,oBAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAE9D,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAE1D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,uBAAuB,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,IAAI,CAAC,CAAC;IAE3C,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,MAAM,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC;QAC9C,MAAM;QACN,MAAM;QACN,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK;QACjD,KAAK,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;AACL,CAAC;AAED,eAAe,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic-usage.d.ts","sourceRoot":"","sources":["../../../../packages/mksymlink/examples/basic-usage.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const src_1 = require("../src");
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
async function basicExample() {
|
|
6
|
+
console.log('=== Basic Symlink Creation ===\n');
|
|
7
|
+
const command = src_1.MkSymlinkCommandFactory.create({
|
|
8
|
+
source: process.cwd(),
|
|
9
|
+
target: (0, path_1.join)(process.cwd(), 'target-symlink'),
|
|
10
|
+
type: 'dir',
|
|
11
|
+
});
|
|
12
|
+
await command.execute();
|
|
13
|
+
}
|
|
14
|
+
basicExample().catch(console.error);
|
|
15
|
+
//# sourceMappingURL=basic-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic-usage.js","sourceRoot":"","sources":["../../../../packages/mksymlink/examples/basic-usage.ts"],"names":[],"mappings":";;AAAA,gCAAiD;AACjD,+BAA4B;AAE5B,KAAK,UAAU,YAAY;IACvB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAEhD,MAAM,OAAO,GAAG,6BAAuB,CAAC,MAAM,CAAC;QAC3C,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE;QACrB,MAAM,EAAE,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC;QAC7C,IAAI,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED,YAAY,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-usage.d.ts","sourceRoot":"","sources":["../../../../packages/mksymlink/examples/config-usage.ts"],"names":[],"mappings":"AAIA,iBAAe,cAAc,kBAgE5B;AAKD,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.configExamples = configExamples;
|
|
4
|
+
const config_command_factory_1 = require("../src/commands/config/config.command-factory");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const os_1 = require("os");
|
|
7
|
+
async function configExamples() {
|
|
8
|
+
console.log('=== Config Command Examples ===\n');
|
|
9
|
+
try {
|
|
10
|
+
// Example 1: List all configuration
|
|
11
|
+
console.log('1. List all configuration:');
|
|
12
|
+
const listCommand = config_command_factory_1.ConfigCommandFactory.create({ action: 'list' });
|
|
13
|
+
await listCommand.execute();
|
|
14
|
+
console.log('');
|
|
15
|
+
// Example 2: Set default symlink directory
|
|
16
|
+
console.log('2. Set default symlink directory:');
|
|
17
|
+
const setCommand = config_command_factory_1.ConfigCommandFactory.create({
|
|
18
|
+
action: 'set',
|
|
19
|
+
key: 'symlink.defaultDir',
|
|
20
|
+
value: (0, path_1.join)((0, os_1.homedir)(), 'symlinks'),
|
|
21
|
+
});
|
|
22
|
+
await setCommand.execute();
|
|
23
|
+
console.log('');
|
|
24
|
+
// Example 3: Get a specific config value
|
|
25
|
+
console.log('3. Get default symlink directory:');
|
|
26
|
+
const getCommand = config_command_factory_1.ConfigCommandFactory.create({
|
|
27
|
+
action: 'get',
|
|
28
|
+
key: 'symlink.defaultDir',
|
|
29
|
+
});
|
|
30
|
+
await getCommand.execute();
|
|
31
|
+
console.log('');
|
|
32
|
+
// Example 4: Set a custom config key
|
|
33
|
+
console.log('4. Set a custom config key:');
|
|
34
|
+
const setCustomCommand = config_command_factory_1.ConfigCommandFactory.create({
|
|
35
|
+
action: 'set',
|
|
36
|
+
key: 'user.name',
|
|
37
|
+
value: 'John Doe',
|
|
38
|
+
});
|
|
39
|
+
await setCustomCommand.execute();
|
|
40
|
+
console.log('');
|
|
41
|
+
// Example 5: List all configuration again (to see changes)
|
|
42
|
+
console.log('5. List all configuration (after changes):');
|
|
43
|
+
const listCommand2 = config_command_factory_1.ConfigCommandFactory.create({ action: 'list' });
|
|
44
|
+
await listCommand2.execute();
|
|
45
|
+
console.log('');
|
|
46
|
+
// Example 6: Unset a config value
|
|
47
|
+
console.log('6. Unset user.name:');
|
|
48
|
+
const unsetCommand = config_command_factory_1.ConfigCommandFactory.create({
|
|
49
|
+
action: 'unset',
|
|
50
|
+
key: 'user.name',
|
|
51
|
+
});
|
|
52
|
+
await unsetCommand.execute();
|
|
53
|
+
console.log('');
|
|
54
|
+
// Example 7: List configuration one more time
|
|
55
|
+
console.log('7. List configuration (after unset):');
|
|
56
|
+
const listCommand3 = config_command_factory_1.ConfigCommandFactory.create({ action: 'list' });
|
|
57
|
+
await listCommand3.execute();
|
|
58
|
+
console.log('');
|
|
59
|
+
console.log('=== Config Examples Completed ===\n');
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error('Error running config examples:', error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=config-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-usage.js","sourceRoot":"","sources":["../../../../packages/mksymlink/examples/config-usage.ts"],"names":[],"mappings":";;AAyES,wCAAc;AAzEvB,0FAAqF;AACrF,+BAA4B;AAC5B,2BAA6B;AAE7B,KAAK,UAAU,cAAc;IACzB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAEjD,IAAI,CAAC;QACD,oCAAoC;QACpC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,6CAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACpE,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,2CAA2C;QAC3C,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,6CAAoB,CAAC,MAAM,CAAC;YAC3C,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,oBAAoB;YACzB,KAAK,EAAE,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,UAAU,CAAC;SACrC,CAAC,CAAC;QACH,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,yCAAyC;QACzC,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,6CAAoB,CAAC,MAAM,CAAC;YAC3C,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,oBAAoB;SAC5B,CAAC,CAAC;QACH,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,qCAAqC;QACrC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,gBAAgB,GAAG,6CAAoB,CAAC,MAAM,CAAC;YACjD,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,UAAU;SACpB,CAAC,CAAC;QACH,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,2DAA2D;QAC3D,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,6CAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACrE,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,kCAAkC;QAClC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,MAAM,YAAY,GAAG,6CAAoB,CAAC,MAAM,CAAC;YAC7C,MAAM,EAAE,OAAO;YACf,GAAG,EAAE,WAAW;SACnB,CAAC,CAAC;QACH,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,8CAA8C;QAC9C,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,6CAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACrE,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-platform.d.ts","sourceRoot":"","sources":["../../../../packages/mksymlink/examples/cross-platform.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const src_1 = require("../src");
|
|
4
|
+
async function crossPlatformExample() {
|
|
5
|
+
console.log('=== Cross-Platform Symlink Example ===\n');
|
|
6
|
+
const osDetector = new src_1.PlatformDetector();
|
|
7
|
+
const platform = osDetector.getPlatform();
|
|
8
|
+
console.log(`Current platform: ${platform}`);
|
|
9
|
+
console.log(`Is Windows: ${osDetector.isWindows()}`);
|
|
10
|
+
console.log(`Is macOS: ${osDetector.isMacOS()}`);
|
|
11
|
+
console.log(`Is Linux: ${osDetector.isLinux()}\n`);
|
|
12
|
+
const source = process.cwd();
|
|
13
|
+
let target;
|
|
14
|
+
let type;
|
|
15
|
+
if (osDetector.isWindows()) {
|
|
16
|
+
target = 'C:\\temp\\my-symlink';
|
|
17
|
+
type = 'junction';
|
|
18
|
+
console.log('Using Windows junction for better compatibility\n');
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
target = '/tmp/my-symlink';
|
|
22
|
+
type = 'dir';
|
|
23
|
+
console.log('Using standard directory symlink\n');
|
|
24
|
+
}
|
|
25
|
+
const command = src_1.MkSymlinkCommandFactory.create({
|
|
26
|
+
source,
|
|
27
|
+
target,
|
|
28
|
+
type,
|
|
29
|
+
force: true,
|
|
30
|
+
});
|
|
31
|
+
try {
|
|
32
|
+
await command.execute();
|
|
33
|
+
console.log('\nCross-platform symlink created successfully!');
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
console.error('\nFailed to create symlink:');
|
|
37
|
+
console.error(error);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
crossPlatformExample().catch(console.error);
|
|
41
|
+
//# sourceMappingURL=cross-platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-platform.js","sourceRoot":"","sources":["../../../../packages/mksymlink/examples/cross-platform.ts"],"names":[],"mappings":";;AAAA,gCAAmE;AAEnE,KAAK,UAAU,oBAAoB;IAC/B,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAExD,MAAM,UAAU,GAAG,IAAI,sBAAgB,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,MAAc,CAAC;IACnB,IAAI,IAAiC,CAAC;IAEtC,IAAI,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC;QACzB,MAAM,GAAG,sBAAsB,CAAC;QAChC,IAAI,GAAG,UAAU,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACJ,MAAM,GAAG,iBAAiB,CAAC;QAC3B,IAAI,GAAG,KAAK,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,OAAO,GAAG,6BAAuB,CAAC,MAAM,CAAC;QAC3C,MAAM;QACN,MAAM;QACN,IAAI;QACJ,KAAK,EAAE,IAAI;KACd,CAAC,CAAC;IAEH,IAAI,CAAC;QACD,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;AACL,CAAC;AAED,oBAAoB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/mksymlink/examples/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
require("./basic-usage");
|
|
4
|
+
// import { configExamples } from './config-usage';
|
|
5
|
+
// Uncomment to run config examples:
|
|
6
|
+
// configExamples().catch(console.error);
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/mksymlink/examples/index.ts"],"names":[],"mappings":";;AAAA,yBAAuB;AACvB,mDAAmD;AAEnD,oCAAoC;AACpC,yCAAyC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dx-pkg/mksymlink",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Create symbolic links across platforms (macOS, Windows)",
|
|
5
|
+
"type": "commonjs",
|
|
6
|
+
"main": "./src/index.js",
|
|
7
|
+
"types": "./src/index.d.ts",
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"access": "public"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./src/index.js",
|
|
14
|
+
"require": "./src/index.js",
|
|
15
|
+
"types": "./src/index.d.ts"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"bin": {
|
|
19
|
+
"mksymlink": "src/commands/index.js"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc -p tsconfig.json",
|
|
23
|
+
"watch": "tsc -p tsconfig.json --watch",
|
|
24
|
+
"dev": "tsc-watch -b --onSuccess \"npm start\"",
|
|
25
|
+
"start": "node ../../dist/packages/mksymlink/examples/index.js",
|
|
26
|
+
"test": "jest",
|
|
27
|
+
"test:watch": "jest --watch",
|
|
28
|
+
"test:coverage": "jest --coverage",
|
|
29
|
+
"lint": "eslint . --ext .ts",
|
|
30
|
+
"format": "prettier --write \"**/*.{ts,json,md}\""
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"symlink",
|
|
34
|
+
"symbolic-link",
|
|
35
|
+
"cross-platform",
|
|
36
|
+
"macos",
|
|
37
|
+
"windows",
|
|
38
|
+
"cli"
|
|
39
|
+
],
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@dx-tools/logger": "*",
|
|
42
|
+
"chalk": "^5.6.2",
|
|
43
|
+
"commander": "^12.0.0"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/jest": "^30.0.0",
|
|
47
|
+
"@types/node": "^24.10.1",
|
|
48
|
+
"ts-jest": "^29.4.5",
|
|
49
|
+
"tsc-watch": "^7.2.0"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.command-factory.d.ts","sourceRoot":"","sources":["../../../../../../packages/mksymlink/src/commands/config/config.command-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAIvE,qBAAa,oBAAoB;IAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa;CAS9D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigCommandFactory = void 0;
|
|
4
|
+
const logger_1 = require("@dx-tools/logger");
|
|
5
|
+
const config_command_1 = require("./config.command");
|
|
6
|
+
const config_option_validator_1 = require("./config.option-validator");
|
|
7
|
+
const config_service_1 = require("../../services/config.service");
|
|
8
|
+
class ConfigCommandFactory {
|
|
9
|
+
static create(options) {
|
|
10
|
+
const validator = new config_option_validator_1.ConfigOptionValidator();
|
|
11
|
+
validator.validate(options);
|
|
12
|
+
const logger = new logger_1.ConsoleLogger();
|
|
13
|
+
const configService = new config_service_1.ConfigService();
|
|
14
|
+
return new config_command_1.ConfigCommand(logger, configService, options);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.ConfigCommandFactory = ConfigCommandFactory;
|
|
18
|
+
//# sourceMappingURL=config.command-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.command-factory.js","sourceRoot":"","sources":["../../../../../../packages/mksymlink/src/commands/config/config.command-factory.ts"],"names":[],"mappings":";;;AAAA,6CAAiD;AACjD,qDAAuE;AACvE,uEAAkE;AAClE,kEAA8D;AAE9D,MAAa,oBAAoB;IAC7B,MAAM,CAAC,MAAM,CAAC,OAA6B;QACvC,MAAM,SAAS,GAAG,IAAI,+CAAqB,EAAE,CAAC;QAC9C,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE5B,MAAM,MAAM,GAAG,IAAI,sBAAa,EAAE,CAAC;QACnC,MAAM,aAAa,GAAG,IAAI,8BAAa,EAAE,CAAC;QAE1C,OAAO,IAAI,8BAAa,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;CACJ;AAVD,oDAUC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Logger } from '@dx-tools/logger';
|
|
2
|
+
import { Command } from '../../types';
|
|
3
|
+
import { ConfigService } from '../../services/config.service';
|
|
4
|
+
export type ConfigAction = 'get' | 'set' | 'unset' | 'list' | 'info';
|
|
5
|
+
export interface ConfigCommandOptions {
|
|
6
|
+
action: ConfigAction;
|
|
7
|
+
key?: string;
|
|
8
|
+
value?: string;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
export declare class ConfigCommand implements Command<ConfigCommandOptions> {
|
|
12
|
+
private readonly logger;
|
|
13
|
+
private readonly configService;
|
|
14
|
+
private readonly options;
|
|
15
|
+
constructor(logger: Logger, configService: ConfigService, options: ConfigCommandOptions);
|
|
16
|
+
execute(): Promise<void>;
|
|
17
|
+
private handleGet;
|
|
18
|
+
private handleSet;
|
|
19
|
+
private handleUnset;
|
|
20
|
+
private handleList;
|
|
21
|
+
private handleInfo;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=config.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.command.d.ts","sourceRoot":"","sources":["../../../../../../packages/mksymlink/src/commands/config/config.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,qBAAa,aAAc,YAAW,OAAO,CAAC,oBAAoB,CAAC;IAE3D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,oBAAoB;IAG5C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YA+BhB,SAAS;YAcT,SAAS;YAYT,WAAW;YASX,UAAU;YAeV,UAAU;CAc3B"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigCommand = void 0;
|
|
4
|
+
class ConfigCommand {
|
|
5
|
+
logger;
|
|
6
|
+
configService;
|
|
7
|
+
options;
|
|
8
|
+
constructor(logger, configService, options) {
|
|
9
|
+
this.logger = logger;
|
|
10
|
+
this.configService = configService;
|
|
11
|
+
this.options = options;
|
|
12
|
+
}
|
|
13
|
+
async execute() {
|
|
14
|
+
try {
|
|
15
|
+
const { action, key, value } = this.options;
|
|
16
|
+
switch (action) {
|
|
17
|
+
case 'get':
|
|
18
|
+
await this.handleGet(key);
|
|
19
|
+
break;
|
|
20
|
+
case 'set':
|
|
21
|
+
await this.handleSet(key, value);
|
|
22
|
+
break;
|
|
23
|
+
case 'unset':
|
|
24
|
+
await this.handleUnset(key);
|
|
25
|
+
break;
|
|
26
|
+
case 'list':
|
|
27
|
+
await this.handleList();
|
|
28
|
+
break;
|
|
29
|
+
case 'info':
|
|
30
|
+
await this.handleInfo();
|
|
31
|
+
break;
|
|
32
|
+
default:
|
|
33
|
+
throw new Error(`Unknown config action: ${action}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
this.logger.error(`Config command failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async handleGet(key) {
|
|
42
|
+
if (!key) {
|
|
43
|
+
throw new Error('Key is required for get action');
|
|
44
|
+
}
|
|
45
|
+
const value = this.configService.get(key);
|
|
46
|
+
if (value === undefined) {
|
|
47
|
+
this.logger.warning(`Config key '${key}' not found`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
this.logger.info(value);
|
|
51
|
+
}
|
|
52
|
+
async handleSet(key, value) {
|
|
53
|
+
if (!key) {
|
|
54
|
+
throw new Error('Key is required for set action');
|
|
55
|
+
}
|
|
56
|
+
if (!value) {
|
|
57
|
+
throw new Error('Value is required for set action');
|
|
58
|
+
}
|
|
59
|
+
this.configService.set(key, value);
|
|
60
|
+
this.logger.success(`Config set: ${key} = ${value}`);
|
|
61
|
+
}
|
|
62
|
+
async handleUnset(key) {
|
|
63
|
+
if (!key) {
|
|
64
|
+
throw new Error('Key is required for unset action');
|
|
65
|
+
}
|
|
66
|
+
this.configService.unset(key);
|
|
67
|
+
this.logger.success(`Config unset: ${key}`);
|
|
68
|
+
}
|
|
69
|
+
async handleList() {
|
|
70
|
+
const config = this.configService.list();
|
|
71
|
+
const entries = Object.entries(config);
|
|
72
|
+
if (entries.length === 0) {
|
|
73
|
+
this.logger.info('No configuration found');
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
this.logger.info('Current configuration:');
|
|
77
|
+
for (const [key, value] of entries) {
|
|
78
|
+
this.logger.info(` ${key} = ${value}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async handleInfo() {
|
|
82
|
+
const info = this.configService.getConfigInfo();
|
|
83
|
+
this.logger.info('Configuration file information:');
|
|
84
|
+
this.logger.info(` Path: ${info.path}`);
|
|
85
|
+
this.logger.info(` Exists: ${info.exists ? 'Yes' : 'No'}`);
|
|
86
|
+
if (info.exists) {
|
|
87
|
+
this.logger.info(` Size: ${info.size} bytes`);
|
|
88
|
+
this.logger.info(` Modified: ${info.modified?.toLocaleString()}`);
|
|
89
|
+
}
|
|
90
|
+
this.logger.info(` Entries: ${info.entries}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.ConfigCommand = ConfigCommand;
|
|
94
|
+
//# sourceMappingURL=config.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.command.js","sourceRoot":"","sources":["../../../../../../packages/mksymlink/src/commands/config/config.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CommandOptionsValidator } from '../../types';
|
|
2
|
+
import { ConfigCommandOptions } from './config.command';
|
|
3
|
+
export declare class ConfigOptionValidator implements CommandOptionsValidator<ConfigCommandOptions> {
|
|
4
|
+
validate(options: ConfigCommandOptions): void;
|
|
5
|
+
private validateAction;
|
|
6
|
+
private validateKey;
|
|
7
|
+
private validateValue;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=config.option-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.option-validator.d.ts","sourceRoot":"","sources":["../../../../../../packages/mksymlink/src/commands/config/config.option-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,oBAAoB,EAAgB,MAAM,kBAAkB,CAAC;AAItE,qBAAa,qBAAsB,YAAW,uBAAuB,CAAC,oBAAoB,CAAC;IACvF,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAM7C,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,aAAa;CAgBxB"}
|