@quonfig/cli 0.0.50 → 0.0.51
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 +50 -48
- package/dist/commands/generate.js +21 -5
- package/dist/commands/migrate.d.ts +1 -1
- package/dist/commands/migrate.js +16 -5
- package/dist/init/templates.js +59 -12
- package/dist/migrate/migration-report.js +72 -11
- package/dist/migrate/quonfig-target/report.d.ts +18 -1
- package/dist/migrate/sources/flagsmith/api.d.ts +115 -0
- package/dist/migrate/sources/flagsmith/api.js +402 -0
- package/dist/migrate/sources/flagsmith/translate.d.ts +72 -0
- package/dist/migrate/sources/flagsmith/translate.js +657 -0
- package/dist/migrate/sources/flagsmith/types.d.ts +282 -0
- package/dist/migrate/sources/flagsmith/types.js +18 -0
- package/dist/migrate/sources/flagsmith.d.ts +62 -0
- package/dist/migrate/sources/flagsmith.js +380 -23
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/oclif.manifest.json +3 -5
- package/package.json +2 -2
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.51 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.51/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.51/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.51/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.51/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.51/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.51/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.51/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.51/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.51/src/commands/delete.ts)_
|
|
524
524
|
|
|
525
525
|
## `qfg flag info [NAME]`
|
|
526
526
|
|
|
@@ -665,8 +665,9 @@ FLAGS
|
|
|
665
665
|
-o, --output-directory=<value> Override the output directory for generated files
|
|
666
666
|
-w, --workspace=<value> Workspace slug or UUID for the remote-fetch path (defaults to QUONFIG_WORKSPACE env
|
|
667
667
|
var or active profile). Only used when --dir is omitted.
|
|
668
|
-
--dir=<value> Path to local QUONFIG_DIR (defaults to QUONFIG_DIR env var). When omitted,
|
|
669
|
-
|
|
668
|
+
--dir=<value> Path to local QUONFIG_DIR (defaults to QUONFIG_DIR env var). When omitted,
|
|
669
|
+
auto-detects a quonfig.json in the current directory; if none, fetches the workspace
|
|
670
|
+
from the server.
|
|
670
671
|
--targets=<value> [default: react-ts] Determines for language/framework to generate code for (node-ts,
|
|
671
672
|
react-ts)
|
|
672
673
|
|
|
@@ -723,7 +724,7 @@ EXAMPLES
|
|
|
723
724
|
$ qfg generate --targets node-ts -o ./dist # combine with targets
|
|
724
725
|
```
|
|
725
726
|
|
|
726
|
-
_See code: [src/commands/generate.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
727
|
+
_See code: [src/commands/generate.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/generate.ts)_
|
|
727
728
|
|
|
728
729
|
## `qfg generate-new-hex-key`
|
|
729
730
|
|
|
@@ -746,7 +747,7 @@ EXAMPLES
|
|
|
746
747
|
$ qfg generate-new-hex-key
|
|
747
748
|
```
|
|
748
749
|
|
|
749
|
-
_See code: [src/commands/generate-new-hex-key.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
750
|
+
_See code: [src/commands/generate-new-hex-key.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/generate-new-hex-key.ts)_
|
|
750
751
|
|
|
751
752
|
## `qfg get [NAME]`
|
|
752
753
|
|
|
@@ -778,7 +779,7 @@ EXAMPLES
|
|
|
778
779
|
$ qfg get my.config.name --environment=production
|
|
779
780
|
```
|
|
780
781
|
|
|
781
|
-
_See code: [src/commands/get.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
782
|
+
_See code: [src/commands/get.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/get.ts)_
|
|
782
783
|
|
|
783
784
|
## `qfg history NAME`
|
|
784
785
|
|
|
@@ -804,7 +805,7 @@ EXAMPLES
|
|
|
804
805
|
$ qfg history my.flag
|
|
805
806
|
```
|
|
806
807
|
|
|
807
|
-
_See code: [src/commands/history.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
808
|
+
_See code: [src/commands/history.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/history.ts)_
|
|
808
809
|
|
|
809
810
|
## `qfg info [NAME]`
|
|
810
811
|
|
|
@@ -852,7 +853,7 @@ EXAMPLES
|
|
|
852
853
|
$ qfg info my.config.name --exclude-evaluations # skip 24h stats
|
|
853
854
|
```
|
|
854
855
|
|
|
855
|
-
_See code: [src/commands/info.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
856
|
+
_See code: [src/commands/info.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/info.ts)_
|
|
856
857
|
|
|
857
858
|
## `qfg init [DIRECTORY]`
|
|
858
859
|
|
|
@@ -892,7 +893,7 @@ EXAMPLES
|
|
|
892
893
|
$ qfg init --dry-run
|
|
893
894
|
```
|
|
894
895
|
|
|
895
|
-
_See code: [src/commands/init.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
896
|
+
_See code: [src/commands/init.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/init.ts)_
|
|
896
897
|
|
|
897
898
|
## `qfg interactive`
|
|
898
899
|
|
|
@@ -922,7 +923,7 @@ EXAMPLES
|
|
|
922
923
|
$ qfg
|
|
923
924
|
```
|
|
924
925
|
|
|
925
|
-
_See code: [src/commands/interactive.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
926
|
+
_See code: [src/commands/interactive.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/interactive.ts)_
|
|
926
927
|
|
|
927
928
|
## `qfg list`
|
|
928
929
|
|
|
@@ -962,7 +963,7 @@ EXAMPLES
|
|
|
962
963
|
$ qfg list --feature-flags
|
|
963
964
|
```
|
|
964
965
|
|
|
965
|
-
_See code: [src/commands/list.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
966
|
+
_See code: [src/commands/list.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/list.ts)_
|
|
966
967
|
|
|
967
968
|
## `qfg log`
|
|
968
969
|
|
|
@@ -987,7 +988,7 @@ EXAMPLES
|
|
|
987
988
|
$ qfg log --limit 5
|
|
988
989
|
```
|
|
989
990
|
|
|
990
|
-
_See code: [src/commands/log.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
991
|
+
_See code: [src/commands/log.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/log.ts)_
|
|
991
992
|
|
|
992
993
|
## `qfg log-level NAME`
|
|
993
994
|
|
|
@@ -1052,7 +1053,7 @@ EXAMPLES
|
|
|
1052
1053
|
$ qfg log-level log-level.my-app --target=Chatty --value=INFO --environment=production
|
|
1053
1054
|
```
|
|
1054
1055
|
|
|
1055
|
-
_See code: [src/commands/log-level.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1056
|
+
_See code: [src/commands/log-level.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/log-level.ts)_
|
|
1056
1057
|
|
|
1057
1058
|
## `qfg login`
|
|
1058
1059
|
|
|
@@ -1077,7 +1078,7 @@ EXAMPLES
|
|
|
1077
1078
|
$ qfg login --profile myprofile
|
|
1078
1079
|
```
|
|
1079
1080
|
|
|
1080
|
-
_See code: [src/commands/login.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1081
|
+
_See code: [src/commands/login.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/login.ts)_
|
|
1081
1082
|
|
|
1082
1083
|
## `qfg logout`
|
|
1083
1084
|
|
|
@@ -1100,7 +1101,7 @@ EXAMPLES
|
|
|
1100
1101
|
$ qfg logout
|
|
1101
1102
|
```
|
|
1102
1103
|
|
|
1103
|
-
_See code: [src/commands/logout.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1104
|
+
_See code: [src/commands/logout.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/logout.ts)_
|
|
1104
1105
|
|
|
1105
1106
|
## `qfg migrate`
|
|
1106
1107
|
|
|
@@ -1123,8 +1124,9 @@ FLAGS
|
|
|
1123
1124
|
--full-summary Reify the full source-side audit log into per-change git commits (author = original user,
|
|
1124
1125
|
date = original timestamp, message = change summary). Only valid on first-run imports — pass
|
|
1125
1126
|
--reset to re-import everything from scratch with this flag.
|
|
1126
|
-
--project=<value>
|
|
1127
|
-
LAUNCHDARKLY_PROJECT_KEY).
|
|
1127
|
+
--project=<value> Source-system project identifier. For --from launchdarkly this is the project KEY (default:
|
|
1128
|
+
"default"; env: LAUNCHDARKLY_PROJECT_KEY). For --from flagsmith this is the numeric project
|
|
1129
|
+
ID (env: FLAGSMITH_PROJECT_ID). Ignored by --from launch.
|
|
1128
1130
|
--push After migrating to a local dir, also push to the given --workspace on Quonfig cloud
|
|
1129
1131
|
--recent=<value> Import only the last N changes (useful for tire-kicking)
|
|
1130
1132
|
--reset Ignore the delta cursor and re-import everything from scratch
|
|
@@ -1162,7 +1164,7 @@ EXAMPLES
|
|
|
1162
1164
|
$ qfg migrate --from launch --source-api-key $LAUNCH_API_KEY --dir ./quonfig-repo --staging
|
|
1163
1165
|
```
|
|
1164
1166
|
|
|
1165
|
-
_See code: [src/commands/migrate.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1167
|
+
_See code: [src/commands/migrate.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/migrate.ts)_
|
|
1166
1168
|
|
|
1167
1169
|
## `qfg migrate doctor`
|
|
1168
1170
|
|
|
@@ -1200,7 +1202,7 @@ EXAMPLES
|
|
|
1200
1202
|
$ qfg migrate doctor --json
|
|
1201
1203
|
```
|
|
1202
1204
|
|
|
1203
|
-
_See code: [src/commands/migrate/doctor.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1205
|
+
_See code: [src/commands/migrate/doctor.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/migrate/doctor.ts)_
|
|
1204
1206
|
|
|
1205
1207
|
## `qfg migrate my-code`
|
|
1206
1208
|
|
|
@@ -1232,7 +1234,7 @@ EXAMPLES
|
|
|
1232
1234
|
$ qfg migrate my-code --dry-run
|
|
1233
1235
|
```
|
|
1234
1236
|
|
|
1235
|
-
_See code: [src/commands/migrate/my-code.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1237
|
+
_See code: [src/commands/migrate/my-code.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/migrate/my-code.ts)_
|
|
1236
1238
|
|
|
1237
1239
|
## `qfg migrate status`
|
|
1238
1240
|
|
|
@@ -1263,7 +1265,7 @@ EXAMPLES
|
|
|
1263
1265
|
$ qfg migrate status --json
|
|
1264
1266
|
```
|
|
1265
1267
|
|
|
1266
|
-
_See code: [src/commands/migrate/status.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1268
|
+
_See code: [src/commands/migrate/status.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/migrate/status.ts)_
|
|
1267
1269
|
|
|
1268
1270
|
## `qfg override [NAME] [VALUE]`
|
|
1269
1271
|
|
|
@@ -1318,7 +1320,7 @@ EXAMPLES
|
|
|
1318
1320
|
$ qfg override my.flag true --env=staging
|
|
1319
1321
|
```
|
|
1320
1322
|
|
|
1321
|
-
_See code: [src/commands/override.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1323
|
+
_See code: [src/commands/override.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/override.ts)_
|
|
1322
1324
|
|
|
1323
1325
|
## `qfg pull`
|
|
1324
1326
|
|
|
@@ -1366,7 +1368,7 @@ EXAMPLES
|
|
|
1366
1368
|
$ qfg pull # uses QUONFIG_DIR env var
|
|
1367
1369
|
```
|
|
1368
1370
|
|
|
1369
|
-
_See code: [src/commands/pull.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1371
|
+
_See code: [src/commands/pull.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/pull.ts)_
|
|
1370
1372
|
|
|
1371
1373
|
## `qfg push`
|
|
1372
1374
|
|
|
@@ -1415,7 +1417,7 @@ EXAMPLES
|
|
|
1415
1417
|
$ qfg push --dir ./our-config --yes
|
|
1416
1418
|
```
|
|
1417
1419
|
|
|
1418
|
-
_See code: [src/commands/push.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1420
|
+
_See code: [src/commands/push.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/push.ts)_
|
|
1419
1421
|
|
|
1420
1422
|
## `qfg run [COMMAND]`
|
|
1421
1423
|
|
|
@@ -1466,7 +1468,7 @@ EXAMPLES
|
|
|
1466
1468
|
$ qfg run --env DATABASE_URL=db.url --preserve-env --environment=staging -- npm test
|
|
1467
1469
|
```
|
|
1468
1470
|
|
|
1469
|
-
_See code: [src/commands/run.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1471
|
+
_See code: [src/commands/run.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/run.ts)_
|
|
1470
1472
|
|
|
1471
1473
|
## `qfg schema NAME`
|
|
1472
1474
|
|
|
@@ -1504,7 +1506,7 @@ EXAMPLES
|
|
|
1504
1506
|
$ qfg schema my-schema --set-json-schema=@schemas/my-schema.json --protected
|
|
1505
1507
|
```
|
|
1506
1508
|
|
|
1507
|
-
_See code: [src/commands/schema.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1509
|
+
_See code: [src/commands/schema.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/schema.ts)_
|
|
1508
1510
|
|
|
1509
1511
|
## `qfg sdk-key`
|
|
1510
1512
|
|
|
@@ -1531,7 +1533,7 @@ EXAMPLES
|
|
|
1531
1533
|
$ qfg sdk-key revoke <key-id>
|
|
1532
1534
|
```
|
|
1533
1535
|
|
|
1534
|
-
_See code: [src/commands/sdk-key.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1536
|
+
_See code: [src/commands/sdk-key.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/sdk-key.ts)_
|
|
1535
1537
|
|
|
1536
1538
|
## `qfg sdk-key create`
|
|
1537
1539
|
|
|
@@ -1563,7 +1565,7 @@ EXAMPLES
|
|
|
1563
1565
|
$ qfg sdk-key create --environment staging --type browser
|
|
1564
1566
|
```
|
|
1565
1567
|
|
|
1566
|
-
_See code: [src/commands/sdk-key/create.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1568
|
+
_See code: [src/commands/sdk-key/create.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/sdk-key/create.ts)_
|
|
1567
1569
|
|
|
1568
1570
|
## `qfg sdk-key list`
|
|
1569
1571
|
|
|
@@ -1592,7 +1594,7 @@ EXAMPLES
|
|
|
1592
1594
|
$ qfg sdk-key list --environment production
|
|
1593
1595
|
```
|
|
1594
1596
|
|
|
1595
|
-
_See code: [src/commands/sdk-key/list.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1597
|
+
_See code: [src/commands/sdk-key/list.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/sdk-key/list.ts)_
|
|
1596
1598
|
|
|
1597
1599
|
## `qfg sdk-key revoke KEYID`
|
|
1598
1600
|
|
|
@@ -1619,7 +1621,7 @@ EXAMPLES
|
|
|
1619
1621
|
$ qfg sdk-key revoke a1b2c3d4-e5f6-7890-abcd-ef1234567890
|
|
1620
1622
|
```
|
|
1621
1623
|
|
|
1622
|
-
_See code: [src/commands/sdk-key/revoke.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1624
|
+
_See code: [src/commands/sdk-key/revoke.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/sdk-key/revoke.ts)_
|
|
1623
1625
|
|
|
1624
1626
|
## `qfg set-default [NAME]`
|
|
1625
1627
|
|
|
@@ -1690,7 +1692,7 @@ EXAMPLES
|
|
|
1690
1692
|
$ qfg pull && qfg config-schema
|
|
1691
1693
|
```
|
|
1692
1694
|
|
|
1693
|
-
_See code: [src/commands/set-default.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1695
|
+
_See code: [src/commands/set-default.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/set-default.ts)_
|
|
1694
1696
|
|
|
1695
1697
|
## `qfg set-rollout [NAME]`
|
|
1696
1698
|
|
|
@@ -1767,7 +1769,7 @@ EXAMPLES
|
|
|
1767
1769
|
$ qfg set-rollout my.variant.flag --environment production --weights "a:33,b:33,c:34" --hash-by user.id
|
|
1768
1770
|
```
|
|
1769
1771
|
|
|
1770
|
-
_See code: [src/commands/set-rollout.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1772
|
+
_See code: [src/commands/set-rollout.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/set-rollout.ts)_
|
|
1771
1773
|
|
|
1772
1774
|
## `qfg sync`
|
|
1773
1775
|
|
|
@@ -1799,7 +1801,7 @@ EXAMPLES
|
|
|
1799
1801
|
$ qfg sync --watch --dir ./our-config --interval 30
|
|
1800
1802
|
```
|
|
1801
1803
|
|
|
1802
|
-
_See code: [src/commands/sync.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1804
|
+
_See code: [src/commands/sync.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/sync.ts)_
|
|
1803
1805
|
|
|
1804
1806
|
## `qfg toggle [NAME]`
|
|
1805
1807
|
|
|
@@ -1901,7 +1903,7 @@ EXAMPLES
|
|
|
1901
1903
|
$ qfg verify --json
|
|
1902
1904
|
```
|
|
1903
1905
|
|
|
1904
|
-
_See code: [src/commands/verify.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1906
|
+
_See code: [src/commands/verify.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/verify.ts)_
|
|
1905
1907
|
|
|
1906
1908
|
## `qfg whoami`
|
|
1907
1909
|
|
|
@@ -1924,7 +1926,7 @@ EXAMPLES
|
|
|
1924
1926
|
$ qfg whoami
|
|
1925
1927
|
```
|
|
1926
1928
|
|
|
1927
|
-
_See code: [src/commands/whoami.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1929
|
+
_See code: [src/commands/whoami.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/whoami.ts)_
|
|
1928
1930
|
|
|
1929
1931
|
## `qfg workspace`
|
|
1930
1932
|
|
|
@@ -1947,7 +1949,7 @@ EXAMPLES
|
|
|
1947
1949
|
$ qfg workspace
|
|
1948
1950
|
```
|
|
1949
1951
|
|
|
1950
|
-
_See code: [src/commands/workspace.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1952
|
+
_See code: [src/commands/workspace.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/workspace.ts)_
|
|
1951
1953
|
|
|
1952
1954
|
## `qfg workspace bootstrap`
|
|
1953
1955
|
|
|
@@ -1980,7 +1982,7 @@ EXAMPLES
|
|
|
1980
1982
|
$ qfg workspace bootstrap --dir ./our-config --skip-validate
|
|
1981
1983
|
```
|
|
1982
1984
|
|
|
1983
|
-
_See code: [src/commands/workspace/bootstrap.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
1985
|
+
_See code: [src/commands/workspace/bootstrap.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/workspace/bootstrap.ts)_
|
|
1984
1986
|
|
|
1985
1987
|
## `qfg workspace create SLUG`
|
|
1986
1988
|
|
|
@@ -2014,7 +2016,7 @@ EXAMPLES
|
|
|
2014
2016
|
$ qfg workspace create my-team --org 11111111-1111-1111-1111-111111111111
|
|
2015
2017
|
```
|
|
2016
2018
|
|
|
2017
|
-
_See code: [src/commands/workspace/create.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
2019
|
+
_See code: [src/commands/workspace/create.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/workspace/create.ts)_
|
|
2018
2020
|
|
|
2019
2021
|
## `qfg workspace switch [SLUG]`
|
|
2020
2022
|
|
|
@@ -2042,7 +2044,7 @@ EXAMPLES
|
|
|
2042
2044
|
$ qfg workspace switch acme/production
|
|
2043
2045
|
```
|
|
2044
2046
|
|
|
2045
|
-
_See code: [src/commands/workspace/switch.ts](https://github.com/quonfig/cli/blob/v0.0.
|
|
2047
|
+
_See code: [src/commands/workspace/switch.ts](https://github.com/quonfig/cli/blob/v0.0.51/src/commands/workspace/switch.ts)_
|
|
2046
2048
|
<!-- commandsstop -->
|
|
2047
2049
|
|
|
2048
2050
|
## Local Development
|
|
@@ -9,6 +9,7 @@ import { LocalConfigReader } from '../codegen/local-config-reader.js';
|
|
|
9
9
|
import { SupportedLanguage } from '../codegen/types.js';
|
|
10
10
|
import { BaseCommand } from '../index.js';
|
|
11
11
|
import { createFileManager } from '../util/file-manager.js';
|
|
12
|
+
import { resolveWorkspaceDir } from '../util/resolve-workspace-dir.js';
|
|
12
13
|
// base types
|
|
13
14
|
const nodeOrReactLanguageSpecificSchema = z.object({
|
|
14
15
|
clientFileName: z.string().optional(),
|
|
@@ -110,7 +111,7 @@ Example quonfig.config.json:
|
|
|
110
111
|
];
|
|
111
112
|
static flags = {
|
|
112
113
|
dir: Flags.string({
|
|
113
|
-
description: 'Path to local QUONFIG_DIR (defaults to QUONFIG_DIR env var). When omitted, fetches the workspace from the server
|
|
114
|
+
description: 'Path to local QUONFIG_DIR (defaults to QUONFIG_DIR env var). When omitted, auto-detects a quonfig.json in the current directory; if none, fetches the workspace from the server.',
|
|
114
115
|
env: 'QUONFIG_DIR',
|
|
115
116
|
}),
|
|
116
117
|
'output-directory': Flags.string({
|
|
@@ -132,12 +133,27 @@ Example quonfig.config.json:
|
|
|
132
133
|
this.verboseLog('=== GENERATE COMMAND START ===');
|
|
133
134
|
let snapshot;
|
|
134
135
|
try {
|
|
135
|
-
//
|
|
136
|
-
//
|
|
137
|
-
//
|
|
136
|
+
// Resolution order (qfg-local-codegen):
|
|
137
|
+
// 1. --dir / QUONFIG_DIR (explicit local checkout)
|
|
138
|
+
// 2. Walk up from cwd looking for quonfig.json (no-account/local-only
|
|
139
|
+
// path — same resolver `qfg push` / `qfg pull` use)
|
|
140
|
+
// 3. Server snapshot clone (codegen-only callers without a checkout)
|
|
141
|
+
// --workspace is only meaningful for the server-snapshot path; if the
|
|
142
|
+
// user passed it explicitly, skip the cwd walk and go straight to fetch.
|
|
138
143
|
let dir = flags.dir;
|
|
144
|
+
if (!dir && !flags.workspace) {
|
|
145
|
+
const resolved = resolveWorkspaceDir({
|
|
146
|
+
cwd: process.cwd(),
|
|
147
|
+
envDir: undefined, // QUONFIG_DIR is already merged into flags.dir by oclif
|
|
148
|
+
flagDir: undefined,
|
|
149
|
+
});
|
|
150
|
+
if (resolved.kind === 'ok') {
|
|
151
|
+
dir = resolved.dir;
|
|
152
|
+
console.log(`Using local workspace at ${dir} (auto-detected quonfig.json).`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
139
155
|
if (!dir) {
|
|
140
|
-
this.verboseLog('No
|
|
156
|
+
this.verboseLog('No local workspace found; fetching workspace snapshot from server...');
|
|
141
157
|
snapshot = await fetchWorkspaceSnapshot(this, { workspace: flags.workspace });
|
|
142
158
|
dir = snapshot.dir;
|
|
143
159
|
}
|
|
@@ -9,7 +9,7 @@ export default class Migrate extends BaseCommand {
|
|
|
9
9
|
'dry-run': import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
10
10
|
from: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
11
|
'full-summary': import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
12
|
-
project: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
|
+
project: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
13
13
|
push: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
14
14
|
recent: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
15
15
|
reset: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
package/dist/commands/migrate.js
CHANGED
|
@@ -10,6 +10,8 @@ import { MigratorVerifyError, pushMigrationToCloud } from '../migrate/push-to-cl
|
|
|
10
10
|
import { UnknownSourceError, getSource } from '../migrate/registry.js';
|
|
11
11
|
import { NotYetImplementedError, } from '../migrate/source.js';
|
|
12
12
|
import { missingSourceApiKeyMessage, resolveSourceApiKey } from '../migrate/source-api-key.js';
|
|
13
|
+
import { applyFlagsmithBaseUrl } from '../migrate/sources/flagsmith/api.js';
|
|
14
|
+
import { setFlagsmithProjectId } from '../migrate/sources/flagsmith.js';
|
|
13
15
|
import { applyLaunchBaseUrl } from '../migrate/sources/launch/api.js';
|
|
14
16
|
import { applyLaunchDarklyBaseUrl } from '../migrate/sources/launchdarkly/api.js';
|
|
15
17
|
import { getLaunchDarklyRetentionHorizon, setLaunchDarklyFullSummary, setLaunchDarklyProjectKey, } from '../migrate/sources/launchdarkly.js';
|
|
@@ -55,10 +57,9 @@ export default class Migrate extends BaseCommand {
|
|
|
55
57
|
'Only valid on first-run imports — pass --reset to re-import everything from scratch with this flag.',
|
|
56
58
|
}),
|
|
57
59
|
project: Flags.string({
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
'
|
|
61
|
-
env: 'LAUNCHDARKLY_PROJECT_KEY',
|
|
60
|
+
description: 'Source-system project identifier. For --from launchdarkly this is the project KEY (default: "default"; ' +
|
|
61
|
+
'env: LAUNCHDARKLY_PROJECT_KEY). For --from flagsmith this is the numeric project ID (env: FLAGSMITH_PROJECT_ID). ' +
|
|
62
|
+
'Ignored by --from launch.',
|
|
62
63
|
}),
|
|
63
64
|
push: Flags.boolean({
|
|
64
65
|
default: false,
|
|
@@ -149,9 +150,19 @@ export default class Migrate extends BaseCommand {
|
|
|
149
150
|
// --full-summary swaps the snapshot for the Phase-2 audit-log walk (the
|
|
150
151
|
// walk's own resume cursor lives in os.tmpdir, not in `dir`).
|
|
151
152
|
applyLaunchDarklyBaseUrl();
|
|
152
|
-
setLaunchDarklyProjectKey(flags.project);
|
|
153
|
+
setLaunchDarklyProjectKey(flags.project ?? process.env.LAUNCHDARKLY_PROJECT_KEY ?? 'default');
|
|
153
154
|
setLaunchDarklyFullSummary(flags['full-summary']);
|
|
154
155
|
}
|
|
156
|
+
if (flags.from === 'flagsmith') {
|
|
157
|
+
// Flagsmith projects are numeric IDs. --project is a string flag because
|
|
158
|
+
// it's source-shared; we just pass it through. The Flagsmith source's
|
|
159
|
+
// own resolveProjectId() honours FLAGSMITH_PROJECT_ID at module-load if
|
|
160
|
+
// --project isn't passed.
|
|
161
|
+
applyFlagsmithBaseUrl();
|
|
162
|
+
const projectId = flags.project ?? process.env.FLAGSMITH_PROJECT_ID;
|
|
163
|
+
if (projectId)
|
|
164
|
+
setFlagsmithProjectId(projectId);
|
|
165
|
+
}
|
|
155
166
|
let source;
|
|
156
167
|
try {
|
|
157
168
|
source = getSource(flags.from);
|
package/dist/init/templates.js
CHANGED
|
@@ -25,22 +25,50 @@ This is a [Quonfig](https://quonfig.com) workspace repository. All configuration
|
|
|
25
25
|
| \`schemas/\` | JSON Schemas that configs can reference for validation |
|
|
26
26
|
| \`schemas-protected/\` | Admin-only schemas |
|
|
27
27
|
|
|
28
|
-
## Quick start
|
|
28
|
+
## Quick start (works fully offline — no account required)
|
|
29
|
+
|
|
30
|
+
This workspace is just a git repo full of JSON files. You can edit those files
|
|
31
|
+
directly, validate them locally, and point any Quonfig SDK at this directory.
|
|
32
|
+
No login, no API call, no internet connection needed.
|
|
29
33
|
|
|
30
34
|
\`\`\`bash
|
|
31
|
-
#
|
|
35
|
+
# 1. Edit a flag — see the sample files in feature-flags/ for the shape.
|
|
36
|
+
$EDITOR feature-flags/my.new.flag.json
|
|
37
|
+
|
|
38
|
+
# 2. Validate the workspace.
|
|
32
39
|
qfg verify
|
|
33
40
|
|
|
34
|
-
#
|
|
35
|
-
qfg
|
|
41
|
+
# 3. (Optional) Generate TypeScript types for your app.
|
|
42
|
+
qfg generate
|
|
36
43
|
|
|
37
|
-
#
|
|
38
|
-
|
|
44
|
+
# 4. Commit. The pre-commit hook re-runs qfg verify automatically.
|
|
45
|
+
git add . && git commit -m "Add my.new.flag"
|
|
39
46
|
\`\`\`
|
|
40
47
|
|
|
48
|
+
## Two ways to use this repo
|
|
49
|
+
|
|
50
|
+
**Open-source / fully local.** Edit JSON, run \`qfg verify\`, point your SDK
|
|
51
|
+
at this directory (\`datadir: "./quonfig"\`). Push the repo wherever you want
|
|
52
|
+
(GitHub, self-hosted Gitea, your own server). This is the no-account path.
|
|
53
|
+
|
|
54
|
+
**Hosted Quonfig.** If you also have a Quonfig account, server-side commands
|
|
55
|
+
like \`qfg push\`, \`qfg create\`, \`qfg list\`, \`qfg set-default\`, and
|
|
56
|
+
\`qfg get\` give you a UI, real-time SSE delivery to SDKs, evaluation
|
|
57
|
+
telemetry, and audit history. These all require \`qfg login\`.
|
|
58
|
+
|
|
59
|
+
## Local-only commands (no login required)
|
|
60
|
+
|
|
61
|
+
| Command | What it does |
|
|
62
|
+
|---------|--------------|
|
|
63
|
+
| \`qfg init\` | Re-initialize this workspace (idempotent, refreshes templates) |
|
|
64
|
+
| \`qfg verify\` | Validate every JSON file against the schema and cross-file rules |
|
|
65
|
+
| \`qfg generate\` | Generate typed SDK client code from the configs in this dir |
|
|
66
|
+
| \`qfg config-schema\` | Print the canonical config schema (great for AI agents) |
|
|
67
|
+
| \`qfg migrate\` | Import flags from LaunchDarkly, Flagsmith, etc. |
|
|
68
|
+
|
|
41
69
|
## Schema
|
|
42
70
|
|
|
43
|
-
Config files reference the hosted JSON Schema at <https://api.quonfig.com/schemas/v1/stored-config.json> via their \`$schema\` field. Editors that support JSON Schema will provide autocomplete and validation automatically.
|
|
71
|
+
Config files reference the hosted JSON Schema at <https://api.quonfig.com/schemas/v1/stored-config.json> via their \`$schema\` field. Editors that support JSON Schema will provide autocomplete and validation automatically. The schema URL is fetched once by your editor's LSP — the CLI and SDK don't need it.
|
|
44
72
|
|
|
45
73
|
## Validation
|
|
46
74
|
|
|
@@ -55,7 +83,24 @@ export function claudeMdTemplate() {
|
|
|
55
83
|
|
|
56
84
|
This is a Quonfig workspace repository. Configuration is stored as JSON files in git.
|
|
57
85
|
|
|
58
|
-
|
|
86
|
+
## How to work in this repo
|
|
87
|
+
|
|
88
|
+
**You edit JSON files directly.** Do not run \`qfg create\`, \`qfg set-default\`,
|
|
89
|
+
\`qfg set-rollout\`, \`qfg override\`, \`qfg push\`, \`qfg pull\`, \`qfg get\`,
|
|
90
|
+
or \`qfg list\` — those commands talk to a hosted Quonfig server. In a local
|
|
91
|
+
workspace, the source of truth is this git repo, so edit JSON in place.
|
|
92
|
+
|
|
93
|
+
The complete local-only toolkit:
|
|
94
|
+
|
|
95
|
+
| Command | When to use |
|
|
96
|
+
|---------|-------------|
|
|
97
|
+
| \`qfg verify\` | After every change. Validates schema + cross-file rules. |
|
|
98
|
+
| \`qfg config-schema\` | Print the canonical schema. Use this to look up field names, operator enums, value-type shapes before you write a new config. |
|
|
99
|
+
| \`qfg generate\` | Regenerate typed SDK client code (consumers ask for this; you usually won't need to run it unless asked). |
|
|
100
|
+
| Read existing files | Look at sibling JSON files in the same directory for the canonical shape before writing a new one. |
|
|
101
|
+
|
|
102
|
+
**After every change to this repo, run \`qfg verify\` to validate.** If it
|
|
103
|
+
fails, fix the JSON until it passes — do not ship a broken workspace.
|
|
59
104
|
|
|
60
105
|
## JSON Schema
|
|
61
106
|
|
|
@@ -144,10 +189,12 @@ This is a Quonfig workspace repository. See \`CLAUDE.md\` for the complete schem
|
|
|
144
189
|
|
|
145
190
|
## Key rules
|
|
146
191
|
|
|
147
|
-
1. **
|
|
148
|
-
2.
|
|
149
|
-
3.
|
|
150
|
-
4.
|
|
192
|
+
1. **Edit JSON files directly.** Do NOT use \`qfg create\`, \`qfg set-default\`, \`qfg push\`, \`qfg get\`, or \`qfg list\` — those require a hosted Quonfig account. The source of truth here is the git repo.
|
|
193
|
+
2. **Always validate**: run \`qfg verify\` after any change to this repo.
|
|
194
|
+
3. **Look before you leap**: read sibling JSON files for the canonical shape, and run \`qfg config-schema\` to confirm field names, operator enums, and value types before writing a new config.
|
|
195
|
+
4. Filename must match the \`key\` field (e.g. \`my.flag.json\` has \`"key": "my.flag"\`).
|
|
196
|
+
5. Files must be in the correct directory for their \`type\`.
|
|
197
|
+
6. See \`CLAUDE.md\` for the full list of value types, operators, and constraints.
|
|
151
198
|
`;
|
|
152
199
|
}
|
|
153
200
|
// ── Pre-commit hook ────────────────────────────────────────────────────
|