@quonfig/cli 0.0.49 → 0.0.50
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 +44 -44
- package/dist/commands/info.d.ts +1 -0
- package/dist/commands/info.js +28 -1
- package/dist/commands/pull.js +2 -2
- package/dist/migrate/local-write.js +11 -1
- package/dist/migrate/migration-report.d.ts +16 -5
- package/dist/migrate/migration-report.js +279 -9
- package/dist/migrate/push-to-cloud.js +6 -1
- package/dist/migrate/quonfig-target/report.d.ts +27 -3
- package/dist/migrate/quonfig-target/report.js +5 -2
- package/dist/migrate/quonfig-target/ruleset.js +8 -6
- package/dist/migrate/source.d.ts +27 -0
- package/dist/migrate/sources/launchdarkly/api.d.ts +22 -1
- package/dist/migrate/sources/launchdarkly/api.js +23 -1
- package/dist/migrate/sources/launchdarkly/translate.js +42 -2
- package/dist/migrate/sources/launchdarkly/types.d.ts +19 -0
- package/dist/migrate/sources/launchdarkly.js +75 -4
- package/dist/util/friction-log.d.ts +1 -0
- package/dist/util/friction-log.js +6 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/oclif.manifest.json +156 -156
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ $ npm install -g @quonfig/cli
|
|
|
17
17
|
$ qfg COMMAND
|
|
18
18
|
running command...
|
|
19
19
|
$ qfg (--version)
|
|
20
|
-
@quonfig/cli/0.0.
|
|
20
|
+
@quonfig/cli/0.0.50 linux-x64 node-v24.4.1
|
|
21
21
|
$ qfg --help [COMMAND]
|
|
22
22
|
USAGE
|
|
23
23
|
$ qfg COMMAND
|
|
@@ -195,7 +195,7 @@ EXAMPLES
|
|
|
195
195
|
$ qfg activity restore my.flag --yes
|
|
196
196
|
```
|
|
197
197
|
|
|
198
|
-
_See code: [src/commands/activity.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
198
|
+
_See code: [src/commands/activity.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/activity.ts)_
|
|
199
199
|
|
|
200
200
|
## `qfg activity deleted`
|
|
201
201
|
|
|
@@ -224,7 +224,7 @@ EXAMPLES
|
|
|
224
224
|
$ qfg activity deleted --json
|
|
225
225
|
```
|
|
226
226
|
|
|
227
|
-
_See code: [src/commands/activity/deleted.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
227
|
+
_See code: [src/commands/activity/deleted.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/activity/deleted.ts)_
|
|
228
228
|
|
|
229
229
|
## `qfg activity feed`
|
|
230
230
|
|
|
@@ -259,7 +259,7 @@ EXAMPLES
|
|
|
259
259
|
$ qfg activity feed --json
|
|
260
260
|
```
|
|
261
261
|
|
|
262
|
-
_See code: [src/commands/activity/feed.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
262
|
+
_See code: [src/commands/activity/feed.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/activity/feed.ts)_
|
|
263
263
|
|
|
264
264
|
## `qfg activity history [NAME]`
|
|
265
265
|
|
|
@@ -293,7 +293,7 @@ EXAMPLES
|
|
|
293
293
|
$ qfg activity history request.timeout --json
|
|
294
294
|
```
|
|
295
295
|
|
|
296
|
-
_See code: [src/commands/activity/history.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
296
|
+
_See code: [src/commands/activity/history.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/activity/history.ts)_
|
|
297
297
|
|
|
298
298
|
## `qfg activity restore [NAME]`
|
|
299
299
|
|
|
@@ -332,7 +332,7 @@ EXAMPLES
|
|
|
332
332
|
$ qfg activity restore request.timeout --type config --yes
|
|
333
333
|
```
|
|
334
334
|
|
|
335
|
-
_See code: [src/commands/activity/restore.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
335
|
+
_See code: [src/commands/activity/restore.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/activity/restore.ts)_
|
|
336
336
|
|
|
337
337
|
## `qfg audit-log [NAME]`
|
|
338
338
|
|
|
@@ -360,7 +360,7 @@ EXAMPLES
|
|
|
360
360
|
$ qfg audit-log my.flag
|
|
361
361
|
```
|
|
362
362
|
|
|
363
|
-
_See code: [src/commands/audit-log.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
363
|
+
_See code: [src/commands/audit-log.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/audit-log.ts)_
|
|
364
364
|
|
|
365
365
|
## `qfg config-schema`
|
|
366
366
|
|
|
@@ -389,7 +389,7 @@ EXAMPLES
|
|
|
389
389
|
$ qfg config-schema --json-schema # full JSON Schema document (copy into your editor)
|
|
390
390
|
```
|
|
391
391
|
|
|
392
|
-
_See code: [src/commands/config-schema.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
392
|
+
_See code: [src/commands/config-schema.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/config-schema.ts)_
|
|
393
393
|
|
|
394
394
|
## `qfg create NAME`
|
|
395
395
|
|
|
@@ -474,7 +474,7 @@ EXAMPLES
|
|
|
474
474
|
$ qfg set-rollout my.new.flag --environment production --true-percent 20
|
|
475
475
|
```
|
|
476
476
|
|
|
477
|
-
_See code: [src/commands/create.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
477
|
+
_See code: [src/commands/create.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/create.ts)_
|
|
478
478
|
|
|
479
479
|
## `qfg delete NAME`
|
|
480
480
|
|
|
@@ -520,7 +520,7 @@ EXAMPLES
|
|
|
520
520
|
$ qfg delete my.config --yes
|
|
521
521
|
```
|
|
522
522
|
|
|
523
|
-
_See code: [src/commands/delete.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
523
|
+
_See code: [src/commands/delete.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/delete.ts)_
|
|
524
524
|
|
|
525
525
|
## `qfg flag info [NAME]`
|
|
526
526
|
|
|
@@ -723,7 +723,7 @@ EXAMPLES
|
|
|
723
723
|
$ qfg generate --targets node-ts -o ./dist # combine with targets
|
|
724
724
|
```
|
|
725
725
|
|
|
726
|
-
_See code: [src/commands/generate.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
726
|
+
_See code: [src/commands/generate.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/generate.ts)_
|
|
727
727
|
|
|
728
728
|
## `qfg generate-new-hex-key`
|
|
729
729
|
|
|
@@ -746,7 +746,7 @@ EXAMPLES
|
|
|
746
746
|
$ qfg generate-new-hex-key
|
|
747
747
|
```
|
|
748
748
|
|
|
749
|
-
_See code: [src/commands/generate-new-hex-key.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
749
|
+
_See code: [src/commands/generate-new-hex-key.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/generate-new-hex-key.ts)_
|
|
750
750
|
|
|
751
751
|
## `qfg get [NAME]`
|
|
752
752
|
|
|
@@ -778,7 +778,7 @@ EXAMPLES
|
|
|
778
778
|
$ qfg get my.config.name --environment=production
|
|
779
779
|
```
|
|
780
780
|
|
|
781
|
-
_See code: [src/commands/get.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
781
|
+
_See code: [src/commands/get.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/get.ts)_
|
|
782
782
|
|
|
783
783
|
## `qfg history NAME`
|
|
784
784
|
|
|
@@ -804,7 +804,7 @@ EXAMPLES
|
|
|
804
804
|
$ qfg history my.flag
|
|
805
805
|
```
|
|
806
806
|
|
|
807
|
-
_See code: [src/commands/history.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
807
|
+
_See code: [src/commands/history.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/history.ts)_
|
|
808
808
|
|
|
809
809
|
## `qfg info [NAME]`
|
|
810
810
|
|
|
@@ -852,7 +852,7 @@ EXAMPLES
|
|
|
852
852
|
$ qfg info my.config.name --exclude-evaluations # skip 24h stats
|
|
853
853
|
```
|
|
854
854
|
|
|
855
|
-
_See code: [src/commands/info.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
855
|
+
_See code: [src/commands/info.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/info.ts)_
|
|
856
856
|
|
|
857
857
|
## `qfg init [DIRECTORY]`
|
|
858
858
|
|
|
@@ -892,7 +892,7 @@ EXAMPLES
|
|
|
892
892
|
$ qfg init --dry-run
|
|
893
893
|
```
|
|
894
894
|
|
|
895
|
-
_See code: [src/commands/init.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
895
|
+
_See code: [src/commands/init.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/init.ts)_
|
|
896
896
|
|
|
897
897
|
## `qfg interactive`
|
|
898
898
|
|
|
@@ -922,7 +922,7 @@ EXAMPLES
|
|
|
922
922
|
$ qfg
|
|
923
923
|
```
|
|
924
924
|
|
|
925
|
-
_See code: [src/commands/interactive.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
925
|
+
_See code: [src/commands/interactive.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/interactive.ts)_
|
|
926
926
|
|
|
927
927
|
## `qfg list`
|
|
928
928
|
|
|
@@ -962,7 +962,7 @@ EXAMPLES
|
|
|
962
962
|
$ qfg list --feature-flags
|
|
963
963
|
```
|
|
964
964
|
|
|
965
|
-
_See code: [src/commands/list.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
965
|
+
_See code: [src/commands/list.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/list.ts)_
|
|
966
966
|
|
|
967
967
|
## `qfg log`
|
|
968
968
|
|
|
@@ -987,7 +987,7 @@ EXAMPLES
|
|
|
987
987
|
$ qfg log --limit 5
|
|
988
988
|
```
|
|
989
989
|
|
|
990
|
-
_See code: [src/commands/log.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
990
|
+
_See code: [src/commands/log.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/log.ts)_
|
|
991
991
|
|
|
992
992
|
## `qfg log-level NAME`
|
|
993
993
|
|
|
@@ -1052,7 +1052,7 @@ EXAMPLES
|
|
|
1052
1052
|
$ qfg log-level log-level.my-app --target=Chatty --value=INFO --environment=production
|
|
1053
1053
|
```
|
|
1054
1054
|
|
|
1055
|
-
_See code: [src/commands/log-level.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1055
|
+
_See code: [src/commands/log-level.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/log-level.ts)_
|
|
1056
1056
|
|
|
1057
1057
|
## `qfg login`
|
|
1058
1058
|
|
|
@@ -1077,7 +1077,7 @@ EXAMPLES
|
|
|
1077
1077
|
$ qfg login --profile myprofile
|
|
1078
1078
|
```
|
|
1079
1079
|
|
|
1080
|
-
_See code: [src/commands/login.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1080
|
+
_See code: [src/commands/login.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/login.ts)_
|
|
1081
1081
|
|
|
1082
1082
|
## `qfg logout`
|
|
1083
1083
|
|
|
@@ -1100,7 +1100,7 @@ EXAMPLES
|
|
|
1100
1100
|
$ qfg logout
|
|
1101
1101
|
```
|
|
1102
1102
|
|
|
1103
|
-
_See code: [src/commands/logout.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1103
|
+
_See code: [src/commands/logout.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/logout.ts)_
|
|
1104
1104
|
|
|
1105
1105
|
## `qfg migrate`
|
|
1106
1106
|
|
|
@@ -1162,7 +1162,7 @@ EXAMPLES
|
|
|
1162
1162
|
$ qfg migrate --from launch --source-api-key $LAUNCH_API_KEY --dir ./quonfig-repo --staging
|
|
1163
1163
|
```
|
|
1164
1164
|
|
|
1165
|
-
_See code: [src/commands/migrate.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1165
|
+
_See code: [src/commands/migrate.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/migrate.ts)_
|
|
1166
1166
|
|
|
1167
1167
|
## `qfg migrate doctor`
|
|
1168
1168
|
|
|
@@ -1200,7 +1200,7 @@ EXAMPLES
|
|
|
1200
1200
|
$ qfg migrate doctor --json
|
|
1201
1201
|
```
|
|
1202
1202
|
|
|
1203
|
-
_See code: [src/commands/migrate/doctor.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1203
|
+
_See code: [src/commands/migrate/doctor.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/migrate/doctor.ts)_
|
|
1204
1204
|
|
|
1205
1205
|
## `qfg migrate my-code`
|
|
1206
1206
|
|
|
@@ -1232,7 +1232,7 @@ EXAMPLES
|
|
|
1232
1232
|
$ qfg migrate my-code --dry-run
|
|
1233
1233
|
```
|
|
1234
1234
|
|
|
1235
|
-
_See code: [src/commands/migrate/my-code.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1235
|
+
_See code: [src/commands/migrate/my-code.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/migrate/my-code.ts)_
|
|
1236
1236
|
|
|
1237
1237
|
## `qfg migrate status`
|
|
1238
1238
|
|
|
@@ -1263,7 +1263,7 @@ EXAMPLES
|
|
|
1263
1263
|
$ qfg migrate status --json
|
|
1264
1264
|
```
|
|
1265
1265
|
|
|
1266
|
-
_See code: [src/commands/migrate/status.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1266
|
+
_See code: [src/commands/migrate/status.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/migrate/status.ts)_
|
|
1267
1267
|
|
|
1268
1268
|
## `qfg override [NAME] [VALUE]`
|
|
1269
1269
|
|
|
@@ -1318,7 +1318,7 @@ EXAMPLES
|
|
|
1318
1318
|
$ qfg override my.flag true --env=staging
|
|
1319
1319
|
```
|
|
1320
1320
|
|
|
1321
|
-
_See code: [src/commands/override.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1321
|
+
_See code: [src/commands/override.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/override.ts)_
|
|
1322
1322
|
|
|
1323
1323
|
## `qfg pull`
|
|
1324
1324
|
|
|
@@ -1366,7 +1366,7 @@ EXAMPLES
|
|
|
1366
1366
|
$ qfg pull # uses QUONFIG_DIR env var
|
|
1367
1367
|
```
|
|
1368
1368
|
|
|
1369
|
-
_See code: [src/commands/pull.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1369
|
+
_See code: [src/commands/pull.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/pull.ts)_
|
|
1370
1370
|
|
|
1371
1371
|
## `qfg push`
|
|
1372
1372
|
|
|
@@ -1415,7 +1415,7 @@ EXAMPLES
|
|
|
1415
1415
|
$ qfg push --dir ./our-config --yes
|
|
1416
1416
|
```
|
|
1417
1417
|
|
|
1418
|
-
_See code: [src/commands/push.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1418
|
+
_See code: [src/commands/push.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/push.ts)_
|
|
1419
1419
|
|
|
1420
1420
|
## `qfg run [COMMAND]`
|
|
1421
1421
|
|
|
@@ -1466,7 +1466,7 @@ EXAMPLES
|
|
|
1466
1466
|
$ qfg run --env DATABASE_URL=db.url --preserve-env --environment=staging -- npm test
|
|
1467
1467
|
```
|
|
1468
1468
|
|
|
1469
|
-
_See code: [src/commands/run.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1469
|
+
_See code: [src/commands/run.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/run.ts)_
|
|
1470
1470
|
|
|
1471
1471
|
## `qfg schema NAME`
|
|
1472
1472
|
|
|
@@ -1504,7 +1504,7 @@ EXAMPLES
|
|
|
1504
1504
|
$ qfg schema my-schema --set-json-schema=@schemas/my-schema.json --protected
|
|
1505
1505
|
```
|
|
1506
1506
|
|
|
1507
|
-
_See code: [src/commands/schema.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1507
|
+
_See code: [src/commands/schema.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/schema.ts)_
|
|
1508
1508
|
|
|
1509
1509
|
## `qfg sdk-key`
|
|
1510
1510
|
|
|
@@ -1531,7 +1531,7 @@ EXAMPLES
|
|
|
1531
1531
|
$ qfg sdk-key revoke <key-id>
|
|
1532
1532
|
```
|
|
1533
1533
|
|
|
1534
|
-
_See code: [src/commands/sdk-key.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1534
|
+
_See code: [src/commands/sdk-key.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/sdk-key.ts)_
|
|
1535
1535
|
|
|
1536
1536
|
## `qfg sdk-key create`
|
|
1537
1537
|
|
|
@@ -1563,7 +1563,7 @@ EXAMPLES
|
|
|
1563
1563
|
$ qfg sdk-key create --environment staging --type browser
|
|
1564
1564
|
```
|
|
1565
1565
|
|
|
1566
|
-
_See code: [src/commands/sdk-key/create.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1566
|
+
_See code: [src/commands/sdk-key/create.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/sdk-key/create.ts)_
|
|
1567
1567
|
|
|
1568
1568
|
## `qfg sdk-key list`
|
|
1569
1569
|
|
|
@@ -1592,7 +1592,7 @@ EXAMPLES
|
|
|
1592
1592
|
$ qfg sdk-key list --environment production
|
|
1593
1593
|
```
|
|
1594
1594
|
|
|
1595
|
-
_See code: [src/commands/sdk-key/list.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1595
|
+
_See code: [src/commands/sdk-key/list.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/sdk-key/list.ts)_
|
|
1596
1596
|
|
|
1597
1597
|
## `qfg sdk-key revoke KEYID`
|
|
1598
1598
|
|
|
@@ -1619,7 +1619,7 @@ EXAMPLES
|
|
|
1619
1619
|
$ qfg sdk-key revoke a1b2c3d4-e5f6-7890-abcd-ef1234567890
|
|
1620
1620
|
```
|
|
1621
1621
|
|
|
1622
|
-
_See code: [src/commands/sdk-key/revoke.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1622
|
+
_See code: [src/commands/sdk-key/revoke.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/sdk-key/revoke.ts)_
|
|
1623
1623
|
|
|
1624
1624
|
## `qfg set-default [NAME]`
|
|
1625
1625
|
|
|
@@ -1690,7 +1690,7 @@ EXAMPLES
|
|
|
1690
1690
|
$ qfg pull && qfg config-schema
|
|
1691
1691
|
```
|
|
1692
1692
|
|
|
1693
|
-
_See code: [src/commands/set-default.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1693
|
+
_See code: [src/commands/set-default.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/set-default.ts)_
|
|
1694
1694
|
|
|
1695
1695
|
## `qfg set-rollout [NAME]`
|
|
1696
1696
|
|
|
@@ -1767,7 +1767,7 @@ EXAMPLES
|
|
|
1767
1767
|
$ qfg set-rollout my.variant.flag --environment production --weights "a:33,b:33,c:34" --hash-by user.id
|
|
1768
1768
|
```
|
|
1769
1769
|
|
|
1770
|
-
_See code: [src/commands/set-rollout.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1770
|
+
_See code: [src/commands/set-rollout.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/set-rollout.ts)_
|
|
1771
1771
|
|
|
1772
1772
|
## `qfg sync`
|
|
1773
1773
|
|
|
@@ -1799,7 +1799,7 @@ EXAMPLES
|
|
|
1799
1799
|
$ qfg sync --watch --dir ./our-config --interval 30
|
|
1800
1800
|
```
|
|
1801
1801
|
|
|
1802
|
-
_See code: [src/commands/sync.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1802
|
+
_See code: [src/commands/sync.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/sync.ts)_
|
|
1803
1803
|
|
|
1804
1804
|
## `qfg toggle [NAME]`
|
|
1805
1805
|
|
|
@@ -1901,7 +1901,7 @@ EXAMPLES
|
|
|
1901
1901
|
$ qfg verify --json
|
|
1902
1902
|
```
|
|
1903
1903
|
|
|
1904
|
-
_See code: [src/commands/verify.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1904
|
+
_See code: [src/commands/verify.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/verify.ts)_
|
|
1905
1905
|
|
|
1906
1906
|
## `qfg whoami`
|
|
1907
1907
|
|
|
@@ -1924,7 +1924,7 @@ EXAMPLES
|
|
|
1924
1924
|
$ qfg whoami
|
|
1925
1925
|
```
|
|
1926
1926
|
|
|
1927
|
-
_See code: [src/commands/whoami.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1927
|
+
_See code: [src/commands/whoami.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/whoami.ts)_
|
|
1928
1928
|
|
|
1929
1929
|
## `qfg workspace`
|
|
1930
1930
|
|
|
@@ -1947,7 +1947,7 @@ EXAMPLES
|
|
|
1947
1947
|
$ qfg workspace
|
|
1948
1948
|
```
|
|
1949
1949
|
|
|
1950
|
-
_See code: [src/commands/workspace.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1950
|
+
_See code: [src/commands/workspace.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/workspace.ts)_
|
|
1951
1951
|
|
|
1952
1952
|
## `qfg workspace bootstrap`
|
|
1953
1953
|
|
|
@@ -1980,7 +1980,7 @@ EXAMPLES
|
|
|
1980
1980
|
$ qfg workspace bootstrap --dir ./our-config --skip-validate
|
|
1981
1981
|
```
|
|
1982
1982
|
|
|
1983
|
-
_See code: [src/commands/workspace/bootstrap.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1983
|
+
_See code: [src/commands/workspace/bootstrap.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/workspace/bootstrap.ts)_
|
|
1984
1984
|
|
|
1985
1985
|
## `qfg workspace create SLUG`
|
|
1986
1986
|
|
|
@@ -2014,7 +2014,7 @@ EXAMPLES
|
|
|
2014
2014
|
$ qfg workspace create my-team --org 11111111-1111-1111-1111-111111111111
|
|
2015
2015
|
```
|
|
2016
2016
|
|
|
2017
|
-
_See code: [src/commands/workspace/create.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
2017
|
+
_See code: [src/commands/workspace/create.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/workspace/create.ts)_
|
|
2018
2018
|
|
|
2019
2019
|
## `qfg workspace switch [SLUG]`
|
|
2020
2020
|
|
|
@@ -2042,7 +2042,7 @@ EXAMPLES
|
|
|
2042
2042
|
$ qfg workspace switch acme/production
|
|
2043
2043
|
```
|
|
2044
2044
|
|
|
2045
|
-
_See code: [src/commands/workspace/switch.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
2045
|
+
_See code: [src/commands/workspace/switch.ts](https://github.com/quonfig/cli/blob/v0.0.50/src/commands/workspace/switch.ts)_
|
|
2046
2046
|
<!-- commandsstop -->
|
|
2047
2047
|
|
|
2048
2048
|
## Local Development
|
package/dist/commands/info.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export default class Info extends APICommand {
|
|
|
16
16
|
private fetchEvaluationStats;
|
|
17
17
|
private formatValue;
|
|
18
18
|
private hasNonTrivialCriteria;
|
|
19
|
+
private isSimpleScalarRuleValue;
|
|
19
20
|
private parseConfig;
|
|
20
21
|
private transformEvaluationStatsForJson;
|
|
21
22
|
private transformValueForJson;
|
package/dist/commands/info.js
CHANGED
|
@@ -304,6 +304,32 @@ Related commands:
|
|
|
304
304
|
return false;
|
|
305
305
|
return true;
|
|
306
306
|
}
|
|
307
|
+
// A rule value is a "simple scalar" if it carries a literal value that can be
|
|
308
|
+
// rendered inline next to "[override]". Rollouts ({type: 'weighted_values',
|
|
309
|
+
// ...}, or anything else where `value.value` is itself an object) cannot —
|
|
310
|
+
// String(obj) yields "[object Object]" (qfg-5j9i), and a percent split is
|
|
311
|
+
// never a one-token override anyway.
|
|
312
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
313
|
+
isSimpleScalarRuleValue(value) {
|
|
314
|
+
if (!value || typeof value !== 'object')
|
|
315
|
+
return false;
|
|
316
|
+
if (value.type === 'weighted_values' || Array.isArray(value.weightedValues))
|
|
317
|
+
return false;
|
|
318
|
+
// Old format: {type: 'string'|'bool'|'int'|'double'|'stringList'|'json', value: X}
|
|
319
|
+
if (typeof value.type === 'string' && value.value !== undefined) {
|
|
320
|
+
// A `json` payload may legitimately be an object — render it as JSON, not [object Object].
|
|
321
|
+
if (value.type === 'json')
|
|
322
|
+
return true;
|
|
323
|
+
return typeof value.value !== 'object' || Array.isArray(value.value);
|
|
324
|
+
}
|
|
325
|
+
// New format: {string: X} / {bool: X} / {int: X} / {double: X} / {stringList: [...]} / {json: ...}
|
|
326
|
+
return (value.string !== undefined ||
|
|
327
|
+
value.bool !== undefined ||
|
|
328
|
+
value.int !== undefined ||
|
|
329
|
+
value.double !== undefined ||
|
|
330
|
+
value.stringList !== undefined ||
|
|
331
|
+
value.json !== undefined);
|
|
332
|
+
}
|
|
307
333
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
308
334
|
parseConfig(config, environments, url) {
|
|
309
335
|
const contents = [];
|
|
@@ -354,11 +380,12 @@ Related commands:
|
|
|
354
380
|
// Has conditional rules - show [override] with the conditional value
|
|
355
381
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
356
382
|
const overrideRule = envConfig.rules.find((r) => this.hasNonTrivialCriteria(r));
|
|
357
|
-
if (overrideRule) {
|
|
383
|
+
if (overrideRule && this.isSimpleScalarRuleValue(overrideRule.value)) {
|
|
358
384
|
const overrideValue = this.formatValue(overrideRule.value, false);
|
|
359
385
|
displayValue = `[override] \`${overrideValue}\``;
|
|
360
386
|
}
|
|
361
387
|
else {
|
|
388
|
+
// Rollouts / weighted_values / anything we can't render inline → defer to the URL (qfg-5j9i).
|
|
362
389
|
displayValue = '[see rules]';
|
|
363
390
|
}
|
|
364
391
|
}
|
package/dist/commands/pull.js
CHANGED
|
@@ -101,8 +101,8 @@ CLI shortcuts (no JSON editing needed for simple cases):
|
|
|
101
101
|
// Plain `git pull` is fine with untracked files, and `git merge --ff-only`
|
|
102
102
|
// below will fail loudly on real conflicts (tracked modifications, or an
|
|
103
103
|
// incoming commit that would overwrite an untracked file). Pre-checking
|
|
104
|
-
//
|
|
105
|
-
//
|
|
104
|
+
// creates a self-trap whenever the customer leaves anything in the
|
|
105
|
+
// workspace dir that they haven't committed yet.
|
|
106
106
|
// Fetch
|
|
107
107
|
this.log('Fetching from remote...');
|
|
108
108
|
try {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
import { removeQfFromGitignore, writeImportState } from './import-state.js';
|
|
4
|
-
import { writeMigrationReport } from './migration-report.js';
|
|
4
|
+
import { deriveFollowUpFromConversionNotes, writeMigrationReport } from './migration-report.js';
|
|
5
5
|
import { detectDuplicateKeys } from './sources/launch/translate.js';
|
|
6
6
|
import { MIGRATOR_IDENTITY, stackCommits } from '../util/clone-and-stack-push.js';
|
|
7
7
|
import { runGit, spawnGit } from '../util/git-ops.js';
|
|
@@ -199,16 +199,21 @@ export const applyLocalMigration = async (opts) => {
|
|
|
199
199
|
const skippedConfigs = opts.source.getSkippedConfigs?.() ?? null;
|
|
200
200
|
const coercedSentinels = opts.source.getCoercedSentinels?.() ?? null;
|
|
201
201
|
const conversionNotes = opts.source.getConversionNotes?.() ?? null;
|
|
202
|
+
const environmentMap = opts.source.getEnvironmentMap?.() ?? null;
|
|
203
|
+
const maintainerMap = opts.source.getMaintainerMap?.() ?? null;
|
|
202
204
|
const duplicateResolutions = resolutionEntries.length > 0 ? { entries: resolutionEntries, total: resolutionEntries.length } : null;
|
|
203
205
|
const skippedTotal = (skippedConfigs?.total ?? 0) + resolutionEntries.reduce((sum, r) => sum + r.deleted.length, 0);
|
|
204
206
|
const counts = buildMigrationCounts(livePaths, opts.environments.length, skippedTotal);
|
|
205
207
|
const reportData = {
|
|
206
208
|
...opts.reportData,
|
|
207
209
|
counts,
|
|
210
|
+
...(environmentMap && environmentMap.length > 0 ? { environmentMap } : {}),
|
|
211
|
+
followUp: deriveFollowUpFromConversionNotes(opts.reportData.followUp, conversionNotes ?? undefined),
|
|
208
212
|
...(coercedSentinels ? { coercedSentinels } : {}),
|
|
209
213
|
...(conversionNotes && conversionNotes.length > 0 ? { conversionNotes } : {}),
|
|
210
214
|
...(droppedOverrides ? { droppedOverrides } : {}),
|
|
211
215
|
...(duplicateResolutions ? { duplicateResolutions } : {}),
|
|
216
|
+
...(maintainerMap && Object.keys(maintainerMap).length > 0 ? { maintainerMap } : {}),
|
|
212
217
|
...(skippedConfigs ? { skippedConfigs } : {}),
|
|
213
218
|
};
|
|
214
219
|
writeMigrationReport(opts.localDir, reportData);
|
|
@@ -331,6 +336,8 @@ export const buildAuditFinalCommit = (opts) => ({
|
|
|
331
336
|
const skippedConfigs = opts.source.getSkippedConfigs?.() ?? null;
|
|
332
337
|
const coercedSentinels = opts.source.getCoercedSentinels?.() ?? null;
|
|
333
338
|
const conversionNotes = opts.source.getConversionNotes?.() ?? null;
|
|
339
|
+
const environmentMap = opts.source.getEnvironmentMap?.() ?? null;
|
|
340
|
+
const maintainerMap = opts.source.getMaintainerMap?.() ?? null;
|
|
334
341
|
const duplicateResolutions = resolutionEntries.length > 0 ? { entries: resolutionEntries, total: resolutionEntries.length } : null;
|
|
335
342
|
removeQfFromGitignore(dir);
|
|
336
343
|
writeImportState(dir, opts.importState);
|
|
@@ -339,10 +346,13 @@ export const buildAuditFinalCommit = (opts) => ({
|
|
|
339
346
|
const reportData = {
|
|
340
347
|
...opts.reportData,
|
|
341
348
|
counts,
|
|
349
|
+
...(environmentMap && environmentMap.length > 0 ? { environmentMap } : {}),
|
|
350
|
+
followUp: deriveFollowUpFromConversionNotes(opts.reportData.followUp, conversionNotes ?? undefined),
|
|
342
351
|
...(coercedSentinels ? { coercedSentinels } : {}),
|
|
343
352
|
...(conversionNotes && conversionNotes.length > 0 ? { conversionNotes } : {}),
|
|
344
353
|
...(droppedOverrides ? { droppedOverrides } : {}),
|
|
345
354
|
...(duplicateResolutions ? { duplicateResolutions } : {}),
|
|
355
|
+
...(maintainerMap && Object.keys(maintainerMap).length > 0 ? { maintainerMap } : {}),
|
|
346
356
|
...(skippedConfigs ? { skippedConfigs } : {}),
|
|
347
357
|
};
|
|
348
358
|
writeMigrationReport(dir, reportData);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { IdentifierMap } from './identifier-map.js';
|
|
2
2
|
import type { ConversionNote } from './quonfig-target/report.js';
|
|
3
|
-
import type { CoercedSentinelSummary, DroppedOverrideSummary, DuplicateResolutionSummary, SkippedConfigSummary } from './source.js';
|
|
3
|
+
import type { CoercedSentinelSummary, DroppedOverrideSummary, DuplicateResolutionSummary, EnvironmentMapEntry, SkippedConfigSummary } from './source.js';
|
|
4
|
+
export type { EnvironmentMapEntry } from './source.js';
|
|
4
5
|
export interface MigrationReportCounts {
|
|
5
6
|
configsMigrated: number;
|
|
6
7
|
environmentsMapped: number;
|
|
@@ -23,10 +24,6 @@ export interface UnsupportedFeature {
|
|
|
23
24
|
feature: string;
|
|
24
25
|
note?: string;
|
|
25
26
|
}
|
|
26
|
-
export interface EnvironmentMapEntry {
|
|
27
|
-
quonfigName: string;
|
|
28
|
-
sourceName: string;
|
|
29
|
-
}
|
|
30
27
|
export interface FollowUpChecklist {
|
|
31
28
|
mustFixBeforeCutover: string[];
|
|
32
29
|
reviewPostCutover: string[];
|
|
@@ -65,6 +62,14 @@ export interface MigrationReportData {
|
|
|
65
62
|
followUp: FollowUpChecklist;
|
|
66
63
|
identifierMap: IdentifierMap;
|
|
67
64
|
lossyMappings: LossyMapping[];
|
|
65
|
+
/**
|
|
66
|
+
* qfg-l8uz: source maintainerId → email pairs. Rendered as a sub-table on
|
|
67
|
+
* `## Identifier map` so the reader sees who owned each dropped-maintainer
|
|
68
|
+
* note, and consumed by the renderer to decorate the dropped-maintainer
|
|
69
|
+
* rollup with emails. Optional/undefined when the source has no member
|
|
70
|
+
* lookup (or it failed) — both the table and the decoration just no-op.
|
|
71
|
+
*/
|
|
72
|
+
maintainerMap?: null | Record<string, string>;
|
|
68
73
|
/**
|
|
69
74
|
* Configs soft-skipped by translate() because the source data was invalid
|
|
70
75
|
* (e.g. variant/valueType mismatch). Null when nothing was skipped.
|
|
@@ -73,6 +78,12 @@ export interface MigrationReportData {
|
|
|
73
78
|
source: string;
|
|
74
79
|
unsupportedFeatures: UnsupportedFeature[];
|
|
75
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Folds conversion notes into a followUp checklist. De-duplicates by hint
|
|
83
|
+
* string so a flag with two dropped prerequisites doesn't produce two
|
|
84
|
+
* identical checkbox lines.
|
|
85
|
+
*/
|
|
86
|
+
export declare const deriveFollowUpFromConversionNotes: (base: FollowUpChecklist, notes: ConversionNote[] | undefined) => FollowUpChecklist;
|
|
76
87
|
export declare const buildMigrationReport: (data: MigrationReportData) => string;
|
|
77
88
|
export declare const migrationReportPath: (outputDir: string) => string;
|
|
78
89
|
export declare const writeMigrationReport: (outputDir: string, data: MigrationReportData) => string;
|