@taggr/cli 1.0.4 → 1.0.6
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 +99 -1
- package/dist/commands/check.d.ts +7 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +166 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/ci.d.ts +9 -0
- package/dist/commands/ci.d.ts.map +1 -0
- package/dist/commands/ci.js +63 -0
- package/dist/commands/ci.js.map +1 -0
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +31 -13
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +94 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/watch.d.ts +6 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +152 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/index.js +37 -4
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/api.d.ts +5 -0
- package/dist/utils/api.d.ts.map +1 -1
- package/dist/utils/api.js +26 -0
- package/dist/utils/api.js.map +1 -1
- package/dist/utils/generator.d.ts +3 -3
- package/dist/utils/generator.d.ts.map +1 -1
- package/dist/utils/generator.js +44 -7
- package/dist/utils/generator.js.map +1 -1
- package/dist/utils/metadata.d.ts +26 -0
- package/dist/utils/metadata.d.ts.map +1 -0
- package/dist/utils/metadata.js +253 -0
- package/dist/utils/metadata.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -43,6 +43,11 @@ npm install -g @taggr/cli
|
|
|
43
43
|
| `taggr list` | List all your labels |
|
|
44
44
|
| `taggr pull <name>` | Pull a specific label |
|
|
45
45
|
| `taggr pull --all` | Pull all labels |
|
|
46
|
+
| `taggr sync` | Force sync all labels (alias for pull --all) |
|
|
47
|
+
| `taggr check` | Check if labels are up-to-date |
|
|
48
|
+
| `taggr check --strict` | Fail build if labels are outdated (for CI/CD) |
|
|
49
|
+
| `taggr watch` | Watch for label changes and auto-sync |
|
|
50
|
+
| `taggr status` | Show sync status and label versions |
|
|
46
51
|
|
|
47
52
|
## Options
|
|
48
53
|
|
|
@@ -62,6 +67,35 @@ Options:
|
|
|
62
67
|
-a, --all Pull all labels
|
|
63
68
|
```
|
|
64
69
|
|
|
70
|
+
### Check
|
|
71
|
+
```bash
|
|
72
|
+
taggr check [options]
|
|
73
|
+
|
|
74
|
+
Options:
|
|
75
|
+
--strict Fail if labels are outdated (for CI/CD)
|
|
76
|
+
--fix Show fix instructions
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Watch
|
|
80
|
+
```bash
|
|
81
|
+
taggr watch [options]
|
|
82
|
+
|
|
83
|
+
Options:
|
|
84
|
+
-i, --interval <seconds> Poll interval in seconds (default: 30)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Status
|
|
88
|
+
```bash
|
|
89
|
+
taggr status
|
|
90
|
+
|
|
91
|
+
Shows:
|
|
92
|
+
- Last sync time
|
|
93
|
+
- API URL
|
|
94
|
+
- Label count
|
|
95
|
+
- Individual label versions
|
|
96
|
+
- File status
|
|
97
|
+
```
|
|
98
|
+
|
|
65
99
|
## Generated Files
|
|
66
100
|
|
|
67
101
|
When you run `taggr pull`, files are created in a `./taggr` directory:
|
|
@@ -69,9 +103,12 @@ When you run `taggr pull`, files are created in a `./taggr` directory:
|
|
|
69
103
|
```
|
|
70
104
|
./taggr/
|
|
71
105
|
├── labels.json # All your labels
|
|
72
|
-
|
|
106
|
+
├── labels.d.ts # TypeScript definitions for autocomplete
|
|
107
|
+
└── .taggr.json # Metadata file (version tracking, sync status)
|
|
73
108
|
```
|
|
74
109
|
|
|
110
|
+
> **Note:** The `.taggr.json` file is automatically managed by the CLI. It tracks which version of each label you're using and when labels were last synced. This enables features like version checking and integrity verification.
|
|
111
|
+
|
|
75
112
|
### labels.json
|
|
76
113
|
```json
|
|
77
114
|
{
|
|
@@ -103,10 +140,71 @@ console.log(labels.anotherLabel);
|
|
|
103
140
|
### TypeScript/JavaScript Support
|
|
104
141
|
The `labels.d.ts` file provides autocomplete in VS Code and other editors for both TypeScript and JavaScript projects.
|
|
105
142
|
|
|
143
|
+
## Advanced Features
|
|
144
|
+
|
|
145
|
+
### Version Tracking
|
|
146
|
+
|
|
147
|
+
The CLI automatically tracks which version of each label you're using. This ensures your team stays in sync and prevents outdated labels in production.
|
|
148
|
+
|
|
149
|
+
When you run `taggr pull`, the CLI:
|
|
150
|
+
- Saves version information for each label
|
|
151
|
+
- Tracks when labels were last synced
|
|
152
|
+
- Stores checksums for integrity verification
|
|
153
|
+
|
|
154
|
+
### Build-Time Validation
|
|
155
|
+
|
|
156
|
+
Use `taggr check --strict` in your CI/CD pipeline to fail builds if labels are outdated. This prevents deploying stale labels to production.
|
|
157
|
+
|
|
158
|
+
**Example CI/CD Integration:**
|
|
159
|
+
```yaml
|
|
160
|
+
# .github/workflows/taggr-check.yml
|
|
161
|
+
- name: Check labels are up-to-date
|
|
162
|
+
run: |
|
|
163
|
+
taggr login $TAGGR_API_KEY
|
|
164
|
+
taggr check --strict
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Auto-Sync Mode
|
|
168
|
+
|
|
169
|
+
Run `taggr watch` to automatically sync labels when they change in the cloud. Perfect for development!
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
taggr watch
|
|
173
|
+
# Or with custom interval
|
|
174
|
+
taggr watch --interval 60
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
The watch mode will:
|
|
178
|
+
- Poll the API for changes every N seconds
|
|
179
|
+
- Automatically pull updated labels
|
|
180
|
+
- Show notifications when labels change
|
|
181
|
+
|
|
182
|
+
### Integrity Protection
|
|
183
|
+
|
|
184
|
+
The CLI detects manual edits to `labels.json` and warns you before overwriting. This prevents accidental loss of local changes.
|
|
185
|
+
|
|
186
|
+
### Check Sync Status
|
|
187
|
+
|
|
188
|
+
Use `taggr status` to see:
|
|
189
|
+
- When labels were last synced
|
|
190
|
+
- Which version of each label you're using
|
|
191
|
+
- Whether files exist and are up-to-date
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
taggr status
|
|
195
|
+
```
|
|
196
|
+
|
|
106
197
|
## Configuration
|
|
107
198
|
|
|
108
199
|
The CLI stores your token in `~/.taggr/config.json`. This file is created when you run `taggr login`.
|
|
109
200
|
|
|
201
|
+
## Tips
|
|
202
|
+
|
|
203
|
+
- Add `./taggr` to your `.gitignore` if you don't want to commit generated files
|
|
204
|
+
- The `.taggr.json` metadata file is automatically managed - don't edit it manually
|
|
205
|
+
- Use `taggr check --strict` in CI/CD to ensure labels are always up-to-date
|
|
206
|
+
- Run `taggr watch` during development for automatic label syncing
|
|
207
|
+
|
|
110
208
|
## License
|
|
111
209
|
|
|
112
210
|
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAQD,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0KvE"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { requireAuth } from '../utils/config.js';
|
|
4
|
+
import { initApi, getLabelVersions } from '../utils/api.js';
|
|
5
|
+
import { getMetadata } from '../utils/metadata.js';
|
|
6
|
+
export async function checkCommand(options) {
|
|
7
|
+
// In CI mode (when CI environment variable is set), be silent
|
|
8
|
+
const isCI = process.env.CI === 'true' || process.env.CI === '1';
|
|
9
|
+
const spinner = isCI ? null : ora('Checking label versions...').start();
|
|
10
|
+
try {
|
|
11
|
+
if (!isCI && spinner) {
|
|
12
|
+
spinner.text = 'Checking label versions...';
|
|
13
|
+
}
|
|
14
|
+
// Check if metadata exists
|
|
15
|
+
const metadata = await getMetadata();
|
|
16
|
+
if (!metadata) {
|
|
17
|
+
if (spinner) {
|
|
18
|
+
spinner.fail(chalk.red('No sync metadata found'));
|
|
19
|
+
console.log();
|
|
20
|
+
console.log(chalk.dim('Labels have not been synced yet. Run "taggr pull --all" first.'));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
console.error('No sync metadata found. Run "taggr pull --all" first.');
|
|
24
|
+
}
|
|
25
|
+
if (options.strict) {
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
// Initialize API
|
|
31
|
+
const config = await requireAuth();
|
|
32
|
+
initApi(config);
|
|
33
|
+
// Get current versions from API
|
|
34
|
+
if (spinner) {
|
|
35
|
+
spinner.text = 'Fetching current label versions...';
|
|
36
|
+
}
|
|
37
|
+
const remoteVersions = await getLabelVersions();
|
|
38
|
+
// Validate remoteVersions
|
|
39
|
+
if (!remoteVersions || typeof remoteVersions !== 'object') {
|
|
40
|
+
throw new Error('Invalid response: label versions not found');
|
|
41
|
+
}
|
|
42
|
+
// Compare local vs remote versions
|
|
43
|
+
const outdated = [];
|
|
44
|
+
const missing = [];
|
|
45
|
+
const extra = [];
|
|
46
|
+
// Check each label in metadata
|
|
47
|
+
for (const [labelName, labelMeta] of Object.entries(metadata.labels)) {
|
|
48
|
+
const remoteVersion = remoteVersions[labelName];
|
|
49
|
+
if (!remoteVersion) {
|
|
50
|
+
// Label exists locally but not remotely (might have been deleted)
|
|
51
|
+
extra.push(labelName);
|
|
52
|
+
}
|
|
53
|
+
else if (labelMeta.version !== remoteVersion) {
|
|
54
|
+
outdated.push({
|
|
55
|
+
name: labelName,
|
|
56
|
+
localVersion: labelMeta.version,
|
|
57
|
+
remoteVersion,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Check for new labels
|
|
62
|
+
for (const labelName of Object.keys(remoteVersions)) {
|
|
63
|
+
if (!metadata.labels[labelName]) {
|
|
64
|
+
missing.push(labelName);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (spinner) {
|
|
68
|
+
spinner.stop();
|
|
69
|
+
}
|
|
70
|
+
// Display results
|
|
71
|
+
if (outdated.length === 0 && missing.length === 0 && extra.length === 0) {
|
|
72
|
+
if (!isCI) {
|
|
73
|
+
console.log();
|
|
74
|
+
console.log(chalk.green('✓ All labels are up-to-date!'));
|
|
75
|
+
console.log();
|
|
76
|
+
}
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// Show outdated labels
|
|
80
|
+
if (outdated.length > 0) {
|
|
81
|
+
if (isCI) {
|
|
82
|
+
console.error(`Outdated labels: ${outdated.map(l => `${l.name} (${l.localVersion} → ${l.remoteVersion})`).join(', ')}`);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
console.log();
|
|
86
|
+
console.log(chalk.yellow(`⚠ Found ${outdated.length} outdated label(s):`));
|
|
87
|
+
console.log();
|
|
88
|
+
for (const label of outdated) {
|
|
89
|
+
console.log(` ${chalk.white(label.name)}: ` +
|
|
90
|
+
`${chalk.red(label.localVersion)} → ${chalk.green(label.remoteVersion)}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Show missing labels
|
|
95
|
+
if (missing.length > 0) {
|
|
96
|
+
if (isCI) {
|
|
97
|
+
console.error(`Missing labels: ${missing.join(', ')}`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.log();
|
|
101
|
+
console.log(chalk.yellow(`⚠ Found ${missing.length} new label(s) not in local files:`));
|
|
102
|
+
console.log();
|
|
103
|
+
for (const labelName of missing) {
|
|
104
|
+
console.log(` ${chalk.white(labelName)}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Show extra labels (only in non-CI mode)
|
|
109
|
+
if (extra.length > 0 && !isCI) {
|
|
110
|
+
console.log();
|
|
111
|
+
console.log(chalk.dim(`ℹ ${extra.length} label(s) exist locally but not in cloud:`));
|
|
112
|
+
console.log();
|
|
113
|
+
for (const labelName of extra) {
|
|
114
|
+
console.log(chalk.dim(` ${labelName}`));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (!isCI) {
|
|
118
|
+
console.log();
|
|
119
|
+
}
|
|
120
|
+
// Handle --fix option
|
|
121
|
+
if (options.fix) {
|
|
122
|
+
if (!isCI) {
|
|
123
|
+
console.log(chalk.dim('Run "taggr pull --all" to update your labels.'));
|
|
124
|
+
console.log();
|
|
125
|
+
}
|
|
126
|
+
if (options.strict) {
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// Handle --strict option
|
|
132
|
+
if (options.strict) {
|
|
133
|
+
if (!isCI) {
|
|
134
|
+
console.log(chalk.red('Labels are outdated. Build failed.'));
|
|
135
|
+
console.log();
|
|
136
|
+
console.log(chalk.dim('To fix:'));
|
|
137
|
+
console.log(chalk.dim(' taggr pull --all'));
|
|
138
|
+
console.log();
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
console.error('Labels are outdated. Run "taggr pull --all" to update.');
|
|
142
|
+
}
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
// Non-strict mode - just warn
|
|
146
|
+
if (!isCI) {
|
|
147
|
+
console.log(chalk.dim('Run "taggr pull --all" to update your labels.'));
|
|
148
|
+
console.log(chalk.dim('Use --strict flag to fail builds when labels are outdated.'));
|
|
149
|
+
console.log();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
if (spinner) {
|
|
154
|
+
spinner.fail(chalk.red('Check failed'));
|
|
155
|
+
console.error(chalk.red(`\nError: ${error.message}`));
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
console.error(`Error: ${error.message}`);
|
|
159
|
+
}
|
|
160
|
+
if (options.strict) {
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../src/commands/ci.ts"],"names":[],"mappings":"AAKA,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DjE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { requireAuth } from '../utils/config.js';
|
|
2
|
+
import { initApi, getLabelVersions } from '../utils/api.js';
|
|
3
|
+
import { getMetadata } from '../utils/metadata.js';
|
|
4
|
+
/**
|
|
5
|
+
* CI-friendly check command (silent, exit codes only)
|
|
6
|
+
*/
|
|
7
|
+
export async function ciCommand(options) {
|
|
8
|
+
try {
|
|
9
|
+
// Check if metadata exists
|
|
10
|
+
const metadata = await getMetadata();
|
|
11
|
+
if (!metadata) {
|
|
12
|
+
console.error('No sync metadata found. Run "taggr pull --all" first.');
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
// Initialize API
|
|
16
|
+
const config = await requireAuth();
|
|
17
|
+
initApi(config);
|
|
18
|
+
// Get current versions from API
|
|
19
|
+
const remoteVersions = await getLabelVersions();
|
|
20
|
+
// Compare local vs remote versions
|
|
21
|
+
const outdated = [];
|
|
22
|
+
const missing = [];
|
|
23
|
+
// Check each label in metadata
|
|
24
|
+
for (const [labelName, labelMeta] of Object.entries(metadata.labels)) {
|
|
25
|
+
const remoteVersion = remoteVersions[labelName];
|
|
26
|
+
if (!remoteVersion) {
|
|
27
|
+
// Label exists locally but not remotely
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
else if (labelMeta.version !== remoteVersion) {
|
|
31
|
+
outdated.push({
|
|
32
|
+
name: labelName,
|
|
33
|
+
localVersion: labelMeta.version,
|
|
34
|
+
remoteVersion,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Check for new labels
|
|
39
|
+
for (const labelName of Object.keys(remoteVersions)) {
|
|
40
|
+
if (!metadata.labels[labelName]) {
|
|
41
|
+
missing.push(labelName);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Exit with error if outdated or missing
|
|
45
|
+
if (outdated.length > 0 || missing.length > 0) {
|
|
46
|
+
if (outdated.length > 0) {
|
|
47
|
+
console.error(`Outdated labels: ${outdated.map(l => l.name).join(', ')}`);
|
|
48
|
+
}
|
|
49
|
+
if (missing.length > 0) {
|
|
50
|
+
console.error(`Missing labels: ${missing.join(', ')}`);
|
|
51
|
+
}
|
|
52
|
+
console.error('Run "taggr pull --all" to update labels.');
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
// All good
|
|
56
|
+
process.exit(0);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error(`Error: ${error.message}`);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=ci.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci.js","sourceRoot":"","sources":["../../src/commands/ci.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAkB;IAChD,IAAI,CAAC;QACH,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,iBAAiB;QACjB,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEhB,gCAAgC;QAChC,MAAM,cAAc,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAEhD,mCAAmC;QACnC,MAAM,QAAQ,GAAyE,EAAE,CAAC;QAC1F,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,+BAA+B;QAC/B,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrE,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,wCAAwC;gBACxC,SAAS;YACX,CAAC;iBAAM,IAAI,SAAS,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;gBAC/C,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,SAAS;oBACf,YAAY,EAAE,SAAS,CAAC,OAAO;oBAC/B,aAAa;iBACd,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,oBAAoB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5E,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,mBAAmB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,WAAW;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAQA,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgG/F"}
|
package/dist/commands/pull.js
CHANGED
|
@@ -2,7 +2,8 @@ import chalk from 'chalk';
|
|
|
2
2
|
import ora from 'ora';
|
|
3
3
|
import { requireAuth } from '../utils/config.js';
|
|
4
4
|
import { initApi, getLabels, getLabelByName } from '../utils/api.js';
|
|
5
|
-
import { writeLabelFile, writeAllLabels
|
|
5
|
+
import { writeLabelFile, writeAllLabels } from '../utils/generator.js';
|
|
6
|
+
import { detectManualEdits } from '../utils/metadata.js';
|
|
6
7
|
export async function pullCommand(name, options) {
|
|
7
8
|
const spinner = ora('Connecting to Taggr...').start();
|
|
8
9
|
try {
|
|
@@ -16,13 +17,34 @@ export async function pullCommand(name, options) {
|
|
|
16
17
|
throw new Error('Invalid response from server: labels data not found');
|
|
17
18
|
}
|
|
18
19
|
const { labels, count } = labelsResponse;
|
|
19
|
-
if (count === 0) {
|
|
20
|
+
if (count === 0 || !labels || labels.length === 0) {
|
|
20
21
|
spinner.warn(chalk.yellow('No labels found.'));
|
|
21
22
|
console.log(chalk.dim('Create labels at https://taggr.dev'));
|
|
22
23
|
return;
|
|
23
24
|
}
|
|
24
|
-
|
|
25
|
-
const
|
|
25
|
+
// Filter out invalid labels
|
|
26
|
+
const validLabels = labels.filter(label => label && label.name && label.value !== undefined);
|
|
27
|
+
if (validLabels.length === 0) {
|
|
28
|
+
spinner.warn(chalk.yellow('No valid labels found.'));
|
|
29
|
+
console.log(chalk.dim('All labels are missing required properties (name, value).'));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Check for manual edits
|
|
33
|
+
spinner.text = 'Checking for manual edits...';
|
|
34
|
+
const editCheck = await detectManualEdits(validLabels);
|
|
35
|
+
if (editCheck.isEdited) {
|
|
36
|
+
spinner.warn(chalk.yellow('Manual edits detected'));
|
|
37
|
+
console.log();
|
|
38
|
+
console.log(chalk.yellow(`⚠ Warning: ${editCheck.reason || 'Labels may have been manually edited'}`));
|
|
39
|
+
console.log();
|
|
40
|
+
console.log(chalk.dim('Pulling will overwrite your manual changes.'));
|
|
41
|
+
console.log(chalk.dim('If you want to keep your changes, consider:'));
|
|
42
|
+
console.log(chalk.dim(' 1. Committing your changes to version control first'));
|
|
43
|
+
console.log(chalk.dim(' 2. Creating labels in the Taggr dashboard instead'));
|
|
44
|
+
console.log();
|
|
45
|
+
}
|
|
46
|
+
spinner.text = `Writing ${validLabels.length} label(s)...`;
|
|
47
|
+
const files = await writeAllLabels(validLabels, config.apiUrl);
|
|
26
48
|
spinner.succeed(chalk.green(`Pulled ${count} label(s) successfully!`));
|
|
27
49
|
console.log();
|
|
28
50
|
console.log(chalk.dim('Files created:'));
|
|
@@ -30,7 +52,7 @@ export async function pullCommand(name, options) {
|
|
|
30
52
|
console.log(chalk.dim(` ${file}`));
|
|
31
53
|
}
|
|
32
54
|
console.log();
|
|
33
|
-
printUsageInstructions(
|
|
55
|
+
printUsageInstructions(validLabels);
|
|
34
56
|
}
|
|
35
57
|
else if (name) {
|
|
36
58
|
// Pull single label
|
|
@@ -41,14 +63,10 @@ export async function pullCommand(name, options) {
|
|
|
41
63
|
}
|
|
42
64
|
const { label } = labelResponse;
|
|
43
65
|
spinner.text = 'Writing file...';
|
|
44
|
-
const filePath = await writeLabelFile(label);
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
throw new Error('Invalid response from server: labels data not found');
|
|
49
|
-
}
|
|
50
|
-
const { labels: allLabels } = allLabelsResponse;
|
|
51
|
-
await updateIndexFile(allLabels);
|
|
66
|
+
const filePath = await writeLabelFile(label, config.apiUrl);
|
|
67
|
+
// Note: writeLabelFile already merges the label with existing labels.json
|
|
68
|
+
// and updates the TypeScript definitions. We only need to update metadata
|
|
69
|
+
// for this single label, which is already done by writeLabelFile.
|
|
52
70
|
const labelName = label.name || 'label';
|
|
53
71
|
spinner.succeed(chalk.green(`Pulled "${labelName}" successfully!`));
|
|
54
72
|
console.log();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAQA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAqGnD"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getMetadata, detectManualEdits } from '../utils/metadata.js';
|
|
3
|
+
import { getOutputDir } from '../utils/generator.js';
|
|
4
|
+
import { requireAuth } from '../utils/config.js';
|
|
5
|
+
import { initApi, getLabels } from '../utils/api.js';
|
|
6
|
+
import fs from 'fs-extra';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
export async function statusCommand() {
|
|
9
|
+
try {
|
|
10
|
+
const metadata = await getMetadata();
|
|
11
|
+
if (!metadata) {
|
|
12
|
+
console.log(chalk.yellow('No sync metadata found'));
|
|
13
|
+
console.log();
|
|
14
|
+
console.log(chalk.dim('Run "taggr pull --all" to sync labels.'));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
console.log();
|
|
18
|
+
console.log(chalk.bold('Taggr Sync Status'));
|
|
19
|
+
console.log();
|
|
20
|
+
// Show sync info
|
|
21
|
+
const syncedDate = new Date(metadata.syncedAt);
|
|
22
|
+
console.log(chalk.dim(' Last synced: ') + chalk.white(syncedDate.toLocaleString()));
|
|
23
|
+
console.log(chalk.dim(' API URL: ') + chalk.white(metadata.apiUrl));
|
|
24
|
+
console.log();
|
|
25
|
+
// Count labels
|
|
26
|
+
const labelCount = Object.keys(metadata.labels).length;
|
|
27
|
+
console.log(chalk.dim(` Labels: ${chalk.white(labelCount.toString())}`));
|
|
28
|
+
console.log();
|
|
29
|
+
// Show label versions
|
|
30
|
+
if (labelCount > 0) {
|
|
31
|
+
console.log(chalk.bold('Label Versions:'));
|
|
32
|
+
console.log();
|
|
33
|
+
const labels = Object.entries(metadata.labels)
|
|
34
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
35
|
+
.slice(0, 10); // Show first 10
|
|
36
|
+
for (const [name, meta] of labels) {
|
|
37
|
+
const syncedDate = new Date(meta.syncedAt);
|
|
38
|
+
console.log(` ${chalk.white(name.padEnd(30))} ` +
|
|
39
|
+
`${chalk.dim('v' + meta.version)} ` +
|
|
40
|
+
`${chalk.dim('(' + syncedDate.toLocaleDateString() + ')')}`);
|
|
41
|
+
}
|
|
42
|
+
if (labelCount > 10) {
|
|
43
|
+
console.log();
|
|
44
|
+
console.log(chalk.dim(` ... and ${labelCount - 10} more`));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Check if files exist
|
|
48
|
+
console.log();
|
|
49
|
+
const outputDir = getOutputDir();
|
|
50
|
+
const labelsJsonPath = path.join(outputDir, 'labels.json');
|
|
51
|
+
const labelsDtsPath = path.join(outputDir, 'labels.d.ts');
|
|
52
|
+
const metadataPath = path.join(outputDir, '.taggr.json');
|
|
53
|
+
console.log(chalk.bold('Files:'));
|
|
54
|
+
console.log();
|
|
55
|
+
console.log(` ${await fs.pathExists(labelsJsonPath) ? chalk.green('✓') : chalk.red('✗')} ` +
|
|
56
|
+
chalk.white('labels.json'));
|
|
57
|
+
console.log(` ${await fs.pathExists(labelsDtsPath) ? chalk.green('✓') : chalk.red('✗')} ` +
|
|
58
|
+
chalk.white('labels.d.ts'));
|
|
59
|
+
console.log(` ${await fs.pathExists(metadataPath) ? chalk.green('✓') : chalk.red('✗')} ` +
|
|
60
|
+
chalk.white('.taggr.json'));
|
|
61
|
+
console.log();
|
|
62
|
+
// Check for manual edits
|
|
63
|
+
try {
|
|
64
|
+
const config = await requireAuth();
|
|
65
|
+
initApi(config);
|
|
66
|
+
const labelsResponse = await getLabels();
|
|
67
|
+
if (labelsResponse && labelsResponse.labels) {
|
|
68
|
+
const manualEdit = await detectManualEdits(labelsResponse.labels);
|
|
69
|
+
if (manualEdit.isEdited) {
|
|
70
|
+
console.log(chalk.bold('⚠ Integrity Check:'));
|
|
71
|
+
console.log();
|
|
72
|
+
console.log(chalk.yellow(` Warning: ${manualEdit.reason || 'Labels file may have been manually edited'}`));
|
|
73
|
+
console.log();
|
|
74
|
+
console.log(chalk.dim(' Manual edits will be overwritten on next "taggr pull --all"'));
|
|
75
|
+
console.log();
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.log(chalk.bold('Integrity Check:'));
|
|
79
|
+
console.log();
|
|
80
|
+
console.log(chalk.green(' ✓ Labels file integrity verified'));
|
|
81
|
+
console.log();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
// Silently fail if we can't check (e.g., not logged in)
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAOA,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiKvE"}
|