@loopress/cli 0.22.0 → 0.24.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.
Files changed (117) hide show
  1. package/README.md +794 -85
  2. package/dist/commands/acf/diff.d.ts +2 -0
  3. package/dist/commands/acf/diff.js +5 -0
  4. package/dist/commands/api/diff.d.ts +2 -0
  5. package/dist/commands/api/diff.js +5 -0
  6. package/dist/commands/api/list.d.ts +2 -12
  7. package/dist/commands/api/list.js +2 -20
  8. package/dist/commands/api/pull.d.ts +2 -20
  9. package/dist/commands/api/pull.js +2 -53
  10. package/dist/commands/api/push.d.ts +2 -22
  11. package/dist/commands/api/push.js +2 -116
  12. package/dist/commands/app/list.d.ts +17 -0
  13. package/dist/commands/app/list.js +35 -0
  14. package/dist/commands/{page → app}/pull.d.ts +7 -5
  15. package/dist/commands/app/pull.js +94 -0
  16. package/dist/commands/app/push.d.ts +28 -0
  17. package/dist/commands/app/push.js +130 -0
  18. package/dist/commands/app/remove.d.ts +20 -0
  19. package/dist/commands/app/remove.js +42 -0
  20. package/dist/commands/composer/pull.js +6 -16
  21. package/dist/commands/composer/push.d.ts +1 -0
  22. package/dist/commands/composer/push.js +43 -19
  23. package/dist/commands/dev.js +1 -1
  24. package/dist/commands/diff.d.ts +13 -0
  25. package/dist/commands/diff.js +42 -0
  26. package/dist/commands/form/diff.d.ts +2 -0
  27. package/dist/commands/form/diff.js +5 -0
  28. package/dist/commands/hook/diff.d.ts +2 -0
  29. package/dist/commands/hook/diff.js +5 -0
  30. package/dist/commands/hook/list.d.ts +2 -0
  31. package/dist/commands/hook/list.js +2 -0
  32. package/dist/commands/hook/pull.d.ts +2 -0
  33. package/dist/commands/hook/pull.js +2 -0
  34. package/dist/commands/hook/push.d.ts +2 -0
  35. package/dist/commands/hook/push.js +2 -0
  36. package/dist/commands/init.js +2 -1
  37. package/dist/commands/option/add.d.ts +15 -0
  38. package/dist/commands/option/add.js +47 -0
  39. package/dist/commands/option/diff.d.ts +2 -0
  40. package/dist/commands/option/diff.js +5 -0
  41. package/dist/commands/{page → option}/list.d.ts +5 -1
  42. package/dist/commands/option/list.js +151 -0
  43. package/dist/commands/option/pull.d.ts +16 -0
  44. package/dist/commands/option/pull.js +75 -0
  45. package/dist/commands/{page → option}/push.d.ts +3 -8
  46. package/dist/commands/option/push.js +66 -0
  47. package/dist/commands/option/remove.d.ts +22 -0
  48. package/dist/commands/option/remove.js +69 -0
  49. package/dist/commands/plugin/add.d.ts +1 -0
  50. package/dist/commands/plugin/add.js +18 -8
  51. package/dist/commands/plugin/audit.d.ts +30 -0
  52. package/dist/commands/plugin/audit.js +138 -0
  53. package/dist/commands/plugin/pull.d.ts +1 -2
  54. package/dist/commands/plugin/pull.js +11 -11
  55. package/dist/commands/plugin/push.d.ts +13 -8
  56. package/dist/commands/plugin/push.js +161 -67
  57. package/dist/commands/plugin/status.d.ts +22 -0
  58. package/dist/commands/plugin/status.js +65 -0
  59. package/dist/commands/pull.js +3 -2
  60. package/dist/commands/push.js +4 -3
  61. package/dist/commands/seo/diff.d.ts +2 -0
  62. package/dist/commands/seo/diff.js +5 -0
  63. package/dist/commands/snippet/diff.d.ts +2 -0
  64. package/dist/commands/snippet/diff.js +5 -0
  65. package/dist/commands/theme/add.d.ts +13 -0
  66. package/dist/commands/theme/add.js +35 -0
  67. package/dist/commands/theme/pull.d.ts +21 -0
  68. package/dist/commands/theme/pull.js +37 -0
  69. package/dist/commands/theme/push.d.ts +22 -0
  70. package/dist/commands/theme/push.js +123 -0
  71. package/dist/commands/theme/status.d.ts +20 -0
  72. package/dist/commands/theme/status.js +51 -0
  73. package/dist/lib/app-manifest.d.ts +36 -0
  74. package/dist/lib/app-manifest.js +162 -0
  75. package/dist/lib/base.d.ts +3 -1
  76. package/dist/lib/base.js +14 -19
  77. package/dist/lib/dev-watch.d.ts +1 -1
  78. package/dist/lib/dev-watch.js +1 -2
  79. package/dist/lib/diff-command.d.ts +47 -0
  80. package/dist/lib/diff-command.js +180 -0
  81. package/dist/lib/diff-state.d.ts +22 -0
  82. package/dist/lib/diff-state.js +88 -0
  83. package/dist/lib/find-orphaned-files.js +1 -1
  84. package/dist/lib/interactive.d.ts +1 -0
  85. package/dist/lib/interactive.js +10 -0
  86. package/dist/lib/php-files-command.d.ts +54 -0
  87. package/dist/lib/php-files-command.js +216 -0
  88. package/dist/lib/put-or-create.js +1 -1
  89. package/dist/lib/readdir-tolerant.d.ts +1 -0
  90. package/dist/lib/readdir-tolerant.js +3 -1
  91. package/dist/lib/resource-state.d.ts +14 -0
  92. package/dist/lib/resource-state.js +361 -0
  93. package/dist/lib/validate-local.js +15 -7
  94. package/dist/lib/wp-client.d.ts +5 -0
  95. package/dist/lib/wp-client.js +56 -0
  96. package/dist/types/plugin.d.ts +1 -0
  97. package/dist/types/project-config.generated.d.ts +19 -5
  98. package/dist/utils/option-format.d.ts +31 -0
  99. package/dist/utils/option-format.js +51 -0
  100. package/dist/utils/plugin-sync.d.ts +26 -0
  101. package/dist/utils/plugin-sync.js +31 -0
  102. package/dist/utils/plugins.d.ts +15 -2
  103. package/dist/utils/plugins.js +57 -12
  104. package/dist/utils/resource-dirs.d.ts +13 -0
  105. package/dist/utils/resource-dirs.js +34 -0
  106. package/dist/utils/themes.d.ts +30 -0
  107. package/dist/utils/themes.js +29 -0
  108. package/dist/utils/version.d.ts +2 -0
  109. package/dist/utils/version.js +21 -0
  110. package/oclif.manifest.json +1897 -244
  111. package/package.json +26 -19
  112. package/schemas/project-config.schema.json +32 -9
  113. package/dist/commands/page/list.js +0 -19
  114. package/dist/commands/page/pull.js +0 -57
  115. package/dist/commands/page/push.js +0 -132
  116. package/dist/utils/page-format.d.ts +0 -7
  117. package/dist/utils/page-format.js +0 -78
@@ -6,19 +6,19 @@
6
6
  "description": "Watch project files and push changes to the local WordPress instance as they happen. Always targets the \"local\" environment, run `lps snippet push` etc. directly for any other environment.",
7
7
  "examples": [
8
8
  "$ lps dev",
9
- "$ lps dev --only=snippets,pages",
9
+ "$ lps dev --only=snippets,api",
10
10
  "$ lps dev --skip=plugins"
11
11
  ],
12
12
  "flags": {
13
13
  "only": {
14
- "description": "Only watch these resource types (comma-separated): snippets, pages, api, plugins",
14
+ "description": "Only watch these resource types (comma-separated): snippets, api, plugins",
15
15
  "name": "only",
16
16
  "hasDynamicHelp": false,
17
17
  "multiple": false,
18
18
  "type": "option"
19
19
  },
20
20
  "skip": {
21
- "description": "Skip these resource types (comma-separated): snippets, pages, api, plugins",
21
+ "description": "Skip these resource types (comma-separated): snippets, api, plugins",
22
22
  "name": "skip",
23
23
  "hasDynamicHelp": false,
24
24
  "multiple": false,
@@ -40,6 +40,113 @@
40
40
  "dev.js"
41
41
  ]
42
42
  },
43
+ "diff": {
44
+ "aliases": [],
45
+ "args": {},
46
+ "description": "Show what differs between your local tracked files and a WordPress environment, or between two environments. Covers snippets, forms, ACF, API routes, Hooks, SEO, and Composer. Plugins and themes have their own `lps plugin status` / `lps theme status`. Exit code: 0 in sync, 1 on drift, 2 when a resource could not be compared, so it doubles as a CI drift gate.",
47
+ "examples": [
48
+ "$ lps diff",
49
+ "$ lps diff --env staging",
50
+ "$ lps diff --env staging --against production",
51
+ "$ lps diff --only snippet --only acf",
52
+ "$ lps diff --skip composer"
53
+ ],
54
+ "flags": {
55
+ "json": {
56
+ "description": "Format output as json.",
57
+ "helpGroup": "GLOBAL",
58
+ "name": "json",
59
+ "allowNo": false,
60
+ "type": "boolean"
61
+ },
62
+ "env": {
63
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
64
+ "name": "env",
65
+ "hasDynamicHelp": false,
66
+ "multiple": false,
67
+ "type": "option"
68
+ },
69
+ "against": {
70
+ "description": "Compare the primary environment against this second environment instead of against local files",
71
+ "name": "against",
72
+ "hasDynamicHelp": false,
73
+ "multiple": false,
74
+ "type": "option"
75
+ },
76
+ "only": {
77
+ "description": "Only compare these resources",
78
+ "name": "only",
79
+ "hasDynamicHelp": false,
80
+ "multiple": true,
81
+ "options": [
82
+ "snippet",
83
+ "form",
84
+ "acf",
85
+ "api",
86
+ "hook",
87
+ "seo",
88
+ "option",
89
+ "composer"
90
+ ],
91
+ "type": "option"
92
+ },
93
+ "skip": {
94
+ "description": "Compare every resource except these",
95
+ "name": "skip",
96
+ "hasDynamicHelp": false,
97
+ "multiple": true,
98
+ "options": [
99
+ "snippet",
100
+ "form",
101
+ "acf",
102
+ "api",
103
+ "hook",
104
+ "seo",
105
+ "option",
106
+ "composer"
107
+ ],
108
+ "type": "option"
109
+ }
110
+ },
111
+ "hasDynamicHelp": false,
112
+ "hiddenAliases": [],
113
+ "id": "diff",
114
+ "pluginAlias": "@loopress/cli",
115
+ "pluginName": "@loopress/cli",
116
+ "pluginType": "core",
117
+ "strict": true,
118
+ "enableJsonFlag": true,
119
+ "dryRunFlag": {
120
+ "dry-run": {
121
+ "char": "d",
122
+ "description": "Show what would change without making changes",
123
+ "allowNo": false,
124
+ "type": "boolean"
125
+ }
126
+ },
127
+ "yesFlag": {
128
+ "yes": {
129
+ "char": "y",
130
+ "description": "Answer yes to confirmation prompts",
131
+ "allowNo": false,
132
+ "type": "boolean"
133
+ }
134
+ },
135
+ "againstFlag": {
136
+ "against": {
137
+ "description": "Compare the primary environment against this second environment instead of against local files",
138
+ "input": [],
139
+ "multiple": false,
140
+ "type": "option"
141
+ }
142
+ },
143
+ "isESM": true,
144
+ "relativePath": [
145
+ "dist",
146
+ "commands",
147
+ "diff.js"
148
+ ]
149
+ },
43
150
  "doctor": {
44
151
  "aliases": [],
45
152
  "args": {},
@@ -210,7 +317,7 @@
210
317
  "pull": {
211
318
  "aliases": [],
212
319
  "args": {},
213
- "description": "Pull all content, plugins, composer dependencies, ACF, API routes, forms, pages, SEO, and snippets, from WordPress",
320
+ "description": "Pull all content, plugins, composer dependencies, ACF, API routes, hooks, forms, SEO, options, and snippets, from WordPress",
214
321
  "examples": [
215
322
  "$ lps pull",
216
323
  "$ lps pull --env staging",
@@ -273,7 +380,7 @@
273
380
  "push": {
274
381
  "aliases": [],
275
382
  "args": {},
276
- "description": "Push all local content, plugins, composer dependencies, ACF, API routes, forms, pages, SEO, and snippets, to WordPress",
383
+ "description": "Push all local content, plugins, composer dependencies, ACF, API routes, hooks, forms, SEO, options, and snippets, to WordPress",
277
384
  "examples": [
278
385
  "$ lps push",
279
386
  "$ lps push --env staging",
@@ -424,6 +531,83 @@
424
531
  "validate.js"
425
532
  ]
426
533
  },
534
+ "acf:diff": {
535
+ "aliases": [],
536
+ "args": {
537
+ "path": {
538
+ "description": "Path to ACF directory (overrides project config)",
539
+ "name": "path"
540
+ }
541
+ },
542
+ "description": "Show what differs in ACF field groups, post types, taxonomies, and options pages between your local files and a WordPress environment, or between two environments",
543
+ "examples": [
544
+ "$ lps acf diff",
545
+ "$ lps acf diff --env staging",
546
+ "$ lps acf diff --env staging --against production"
547
+ ],
548
+ "flags": {
549
+ "json": {
550
+ "description": "Format output as json.",
551
+ "helpGroup": "GLOBAL",
552
+ "name": "json",
553
+ "allowNo": false,
554
+ "type": "boolean"
555
+ },
556
+ "env": {
557
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
558
+ "name": "env",
559
+ "hasDynamicHelp": false,
560
+ "multiple": false,
561
+ "type": "option"
562
+ },
563
+ "against": {
564
+ "description": "Compare the primary environment against this second environment instead of against local files",
565
+ "name": "against",
566
+ "hasDynamicHelp": false,
567
+ "multiple": false,
568
+ "type": "option"
569
+ }
570
+ },
571
+ "hasDynamicHelp": false,
572
+ "hiddenAliases": [],
573
+ "id": "acf:diff",
574
+ "pluginAlias": "@loopress/cli",
575
+ "pluginName": "@loopress/cli",
576
+ "pluginType": "core",
577
+ "strict": true,
578
+ "enableJsonFlag": true,
579
+ "dryRunFlag": {
580
+ "dry-run": {
581
+ "char": "d",
582
+ "description": "Show what would change without making changes",
583
+ "allowNo": false,
584
+ "type": "boolean"
585
+ }
586
+ },
587
+ "yesFlag": {
588
+ "yes": {
589
+ "char": "y",
590
+ "description": "Answer yes to confirmation prompts",
591
+ "allowNo": false,
592
+ "type": "boolean"
593
+ }
594
+ },
595
+ "againstFlag": {
596
+ "against": {
597
+ "description": "Compare the primary environment against this second environment instead of against local files",
598
+ "input": [],
599
+ "multiple": false,
600
+ "type": "option"
601
+ }
602
+ },
603
+ "isESM": true,
604
+ "relativePath": [
605
+ "dist",
606
+ "commands",
607
+ "acf",
608
+ "diff.js"
609
+ ]
610
+ },
427
611
  "acf:list": {
428
612
  "aliases": [],
429
613
  "args": {},
@@ -638,6 +822,83 @@
638
822
  "push.js"
639
823
  ]
640
824
  },
825
+ "api:diff": {
826
+ "aliases": [],
827
+ "args": {
828
+ "path": {
829
+ "description": "Path to api directory (overrides project config)",
830
+ "name": "path"
831
+ }
832
+ },
833
+ "description": "Show what differs in custom API route files between your local files and a WordPress environment, or between two environments",
834
+ "examples": [
835
+ "$ lps api diff",
836
+ "$ lps api diff --env staging",
837
+ "$ lps api diff --env staging --against production"
838
+ ],
839
+ "flags": {
840
+ "json": {
841
+ "description": "Format output as json.",
842
+ "helpGroup": "GLOBAL",
843
+ "name": "json",
844
+ "allowNo": false,
845
+ "type": "boolean"
846
+ },
847
+ "env": {
848
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
849
+ "name": "env",
850
+ "hasDynamicHelp": false,
851
+ "multiple": false,
852
+ "type": "option"
853
+ },
854
+ "against": {
855
+ "description": "Compare the primary environment against this second environment instead of against local files",
856
+ "name": "against",
857
+ "hasDynamicHelp": false,
858
+ "multiple": false,
859
+ "type": "option"
860
+ }
861
+ },
862
+ "hasDynamicHelp": false,
863
+ "hiddenAliases": [],
864
+ "id": "api:diff",
865
+ "pluginAlias": "@loopress/cli",
866
+ "pluginName": "@loopress/cli",
867
+ "pluginType": "core",
868
+ "strict": true,
869
+ "enableJsonFlag": true,
870
+ "dryRunFlag": {
871
+ "dry-run": {
872
+ "char": "d",
873
+ "description": "Show what would change without making changes",
874
+ "allowNo": false,
875
+ "type": "boolean"
876
+ }
877
+ },
878
+ "yesFlag": {
879
+ "yes": {
880
+ "char": "y",
881
+ "description": "Answer yes to confirmation prompts",
882
+ "allowNo": false,
883
+ "type": "boolean"
884
+ }
885
+ },
886
+ "againstFlag": {
887
+ "against": {
888
+ "description": "Compare the primary environment against this second environment instead of against local files",
889
+ "input": [],
890
+ "multiple": false,
891
+ "type": "option"
892
+ }
893
+ },
894
+ "isESM": true,
895
+ "relativePath": [
896
+ "dist",
897
+ "commands",
898
+ "api",
899
+ "diff.js"
900
+ ]
901
+ },
641
902
  "api:list": {
642
903
  "aliases": [],
643
904
  "args": {},
@@ -857,38 +1118,37 @@
857
1118
  "push.js"
858
1119
  ]
859
1120
  },
860
- "composer:init": {
1121
+ "app:list": {
861
1122
  "aliases": [],
862
1123
  "args": {},
863
- "description": "Create a composer.json wired to WPackagist for installing WordPress.org plugins and themes",
1124
+ "description": "List single-page apps deployed to WordPress",
864
1125
  "examples": [
865
- "$ lps composer init",
866
- "$ lps composer init --dry-run"
1126
+ "$ lps app list"
867
1127
  ],
868
1128
  "flags": {
1129
+ "json": {
1130
+ "description": "Format output as json.",
1131
+ "helpGroup": "GLOBAL",
1132
+ "name": "json",
1133
+ "allowNo": false,
1134
+ "type": "boolean"
1135
+ },
869
1136
  "env": {
870
1137
  "description": "Target environment by name, overriding the globally active one (lps project switch)",
871
1138
  "name": "env",
872
1139
  "hasDynamicHelp": false,
873
1140
  "multiple": false,
874
1141
  "type": "option"
875
- },
876
- "dry-run": {
877
- "char": "d",
878
- "description": "Show what would change without making changes",
879
- "name": "dry-run",
880
- "allowNo": false,
881
- "type": "boolean"
882
1142
  }
883
1143
  },
884
1144
  "hasDynamicHelp": false,
885
1145
  "hiddenAliases": [],
886
- "id": "composer:init",
1146
+ "id": "app:list",
887
1147
  "pluginAlias": "@loopress/cli",
888
1148
  "pluginName": "@loopress/cli",
889
1149
  "pluginType": "core",
890
1150
  "strict": true,
891
- "enableJsonFlag": false,
1151
+ "enableJsonFlag": true,
892
1152
  "dryRunFlag": {
893
1153
  "dry-run": {
894
1154
  "char": "d",
@@ -909,17 +1169,21 @@
909
1169
  "relativePath": [
910
1170
  "dist",
911
1171
  "commands",
912
- "composer",
913
- "init.js"
1172
+ "app",
1173
+ "list.js"
914
1174
  ]
915
1175
  },
916
- "composer:pull": {
1176
+ "app:pull": {
917
1177
  "aliases": [],
918
- "args": {},
919
- "description": "Pull composer.json and composer.lock from WordPress",
1178
+ "args": {
1179
+ "path": {
1180
+ "description": "Path to apps directory (overrides project config)",
1181
+ "name": "path"
1182
+ }
1183
+ },
1184
+ "description": "Pull single-page app bundles from WordPress into local files",
920
1185
  "examples": [
921
- "$ lps composer pull",
922
- "$ lps composer pull --dry-run"
1186
+ "$ lps app pull"
923
1187
  ],
924
1188
  "flags": {
925
1189
  "json": {
@@ -942,11 +1206,18 @@
942
1206
  "name": "dry-run",
943
1207
  "allowNo": false,
944
1208
  "type": "boolean"
1209
+ },
1210
+ "yes": {
1211
+ "char": "y",
1212
+ "description": "Answer yes to confirmation prompts",
1213
+ "name": "yes",
1214
+ "allowNo": false,
1215
+ "type": "boolean"
945
1216
  }
946
1217
  },
947
1218
  "hasDynamicHelp": false,
948
1219
  "hiddenAliases": [],
949
- "id": "composer:pull",
1220
+ "id": "app:pull",
950
1221
  "pluginAlias": "@loopress/cli",
951
1222
  "pluginName": "@loopress/cli",
952
1223
  "pluginType": "core",
@@ -972,17 +1243,22 @@
972
1243
  "relativePath": [
973
1244
  "dist",
974
1245
  "commands",
975
- "composer",
1246
+ "app",
976
1247
  "pull.js"
977
1248
  ]
978
1249
  },
979
- "composer:push": {
1250
+ "app:push": {
980
1251
  "aliases": [],
981
- "args": {},
982
- "description": "Push composer.json and composer.lock to WordPress and run composer install",
1252
+ "args": {
1253
+ "name": {
1254
+ "description": "Push only this app (defaults to every app in the directory)",
1255
+ "name": "name"
1256
+ }
1257
+ },
1258
+ "description": "Push built single-page app bundles to WordPress. Each app is an `apps/<name>/` directory holding a loopress.app.json and a built dist/ folder. Only files whose content changed are uploaded.",
983
1259
  "examples": [
984
- "$ lps composer push",
985
- "$ lps composer push --dry-run"
1260
+ "$ lps app push",
1261
+ "$ lps app push search"
986
1262
  ],
987
1263
  "flags": {
988
1264
  "json": {
@@ -1016,7 +1292,7 @@
1016
1292
  },
1017
1293
  "hasDynamicHelp": false,
1018
1294
  "hiddenAliases": [],
1019
- "id": "composer:push",
1295
+ "id": "app:push",
1020
1296
  "pluginAlias": "@loopress/cli",
1021
1297
  "pluginName": "@loopress/cli",
1022
1298
  "pluginType": "core",
@@ -1026,16 +1302,22 @@
1026
1302
  "relativePath": [
1027
1303
  "dist",
1028
1304
  "commands",
1029
- "composer",
1305
+ "app",
1030
1306
  "push.js"
1031
1307
  ]
1032
1308
  },
1033
- "form:list": {
1309
+ "app:remove": {
1034
1310
  "aliases": [],
1035
- "args": {},
1036
- "description": "List forms from WordPress",
1037
- "examples": [
1038
- "$ lps form list"
1311
+ "args": {
1312
+ "name": {
1313
+ "description": "App to remove from WordPress",
1314
+ "name": "name",
1315
+ "required": true
1316
+ }
1317
+ },
1318
+ "description": "Remove a single-page app from WordPress: deletes its bundle from wp-content/loopress/apps/ and unregisters the shortcode. Local files are left untouched.",
1319
+ "examples": [
1320
+ "$ lps app remove search"
1039
1321
  ],
1040
1322
  "flags": {
1041
1323
  "json": {
@@ -1045,59 +1327,6 @@
1045
1327
  "allowNo": false,
1046
1328
  "type": "boolean"
1047
1329
  },
1048
- "env": {
1049
- "description": "Target environment by name, overriding the globally active one (lps project switch)",
1050
- "name": "env",
1051
- "hasDynamicHelp": false,
1052
- "multiple": false,
1053
- "type": "option"
1054
- }
1055
- },
1056
- "hasDynamicHelp": false,
1057
- "hiddenAliases": [],
1058
- "id": "form:list",
1059
- "pluginAlias": "@loopress/cli",
1060
- "pluginName": "@loopress/cli",
1061
- "pluginType": "core",
1062
- "strict": true,
1063
- "enableJsonFlag": true,
1064
- "dryRunFlag": {
1065
- "dry-run": {
1066
- "char": "d",
1067
- "description": "Show what would change without making changes",
1068
- "allowNo": false,
1069
- "type": "boolean"
1070
- }
1071
- },
1072
- "yesFlag": {
1073
- "yes": {
1074
- "char": "y",
1075
- "description": "Answer yes to confirmation prompts",
1076
- "allowNo": false,
1077
- "type": "boolean"
1078
- }
1079
- },
1080
- "isESM": true,
1081
- "relativePath": [
1082
- "dist",
1083
- "commands",
1084
- "form",
1085
- "list.js"
1086
- ]
1087
- },
1088
- "form:pull": {
1089
- "aliases": [],
1090
- "args": {
1091
- "path": {
1092
- "description": "Path to forms directory (overrides project config)",
1093
- "name": "path"
1094
- }
1095
- },
1096
- "description": "Pull forms from WordPress",
1097
- "examples": [
1098
- "$ lps form pull"
1099
- ],
1100
- "flags": {
1101
1330
  "env": {
1102
1331
  "description": "Target environment by name, overriding the globally active one (lps project switch)",
1103
1332
  "name": "env",
@@ -1122,12 +1351,12 @@
1122
1351
  },
1123
1352
  "hasDynamicHelp": false,
1124
1353
  "hiddenAliases": [],
1125
- "id": "form:pull",
1354
+ "id": "app:remove",
1126
1355
  "pluginAlias": "@loopress/cli",
1127
1356
  "pluginName": "@loopress/cli",
1128
1357
  "pluginType": "core",
1129
1358
  "strict": true,
1130
- "enableJsonFlag": false,
1359
+ "enableJsonFlag": true,
1131
1360
  "dryRunFlag": {
1132
1361
  "dry-run": {
1133
1362
  "char": "d",
@@ -1148,21 +1377,17 @@
1148
1377
  "relativePath": [
1149
1378
  "dist",
1150
1379
  "commands",
1151
- "form",
1152
- "pull.js"
1380
+ "app",
1381
+ "remove.js"
1153
1382
  ]
1154
1383
  },
1155
- "form:push": {
1384
+ "composer:init": {
1156
1385
  "aliases": [],
1157
- "args": {
1158
- "path": {
1159
- "description": "Path to forms directory (overrides project config)",
1160
- "name": "path"
1161
- }
1162
- },
1163
- "description": "Push forms to WordPress. Local files created or updated remotely are renamed on disk to the `<id>-<slug>.json` convention.",
1386
+ "args": {},
1387
+ "description": "Create a composer.json wired to WPackagist for installing WordPress.org plugins and themes",
1164
1388
  "examples": [
1165
- "$ lps form push"
1389
+ "$ lps composer init",
1390
+ "$ lps composer init --dry-run"
1166
1391
  ],
1167
1392
  "flags": {
1168
1393
  "env": {
@@ -1178,61 +1403,16 @@
1178
1403
  "name": "dry-run",
1179
1404
  "allowNo": false,
1180
1405
  "type": "boolean"
1181
- },
1182
- "yes": {
1183
- "char": "y",
1184
- "description": "Answer yes to confirmation prompts",
1185
- "name": "yes",
1186
- "allowNo": false,
1187
- "type": "boolean"
1188
- }
1189
- },
1190
- "hasDynamicHelp": false,
1191
- "hiddenAliases": [],
1192
- "id": "form:push",
1193
- "pluginAlias": "@loopress/cli",
1194
- "pluginName": "@loopress/cli",
1195
- "pluginType": "core",
1196
- "strict": true,
1197
- "isESM": true,
1198
- "relativePath": [
1199
- "dist",
1200
- "commands",
1201
- "form",
1202
- "push.js"
1203
- ]
1204
- },
1205
- "page:list": {
1206
- "aliases": [],
1207
- "args": {},
1208
- "description": "List pages from WordPress",
1209
- "examples": [
1210
- "$ lps page list"
1211
- ],
1212
- "flags": {
1213
- "json": {
1214
- "description": "Format output as json.",
1215
- "helpGroup": "GLOBAL",
1216
- "name": "json",
1217
- "allowNo": false,
1218
- "type": "boolean"
1219
- },
1220
- "env": {
1221
- "description": "Target environment by name, overriding the globally active one (lps project switch)",
1222
- "name": "env",
1223
- "hasDynamicHelp": false,
1224
- "multiple": false,
1225
- "type": "option"
1226
1406
  }
1227
1407
  },
1228
1408
  "hasDynamicHelp": false,
1229
1409
  "hiddenAliases": [],
1230
- "id": "page:list",
1410
+ "id": "composer:init",
1231
1411
  "pluginAlias": "@loopress/cli",
1232
1412
  "pluginName": "@loopress/cli",
1233
1413
  "pluginType": "core",
1234
1414
  "strict": true,
1235
- "enableJsonFlag": true,
1415
+ "enableJsonFlag": false,
1236
1416
  "dryRunFlag": {
1237
1417
  "dry-run": {
1238
1418
  "char": "d",
@@ -1253,21 +1433,17 @@
1253
1433
  "relativePath": [
1254
1434
  "dist",
1255
1435
  "commands",
1256
- "page",
1257
- "list.js"
1436
+ "composer",
1437
+ "init.js"
1258
1438
  ]
1259
1439
  },
1260
- "page:pull": {
1440
+ "composer:pull": {
1261
1441
  "aliases": [],
1262
- "args": {
1263
- "path": {
1264
- "description": "Path to pages directory (overrides project config)",
1265
- "name": "path"
1266
- }
1267
- },
1268
- "description": "Pull pages from WordPress",
1442
+ "args": {},
1443
+ "description": "Pull composer.json and composer.lock from WordPress",
1269
1444
  "examples": [
1270
- "$ lps page pull"
1445
+ "$ lps composer pull",
1446
+ "$ lps composer pull --dry-run"
1271
1447
  ],
1272
1448
  "flags": {
1273
1449
  "json": {
@@ -1290,18 +1466,11 @@
1290
1466
  "name": "dry-run",
1291
1467
  "allowNo": false,
1292
1468
  "type": "boolean"
1293
- },
1294
- "yes": {
1295
- "char": "y",
1296
- "description": "Answer yes to confirmation prompts",
1297
- "name": "yes",
1298
- "allowNo": false,
1299
- "type": "boolean"
1300
1469
  }
1301
1470
  },
1302
1471
  "hasDynamicHelp": false,
1303
1472
  "hiddenAliases": [],
1304
- "id": "page:pull",
1473
+ "id": "composer:pull",
1305
1474
  "pluginAlias": "@loopress/cli",
1306
1475
  "pluginName": "@loopress/cli",
1307
1476
  "pluginType": "core",
@@ -1327,21 +1496,17 @@
1327
1496
  "relativePath": [
1328
1497
  "dist",
1329
1498
  "commands",
1330
- "page",
1499
+ "composer",
1331
1500
  "pull.js"
1332
1501
  ]
1333
1502
  },
1334
- "page:push": {
1503
+ "composer:push": {
1335
1504
  "aliases": [],
1336
- "args": {
1337
- "path": {
1338
- "description": "Path to pages directory (overrides project config)",
1339
- "name": "path"
1340
- }
1341
- },
1342
- "description": "Push pages to WordPress. Local files created or updated remotely are renamed on disk to the `<id>-<slug>` convention.",
1505
+ "args": {},
1506
+ "description": "Push composer.json (and composer.lock, if present) to WordPress and run Composer",
1343
1507
  "examples": [
1344
- "$ lps page push"
1508
+ "$ lps composer push",
1509
+ "$ lps composer push --dry-run"
1345
1510
  ],
1346
1511
  "flags": {
1347
1512
  "json": {
@@ -1371,11 +1536,17 @@
1371
1536
  "name": "yes",
1372
1537
  "allowNo": false,
1373
1538
  "type": "boolean"
1539
+ },
1540
+ "force": {
1541
+ "description": "Allow downgrades and take over plugins/themes installed outside Loopress",
1542
+ "name": "force",
1543
+ "allowNo": false,
1544
+ "type": "boolean"
1374
1545
  }
1375
1546
  },
1376
1547
  "hasDynamicHelp": false,
1377
1548
  "hiddenAliases": [],
1378
- "id": "page:push",
1549
+ "id": "composer:push",
1379
1550
  "pluginAlias": "@loopress/cli",
1380
1551
  "pluginName": "@loopress/cli",
1381
1552
  "pluginType": "core",
@@ -1385,25 +1556,32 @@
1385
1556
  "relativePath": [
1386
1557
  "dist",
1387
1558
  "commands",
1388
- "page",
1559
+ "composer",
1389
1560
  "push.js"
1390
1561
  ]
1391
1562
  },
1392
- "plugin:add": {
1563
+ "form:diff": {
1393
1564
  "aliases": [],
1394
1565
  "args": {
1395
- "slug": {
1396
- "description": "Plugin slug on WordPress.org",
1397
- "name": "slug",
1398
- "required": true
1566
+ "path": {
1567
+ "description": "Path to forms directory (overrides project config)",
1568
+ "name": "path"
1399
1569
  }
1400
1570
  },
1401
- "description": "Add a WordPress.org plugin to loopress.json",
1571
+ "description": "Show what differs in forms between your local files and a WordPress environment, or between two environments",
1402
1572
  "examples": [
1403
- "$ lps plugin add woocommerce",
1404
- "$ lps plugin add contact-form-7 --dry-run"
1573
+ "$ lps form diff",
1574
+ "$ lps form diff --env staging",
1575
+ "$ lps form diff --env staging --against production"
1405
1576
  ],
1406
1577
  "flags": {
1578
+ "json": {
1579
+ "description": "Format output as json.",
1580
+ "helpGroup": "GLOBAL",
1581
+ "name": "json",
1582
+ "allowNo": false,
1583
+ "type": "boolean"
1584
+ },
1407
1585
  "env": {
1408
1586
  "description": "Target environment by name, overriding the globally active one (lps project switch)",
1409
1587
  "name": "env",
@@ -1411,22 +1589,22 @@
1411
1589
  "multiple": false,
1412
1590
  "type": "option"
1413
1591
  },
1414
- "dry-run": {
1415
- "char": "d",
1416
- "description": "Show what would change without making changes",
1417
- "name": "dry-run",
1418
- "allowNo": false,
1419
- "type": "boolean"
1592
+ "against": {
1593
+ "description": "Compare the primary environment against this second environment instead of against local files",
1594
+ "name": "against",
1595
+ "hasDynamicHelp": false,
1596
+ "multiple": false,
1597
+ "type": "option"
1420
1598
  }
1421
1599
  },
1422
1600
  "hasDynamicHelp": false,
1423
1601
  "hiddenAliases": [],
1424
- "id": "plugin:add",
1602
+ "id": "form:diff",
1425
1603
  "pluginAlias": "@loopress/cli",
1426
1604
  "pluginName": "@loopress/cli",
1427
1605
  "pluginType": "core",
1428
1606
  "strict": true,
1429
- "enableJsonFlag": false,
1607
+ "enableJsonFlag": true,
1430
1608
  "dryRunFlag": {
1431
1609
  "dry-run": {
1432
1610
  "char": "d",
@@ -1443,21 +1621,28 @@
1443
1621
  "type": "boolean"
1444
1622
  }
1445
1623
  },
1624
+ "againstFlag": {
1625
+ "against": {
1626
+ "description": "Compare the primary environment against this second environment instead of against local files",
1627
+ "input": [],
1628
+ "multiple": false,
1629
+ "type": "option"
1630
+ }
1631
+ },
1446
1632
  "isESM": true,
1447
1633
  "relativePath": [
1448
1634
  "dist",
1449
1635
  "commands",
1450
- "plugin",
1451
- "add.js"
1636
+ "form",
1637
+ "diff.js"
1452
1638
  ]
1453
1639
  },
1454
- "plugin:pull": {
1640
+ "form:list": {
1455
1641
  "aliases": [],
1456
1642
  "args": {},
1457
- "description": "Pull installed plugins from WordPress into loopress.json",
1643
+ "description": "List forms from WordPress",
1458
1644
  "examples": [
1459
- "$ lps plugin pull",
1460
- "$ lps plugin pull --dry-run"
1645
+ "$ lps form list"
1461
1646
  ],
1462
1647
  "flags": {
1463
1648
  "json": {
@@ -1473,18 +1658,11 @@
1473
1658
  "hasDynamicHelp": false,
1474
1659
  "multiple": false,
1475
1660
  "type": "option"
1476
- },
1477
- "dry-run": {
1478
- "char": "d",
1479
- "description": "Show what would change without making changes",
1480
- "name": "dry-run",
1481
- "allowNo": false,
1482
- "type": "boolean"
1483
1661
  }
1484
1662
  },
1485
1663
  "hasDynamicHelp": false,
1486
1664
  "hiddenAliases": [],
1487
- "id": "plugin:pull",
1665
+ "id": "form:list",
1488
1666
  "pluginAlias": "@loopress/cli",
1489
1667
  "pluginName": "@loopress/cli",
1490
1668
  "pluginType": "core",
@@ -1510,26 +1688,23 @@
1510
1688
  "relativePath": [
1511
1689
  "dist",
1512
1690
  "commands",
1513
- "plugin",
1514
- "pull.js"
1691
+ "form",
1692
+ "list.js"
1515
1693
  ]
1516
1694
  },
1517
- "plugin:push": {
1695
+ "form:pull": {
1518
1696
  "aliases": [],
1519
- "args": {},
1520
- "description": "Push plugins to WordPress to match loopress.json",
1697
+ "args": {
1698
+ "path": {
1699
+ "description": "Path to forms directory (overrides project config)",
1700
+ "name": "path"
1701
+ }
1702
+ },
1703
+ "description": "Pull forms from WordPress",
1521
1704
  "examples": [
1522
- "$ lps plugin push",
1523
- "$ lps plugin push --dry-run"
1705
+ "$ lps form pull"
1524
1706
  ],
1525
1707
  "flags": {
1526
- "json": {
1527
- "description": "Format output as json.",
1528
- "helpGroup": "GLOBAL",
1529
- "name": "json",
1530
- "allowNo": false,
1531
- "type": "boolean"
1532
- },
1533
1708
  "env": {
1534
1709
  "description": "Target environment by name, overriding the globally active one (lps project switch)",
1535
1710
  "name": "env",
@@ -1554,18 +1729,1096 @@
1554
1729
  },
1555
1730
  "hasDynamicHelp": false,
1556
1731
  "hiddenAliases": [],
1557
- "id": "plugin:push",
1732
+ "id": "form:pull",
1558
1733
  "pluginAlias": "@loopress/cli",
1559
1734
  "pluginName": "@loopress/cli",
1560
1735
  "pluginType": "core",
1561
1736
  "strict": true,
1562
- "enableJsonFlag": true,
1737
+ "enableJsonFlag": false,
1738
+ "dryRunFlag": {
1739
+ "dry-run": {
1740
+ "char": "d",
1741
+ "description": "Show what would change without making changes",
1742
+ "allowNo": false,
1743
+ "type": "boolean"
1744
+ }
1745
+ },
1746
+ "yesFlag": {
1747
+ "yes": {
1748
+ "char": "y",
1749
+ "description": "Answer yes to confirmation prompts",
1750
+ "allowNo": false,
1751
+ "type": "boolean"
1752
+ }
1753
+ },
1563
1754
  "isESM": true,
1564
1755
  "relativePath": [
1565
1756
  "dist",
1566
1757
  "commands",
1567
- "plugin",
1568
- "push.js"
1758
+ "form",
1759
+ "pull.js"
1760
+ ]
1761
+ },
1762
+ "form:push": {
1763
+ "aliases": [],
1764
+ "args": {
1765
+ "path": {
1766
+ "description": "Path to forms directory (overrides project config)",
1767
+ "name": "path"
1768
+ }
1769
+ },
1770
+ "description": "Push forms to WordPress. Local files created or updated remotely are renamed on disk to the `<id>-<slug>.json` convention.",
1771
+ "examples": [
1772
+ "$ lps form push"
1773
+ ],
1774
+ "flags": {
1775
+ "env": {
1776
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
1777
+ "name": "env",
1778
+ "hasDynamicHelp": false,
1779
+ "multiple": false,
1780
+ "type": "option"
1781
+ },
1782
+ "dry-run": {
1783
+ "char": "d",
1784
+ "description": "Show what would change without making changes",
1785
+ "name": "dry-run",
1786
+ "allowNo": false,
1787
+ "type": "boolean"
1788
+ },
1789
+ "yes": {
1790
+ "char": "y",
1791
+ "description": "Answer yes to confirmation prompts",
1792
+ "name": "yes",
1793
+ "allowNo": false,
1794
+ "type": "boolean"
1795
+ }
1796
+ },
1797
+ "hasDynamicHelp": false,
1798
+ "hiddenAliases": [],
1799
+ "id": "form:push",
1800
+ "pluginAlias": "@loopress/cli",
1801
+ "pluginName": "@loopress/cli",
1802
+ "pluginType": "core",
1803
+ "strict": true,
1804
+ "isESM": true,
1805
+ "relativePath": [
1806
+ "dist",
1807
+ "commands",
1808
+ "form",
1809
+ "push.js"
1810
+ ]
1811
+ },
1812
+ "hook:diff": {
1813
+ "aliases": [],
1814
+ "args": {
1815
+ "path": {
1816
+ "description": "Path to hooks directory (overrides project config)",
1817
+ "name": "path"
1818
+ }
1819
+ },
1820
+ "description": "Show what differs in hook files between your local files and a WordPress environment, or between two environments",
1821
+ "examples": [
1822
+ "$ lps hook diff",
1823
+ "$ lps hook diff --env staging",
1824
+ "$ lps hook diff --env staging --against production"
1825
+ ],
1826
+ "flags": {
1827
+ "json": {
1828
+ "description": "Format output as json.",
1829
+ "helpGroup": "GLOBAL",
1830
+ "name": "json",
1831
+ "allowNo": false,
1832
+ "type": "boolean"
1833
+ },
1834
+ "env": {
1835
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
1836
+ "name": "env",
1837
+ "hasDynamicHelp": false,
1838
+ "multiple": false,
1839
+ "type": "option"
1840
+ },
1841
+ "against": {
1842
+ "description": "Compare the primary environment against this second environment instead of against local files",
1843
+ "name": "against",
1844
+ "hasDynamicHelp": false,
1845
+ "multiple": false,
1846
+ "type": "option"
1847
+ }
1848
+ },
1849
+ "hasDynamicHelp": false,
1850
+ "hiddenAliases": [],
1851
+ "id": "hook:diff",
1852
+ "pluginAlias": "@loopress/cli",
1853
+ "pluginName": "@loopress/cli",
1854
+ "pluginType": "core",
1855
+ "strict": true,
1856
+ "enableJsonFlag": true,
1857
+ "dryRunFlag": {
1858
+ "dry-run": {
1859
+ "char": "d",
1860
+ "description": "Show what would change without making changes",
1861
+ "allowNo": false,
1862
+ "type": "boolean"
1863
+ }
1864
+ },
1865
+ "yesFlag": {
1866
+ "yes": {
1867
+ "char": "y",
1868
+ "description": "Answer yes to confirmation prompts",
1869
+ "allowNo": false,
1870
+ "type": "boolean"
1871
+ }
1872
+ },
1873
+ "againstFlag": {
1874
+ "against": {
1875
+ "description": "Compare the primary environment against this second environment instead of against local files",
1876
+ "input": [],
1877
+ "multiple": false,
1878
+ "type": "option"
1879
+ }
1880
+ },
1881
+ "isESM": true,
1882
+ "relativePath": [
1883
+ "dist",
1884
+ "commands",
1885
+ "hook",
1886
+ "diff.js"
1887
+ ]
1888
+ },
1889
+ "hook:list": {
1890
+ "aliases": [],
1891
+ "args": {},
1892
+ "description": "List hook files (actions, filters, cron) from WordPress",
1893
+ "examples": [
1894
+ "$ lps hook list"
1895
+ ],
1896
+ "flags": {
1897
+ "json": {
1898
+ "description": "Format output as json.",
1899
+ "helpGroup": "GLOBAL",
1900
+ "name": "json",
1901
+ "allowNo": false,
1902
+ "type": "boolean"
1903
+ },
1904
+ "env": {
1905
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
1906
+ "name": "env",
1907
+ "hasDynamicHelp": false,
1908
+ "multiple": false,
1909
+ "type": "option"
1910
+ }
1911
+ },
1912
+ "hasDynamicHelp": false,
1913
+ "hiddenAliases": [],
1914
+ "id": "hook:list",
1915
+ "pluginAlias": "@loopress/cli",
1916
+ "pluginName": "@loopress/cli",
1917
+ "pluginType": "core",
1918
+ "strict": true,
1919
+ "enableJsonFlag": true,
1920
+ "dryRunFlag": {
1921
+ "dry-run": {
1922
+ "char": "d",
1923
+ "description": "Show what would change without making changes",
1924
+ "allowNo": false,
1925
+ "type": "boolean"
1926
+ }
1927
+ },
1928
+ "yesFlag": {
1929
+ "yes": {
1930
+ "char": "y",
1931
+ "description": "Answer yes to confirmation prompts",
1932
+ "allowNo": false,
1933
+ "type": "boolean"
1934
+ }
1935
+ },
1936
+ "isESM": true,
1937
+ "relativePath": [
1938
+ "dist",
1939
+ "commands",
1940
+ "hook",
1941
+ "list.js"
1942
+ ]
1943
+ },
1944
+ "hook:pull": {
1945
+ "aliases": [],
1946
+ "args": {
1947
+ "path": {
1948
+ "description": "Path to hooks directory (overrides project config)",
1949
+ "name": "path"
1950
+ }
1951
+ },
1952
+ "description": "Pull hook files (actions, filters, cron) from WordPress",
1953
+ "examples": [
1954
+ "$ lps hook pull",
1955
+ "$ lps hook pull --path ./hooks"
1956
+ ],
1957
+ "flags": {
1958
+ "json": {
1959
+ "description": "Format output as json.",
1960
+ "helpGroup": "GLOBAL",
1961
+ "name": "json",
1962
+ "allowNo": false,
1963
+ "type": "boolean"
1964
+ },
1965
+ "env": {
1966
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
1967
+ "name": "env",
1968
+ "hasDynamicHelp": false,
1969
+ "multiple": false,
1970
+ "type": "option"
1971
+ },
1972
+ "dry-run": {
1973
+ "char": "d",
1974
+ "description": "Show what would change without making changes",
1975
+ "name": "dry-run",
1976
+ "allowNo": false,
1977
+ "type": "boolean"
1978
+ },
1979
+ "yes": {
1980
+ "char": "y",
1981
+ "description": "Answer yes to confirmation prompts",
1982
+ "name": "yes",
1983
+ "allowNo": false,
1984
+ "type": "boolean"
1985
+ }
1986
+ },
1987
+ "hasDynamicHelp": false,
1988
+ "hiddenAliases": [],
1989
+ "id": "hook:pull",
1990
+ "pluginAlias": "@loopress/cli",
1991
+ "pluginName": "@loopress/cli",
1992
+ "pluginType": "core",
1993
+ "strict": true,
1994
+ "enableJsonFlag": true,
1995
+ "dryRunFlag": {
1996
+ "dry-run": {
1997
+ "char": "d",
1998
+ "description": "Show what would change without making changes",
1999
+ "allowNo": false,
2000
+ "type": "boolean"
2001
+ }
2002
+ },
2003
+ "yesFlag": {
2004
+ "yes": {
2005
+ "char": "y",
2006
+ "description": "Answer yes to confirmation prompts",
2007
+ "allowNo": false,
2008
+ "type": "boolean"
2009
+ }
2010
+ },
2011
+ "isESM": true,
2012
+ "relativePath": [
2013
+ "dist",
2014
+ "commands",
2015
+ "hook",
2016
+ "pull.js"
2017
+ ]
2018
+ },
2019
+ "hook:push": {
2020
+ "aliases": [],
2021
+ "args": {
2022
+ "path": {
2023
+ "description": "Path to hooks directory (overrides project config)",
2024
+ "name": "path"
2025
+ }
2026
+ },
2027
+ "description": "Push hook files (actions, filters, cron) to WordPress",
2028
+ "examples": [
2029
+ "$ lps hook push",
2030
+ "$ lps hook push --path ./hooks"
2031
+ ],
2032
+ "flags": {
2033
+ "json": {
2034
+ "description": "Format output as json.",
2035
+ "helpGroup": "GLOBAL",
2036
+ "name": "json",
2037
+ "allowNo": false,
2038
+ "type": "boolean"
2039
+ },
2040
+ "env": {
2041
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
2042
+ "name": "env",
2043
+ "hasDynamicHelp": false,
2044
+ "multiple": false,
2045
+ "type": "option"
2046
+ },
2047
+ "dry-run": {
2048
+ "char": "d",
2049
+ "description": "Show what would change without making changes",
2050
+ "name": "dry-run",
2051
+ "allowNo": false,
2052
+ "type": "boolean"
2053
+ },
2054
+ "yes": {
2055
+ "char": "y",
2056
+ "description": "Answer yes to confirmation prompts",
2057
+ "name": "yes",
2058
+ "allowNo": false,
2059
+ "type": "boolean"
2060
+ }
2061
+ },
2062
+ "hasDynamicHelp": false,
2063
+ "hiddenAliases": [],
2064
+ "id": "hook:push",
2065
+ "pluginAlias": "@loopress/cli",
2066
+ "pluginName": "@loopress/cli",
2067
+ "pluginType": "core",
2068
+ "strict": true,
2069
+ "enableJsonFlag": true,
2070
+ "isESM": true,
2071
+ "relativePath": [
2072
+ "dist",
2073
+ "commands",
2074
+ "hook",
2075
+ "push.js"
2076
+ ]
2077
+ },
2078
+ "option:add": {
2079
+ "aliases": [],
2080
+ "args": {
2081
+ "name": {
2082
+ "description": "Option name to start tracking (see `lps option list`)",
2083
+ "name": "name",
2084
+ "required": true
2085
+ }
2086
+ },
2087
+ "description": "Fetch a WordPress option by name and start tracking it locally. Run `lps option list` first to find the name: this copies a raw value across environments, verify it does not embed post/user IDs before pushing it elsewhere.",
2088
+ "examples": [
2089
+ "$ lps option add wpseo_titles",
2090
+ "$ lps option add siteurl"
2091
+ ],
2092
+ "flags": {
2093
+ "json": {
2094
+ "description": "Format output as json.",
2095
+ "helpGroup": "GLOBAL",
2096
+ "name": "json",
2097
+ "allowNo": false,
2098
+ "type": "boolean"
2099
+ },
2100
+ "env": {
2101
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
2102
+ "name": "env",
2103
+ "hasDynamicHelp": false,
2104
+ "multiple": false,
2105
+ "type": "option"
2106
+ },
2107
+ "dry-run": {
2108
+ "char": "d",
2109
+ "description": "Show what would change without making changes",
2110
+ "name": "dry-run",
2111
+ "allowNo": false,
2112
+ "type": "boolean"
2113
+ },
2114
+ "path": {
2115
+ "description": "Path to options directory (overrides project config)",
2116
+ "name": "path",
2117
+ "hasDynamicHelp": false,
2118
+ "multiple": false,
2119
+ "type": "option"
2120
+ }
2121
+ },
2122
+ "hasDynamicHelp": false,
2123
+ "hiddenAliases": [],
2124
+ "id": "option:add",
2125
+ "pluginAlias": "@loopress/cli",
2126
+ "pluginName": "@loopress/cli",
2127
+ "pluginType": "core",
2128
+ "strict": true,
2129
+ "enableJsonFlag": true,
2130
+ "dryRunFlag": {
2131
+ "dry-run": {
2132
+ "char": "d",
2133
+ "description": "Show what would change without making changes",
2134
+ "allowNo": false,
2135
+ "type": "boolean"
2136
+ }
2137
+ },
2138
+ "yesFlag": {
2139
+ "yes": {
2140
+ "char": "y",
2141
+ "description": "Answer yes to confirmation prompts",
2142
+ "allowNo": false,
2143
+ "type": "boolean"
2144
+ }
2145
+ },
2146
+ "isESM": true,
2147
+ "relativePath": [
2148
+ "dist",
2149
+ "commands",
2150
+ "option",
2151
+ "add.js"
2152
+ ]
2153
+ },
2154
+ "option:diff": {
2155
+ "aliases": [],
2156
+ "args": {
2157
+ "path": {
2158
+ "description": "Path to options directory (overrides project config)",
2159
+ "name": "path"
2160
+ }
2161
+ },
2162
+ "description": "Show what differs, for locally tracked options, between your local files and a WordPress environment, or between two environments",
2163
+ "examples": [
2164
+ "$ lps option diff",
2165
+ "$ lps option diff --env staging",
2166
+ "$ lps option diff --env staging --against production"
2167
+ ],
2168
+ "flags": {
2169
+ "json": {
2170
+ "description": "Format output as json.",
2171
+ "helpGroup": "GLOBAL",
2172
+ "name": "json",
2173
+ "allowNo": false,
2174
+ "type": "boolean"
2175
+ },
2176
+ "env": {
2177
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
2178
+ "name": "env",
2179
+ "hasDynamicHelp": false,
2180
+ "multiple": false,
2181
+ "type": "option"
2182
+ },
2183
+ "against": {
2184
+ "description": "Compare the primary environment against this second environment instead of against local files",
2185
+ "name": "against",
2186
+ "hasDynamicHelp": false,
2187
+ "multiple": false,
2188
+ "type": "option"
2189
+ }
2190
+ },
2191
+ "hasDynamicHelp": false,
2192
+ "hiddenAliases": [],
2193
+ "id": "option:diff",
2194
+ "pluginAlias": "@loopress/cli",
2195
+ "pluginName": "@loopress/cli",
2196
+ "pluginType": "core",
2197
+ "strict": true,
2198
+ "enableJsonFlag": true,
2199
+ "dryRunFlag": {
2200
+ "dry-run": {
2201
+ "char": "d",
2202
+ "description": "Show what would change without making changes",
2203
+ "allowNo": false,
2204
+ "type": "boolean"
2205
+ }
2206
+ },
2207
+ "yesFlag": {
2208
+ "yes": {
2209
+ "char": "y",
2210
+ "description": "Answer yes to confirmation prompts",
2211
+ "allowNo": false,
2212
+ "type": "boolean"
2213
+ }
2214
+ },
2215
+ "againstFlag": {
2216
+ "against": {
2217
+ "description": "Compare the primary environment against this second environment instead of against local files",
2218
+ "input": [],
2219
+ "multiple": false,
2220
+ "type": "option"
2221
+ }
2222
+ },
2223
+ "isESM": true,
2224
+ "relativePath": [
2225
+ "dist",
2226
+ "commands",
2227
+ "option",
2228
+ "diff.js"
2229
+ ]
2230
+ },
2231
+ "option:list": {
2232
+ "aliases": [],
2233
+ "args": {},
2234
+ "description": "List WordPress option names currently on the site (names and autoload only, never values). CORE flags a WordPress-native default (certain); SOURCE? is a best-effort guessed plugin slug, found by name or by scanning active plugins' own PHP source (uncertain unless confirmed, occasionally wrong or blank, never trust it over CORE); PLUGIN is that slug's own declared display name, a label only, no confidence of its own. Use this to find the name of the option you want, then `lps option add <name>` to track it.",
2235
+ "examples": [
2236
+ "$ lps option list",
2237
+ "$ lps option list --no-core"
2238
+ ],
2239
+ "flags": {
2240
+ "json": {
2241
+ "description": "Format output as json.",
2242
+ "helpGroup": "GLOBAL",
2243
+ "name": "json",
2244
+ "allowNo": false,
2245
+ "type": "boolean"
2246
+ },
2247
+ "env": {
2248
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
2249
+ "name": "env",
2250
+ "hasDynamicHelp": false,
2251
+ "multiple": false,
2252
+ "type": "option"
2253
+ },
2254
+ "no-core": {
2255
+ "description": "Exclude WordPress-native default options and the CORE column from the output, including --json",
2256
+ "name": "no-core",
2257
+ "allowNo": false,
2258
+ "type": "boolean"
2259
+ }
2260
+ },
2261
+ "hasDynamicHelp": false,
2262
+ "hiddenAliases": [],
2263
+ "id": "option:list",
2264
+ "pluginAlias": "@loopress/cli",
2265
+ "pluginName": "@loopress/cli",
2266
+ "pluginType": "core",
2267
+ "strict": true,
2268
+ "enableJsonFlag": true,
2269
+ "dryRunFlag": {
2270
+ "dry-run": {
2271
+ "char": "d",
2272
+ "description": "Show what would change without making changes",
2273
+ "allowNo": false,
2274
+ "type": "boolean"
2275
+ }
2276
+ },
2277
+ "yesFlag": {
2278
+ "yes": {
2279
+ "char": "y",
2280
+ "description": "Answer yes to confirmation prompts",
2281
+ "allowNo": false,
2282
+ "type": "boolean"
2283
+ }
2284
+ },
2285
+ "isESM": true,
2286
+ "relativePath": [
2287
+ "dist",
2288
+ "commands",
2289
+ "option",
2290
+ "list.js"
2291
+ ]
2292
+ },
2293
+ "option:pull": {
2294
+ "aliases": [],
2295
+ "args": {
2296
+ "path": {
2297
+ "description": "Path to options directory (overrides project config)",
2298
+ "name": "path"
2299
+ }
2300
+ },
2301
+ "description": "Refresh locally tracked options from WordPress. Options not yet tracked are never pulled, run `lps option add <name>` for those first.",
2302
+ "examples": [
2303
+ "$ lps option pull"
2304
+ ],
2305
+ "flags": {
2306
+ "json": {
2307
+ "description": "Format output as json.",
2308
+ "helpGroup": "GLOBAL",
2309
+ "name": "json",
2310
+ "allowNo": false,
2311
+ "type": "boolean"
2312
+ },
2313
+ "env": {
2314
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
2315
+ "name": "env",
2316
+ "hasDynamicHelp": false,
2317
+ "multiple": false,
2318
+ "type": "option"
2319
+ },
2320
+ "dry-run": {
2321
+ "char": "d",
2322
+ "description": "Show what would change without making changes",
2323
+ "name": "dry-run",
2324
+ "allowNo": false,
2325
+ "type": "boolean"
2326
+ },
2327
+ "yes": {
2328
+ "char": "y",
2329
+ "description": "Answer yes to confirmation prompts",
2330
+ "name": "yes",
2331
+ "allowNo": false,
2332
+ "type": "boolean"
2333
+ }
2334
+ },
2335
+ "hasDynamicHelp": false,
2336
+ "hiddenAliases": [],
2337
+ "id": "option:pull",
2338
+ "pluginAlias": "@loopress/cli",
2339
+ "pluginName": "@loopress/cli",
2340
+ "pluginType": "core",
2341
+ "strict": true,
2342
+ "enableJsonFlag": true,
2343
+ "dryRunFlag": {
2344
+ "dry-run": {
2345
+ "char": "d",
2346
+ "description": "Show what would change without making changes",
2347
+ "allowNo": false,
2348
+ "type": "boolean"
2349
+ }
2350
+ },
2351
+ "yesFlag": {
2352
+ "yes": {
2353
+ "char": "y",
2354
+ "description": "Answer yes to confirmation prompts",
2355
+ "allowNo": false,
2356
+ "type": "boolean"
2357
+ }
2358
+ },
2359
+ "isESM": true,
2360
+ "relativePath": [
2361
+ "dist",
2362
+ "commands",
2363
+ "option",
2364
+ "pull.js"
2365
+ ]
2366
+ },
2367
+ "option:push": {
2368
+ "aliases": [],
2369
+ "args": {
2370
+ "path": {
2371
+ "description": "Path to options directory (overrides project config)",
2372
+ "name": "path"
2373
+ }
2374
+ },
2375
+ "description": "Push locally tracked, non-readonly options to WordPress (upsert only, never deletes an untracked option). Options marked \"readonly\": true in their local file are skipped, edit the file to override.",
2376
+ "examples": [
2377
+ "$ lps option push"
2378
+ ],
2379
+ "flags": {
2380
+ "json": {
2381
+ "description": "Format output as json.",
2382
+ "helpGroup": "GLOBAL",
2383
+ "name": "json",
2384
+ "allowNo": false,
2385
+ "type": "boolean"
2386
+ },
2387
+ "env": {
2388
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
2389
+ "name": "env",
2390
+ "hasDynamicHelp": false,
2391
+ "multiple": false,
2392
+ "type": "option"
2393
+ },
2394
+ "dry-run": {
2395
+ "char": "d",
2396
+ "description": "Show what would change without making changes",
2397
+ "name": "dry-run",
2398
+ "allowNo": false,
2399
+ "type": "boolean"
2400
+ },
2401
+ "yes": {
2402
+ "char": "y",
2403
+ "description": "Answer yes to confirmation prompts",
2404
+ "name": "yes",
2405
+ "allowNo": false,
2406
+ "type": "boolean"
2407
+ }
2408
+ },
2409
+ "hasDynamicHelp": false,
2410
+ "hiddenAliases": [],
2411
+ "id": "option:push",
2412
+ "pluginAlias": "@loopress/cli",
2413
+ "pluginName": "@loopress/cli",
2414
+ "pluginType": "core",
2415
+ "strict": true,
2416
+ "enableJsonFlag": true,
2417
+ "isESM": true,
2418
+ "relativePath": [
2419
+ "dist",
2420
+ "commands",
2421
+ "option",
2422
+ "push.js"
2423
+ ]
2424
+ },
2425
+ "option:remove": {
2426
+ "aliases": [],
2427
+ "args": {
2428
+ "name": {
2429
+ "description": "Option name to stop tracking",
2430
+ "name": "name",
2431
+ "required": true
2432
+ }
2433
+ },
2434
+ "description": "Stop tracking an option locally and delete it from WordPress. Local untracking always happens (git-reversible); pass --local-only to skip the WordPress delete and only stop tracking.",
2435
+ "examples": [
2436
+ "$ lps option remove wpseo_titles",
2437
+ "$ lps option remove wpseo_titles --local-only"
2438
+ ],
2439
+ "flags": {
2440
+ "json": {
2441
+ "description": "Format output as json.",
2442
+ "helpGroup": "GLOBAL",
2443
+ "name": "json",
2444
+ "allowNo": false,
2445
+ "type": "boolean"
2446
+ },
2447
+ "env": {
2448
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
2449
+ "name": "env",
2450
+ "hasDynamicHelp": false,
2451
+ "multiple": false,
2452
+ "type": "option"
2453
+ },
2454
+ "dry-run": {
2455
+ "char": "d",
2456
+ "description": "Show what would change without making changes",
2457
+ "name": "dry-run",
2458
+ "allowNo": false,
2459
+ "type": "boolean"
2460
+ },
2461
+ "yes": {
2462
+ "char": "y",
2463
+ "description": "Answer yes to confirmation prompts",
2464
+ "name": "yes",
2465
+ "allowNo": false,
2466
+ "type": "boolean"
2467
+ },
2468
+ "local-only": {
2469
+ "description": "Untrack locally without deleting the option on WordPress",
2470
+ "name": "local-only",
2471
+ "allowNo": false,
2472
+ "type": "boolean"
2473
+ },
2474
+ "path": {
2475
+ "description": "Path to options directory (overrides project config)",
2476
+ "name": "path",
2477
+ "hasDynamicHelp": false,
2478
+ "multiple": false,
2479
+ "type": "option"
2480
+ }
2481
+ },
2482
+ "hasDynamicHelp": false,
2483
+ "hiddenAliases": [],
2484
+ "id": "option:remove",
2485
+ "pluginAlias": "@loopress/cli",
2486
+ "pluginName": "@loopress/cli",
2487
+ "pluginType": "core",
2488
+ "strict": true,
2489
+ "enableJsonFlag": true,
2490
+ "dryRunFlag": {
2491
+ "dry-run": {
2492
+ "char": "d",
2493
+ "description": "Show what would change without making changes",
2494
+ "allowNo": false,
2495
+ "type": "boolean"
2496
+ }
2497
+ },
2498
+ "yesFlag": {
2499
+ "yes": {
2500
+ "char": "y",
2501
+ "description": "Answer yes to confirmation prompts",
2502
+ "allowNo": false,
2503
+ "type": "boolean"
2504
+ }
2505
+ },
2506
+ "isESM": true,
2507
+ "relativePath": [
2508
+ "dist",
2509
+ "commands",
2510
+ "option",
2511
+ "remove.js"
2512
+ ]
2513
+ },
2514
+ "plugin:add": {
2515
+ "aliases": [],
2516
+ "args": {
2517
+ "slug": {
2518
+ "description": "Plugin slug on WordPress.org",
2519
+ "name": "slug",
2520
+ "required": true
2521
+ }
2522
+ },
2523
+ "description": "Add a WordPress.org plugin to loopress.json",
2524
+ "examples": [
2525
+ "$ lps plugin add woocommerce",
2526
+ "$ lps plugin add woocommerce --version 9.4.2",
2527
+ "$ lps plugin add contact-form-7 --dry-run"
2528
+ ],
2529
+ "flags": {
2530
+ "env": {
2531
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
2532
+ "name": "env",
2533
+ "hasDynamicHelp": false,
2534
+ "multiple": false,
2535
+ "type": "option"
2536
+ },
2537
+ "dry-run": {
2538
+ "char": "d",
2539
+ "description": "Show what would change without making changes",
2540
+ "name": "dry-run",
2541
+ "allowNo": false,
2542
+ "type": "boolean"
2543
+ },
2544
+ "version": {
2545
+ "description": "Exact version to pin (default: \"latest\", tracked on every push)",
2546
+ "name": "version",
2547
+ "hasDynamicHelp": false,
2548
+ "multiple": false,
2549
+ "type": "option"
2550
+ }
2551
+ },
2552
+ "hasDynamicHelp": false,
2553
+ "hiddenAliases": [],
2554
+ "id": "plugin:add",
2555
+ "pluginAlias": "@loopress/cli",
2556
+ "pluginName": "@loopress/cli",
2557
+ "pluginType": "core",
2558
+ "strict": true,
2559
+ "enableJsonFlag": false,
2560
+ "dryRunFlag": {
2561
+ "dry-run": {
2562
+ "char": "d",
2563
+ "description": "Show what would change without making changes",
2564
+ "allowNo": false,
2565
+ "type": "boolean"
2566
+ }
2567
+ },
2568
+ "yesFlag": {
2569
+ "yes": {
2570
+ "char": "y",
2571
+ "description": "Answer yes to confirmation prompts",
2572
+ "allowNo": false,
2573
+ "type": "boolean"
2574
+ }
2575
+ },
2576
+ "isESM": true,
2577
+ "relativePath": [
2578
+ "dist",
2579
+ "commands",
2580
+ "plugin",
2581
+ "add.js"
2582
+ ]
2583
+ },
2584
+ "plugin:audit": {
2585
+ "aliases": [],
2586
+ "args": {},
2587
+ "description": "Check the plugins in loopress.json for known vulnerabilities and health issues",
2588
+ "examples": [
2589
+ "$ lps plugin audit"
2590
+ ],
2591
+ "flags": {
2592
+ "json": {
2593
+ "description": "Format output as json.",
2594
+ "helpGroup": "GLOBAL",
2595
+ "name": "json",
2596
+ "allowNo": false,
2597
+ "type": "boolean"
2598
+ },
2599
+ "env": {
2600
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
2601
+ "name": "env",
2602
+ "hasDynamicHelp": false,
2603
+ "multiple": false,
2604
+ "type": "option"
2605
+ }
2606
+ },
2607
+ "hasDynamicHelp": false,
2608
+ "hiddenAliases": [],
2609
+ "id": "plugin:audit",
2610
+ "pluginAlias": "@loopress/cli",
2611
+ "pluginName": "@loopress/cli",
2612
+ "pluginType": "core",
2613
+ "strict": true,
2614
+ "enableJsonFlag": true,
2615
+ "dryRunFlag": {
2616
+ "dry-run": {
2617
+ "char": "d",
2618
+ "description": "Show what would change without making changes",
2619
+ "allowNo": false,
2620
+ "type": "boolean"
2621
+ }
2622
+ },
2623
+ "yesFlag": {
2624
+ "yes": {
2625
+ "char": "y",
2626
+ "description": "Answer yes to confirmation prompts",
2627
+ "allowNo": false,
2628
+ "type": "boolean"
2629
+ }
2630
+ },
2631
+ "isESM": true,
2632
+ "relativePath": [
2633
+ "dist",
2634
+ "commands",
2635
+ "plugin",
2636
+ "audit.js"
2637
+ ]
2638
+ },
2639
+ "plugin:pull": {
2640
+ "aliases": [],
2641
+ "args": {},
2642
+ "description": "Pull installed plugins from WordPress into loopress.json, pinned to their live versions",
2643
+ "examples": [
2644
+ "$ lps plugin pull",
2645
+ "$ lps plugin pull --dry-run"
2646
+ ],
2647
+ "flags": {
2648
+ "json": {
2649
+ "description": "Format output as json.",
2650
+ "helpGroup": "GLOBAL",
2651
+ "name": "json",
2652
+ "allowNo": false,
2653
+ "type": "boolean"
2654
+ },
2655
+ "env": {
2656
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
2657
+ "name": "env",
2658
+ "hasDynamicHelp": false,
2659
+ "multiple": false,
2660
+ "type": "option"
2661
+ },
2662
+ "dry-run": {
2663
+ "char": "d",
2664
+ "description": "Show what would change without making changes",
2665
+ "name": "dry-run",
2666
+ "allowNo": false,
2667
+ "type": "boolean"
2668
+ }
2669
+ },
2670
+ "hasDynamicHelp": false,
2671
+ "hiddenAliases": [],
2672
+ "id": "plugin:pull",
2673
+ "pluginAlias": "@loopress/cli",
2674
+ "pluginName": "@loopress/cli",
2675
+ "pluginType": "core",
2676
+ "strict": true,
2677
+ "enableJsonFlag": true,
2678
+ "dryRunFlag": {
2679
+ "dry-run": {
2680
+ "char": "d",
2681
+ "description": "Show what would change without making changes",
2682
+ "allowNo": false,
2683
+ "type": "boolean"
2684
+ }
2685
+ },
2686
+ "yesFlag": {
2687
+ "yes": {
2688
+ "char": "y",
2689
+ "description": "Answer yes to confirmation prompts",
2690
+ "allowNo": false,
2691
+ "type": "boolean"
2692
+ }
2693
+ },
2694
+ "isESM": true,
2695
+ "relativePath": [
2696
+ "dist",
2697
+ "commands",
2698
+ "plugin",
2699
+ "pull.js"
2700
+ ]
2701
+ },
2702
+ "plugin:push": {
2703
+ "aliases": [],
2704
+ "args": {},
2705
+ "description": "Install plugins on WordPress to match loopress.json, pinned via Composer + WPackagist",
2706
+ "examples": [
2707
+ "$ lps plugin push",
2708
+ "$ lps plugin push --dry-run",
2709
+ "$ lps plugin push --force --prune"
2710
+ ],
2711
+ "flags": {
2712
+ "json": {
2713
+ "description": "Format output as json.",
2714
+ "helpGroup": "GLOBAL",
2715
+ "name": "json",
2716
+ "allowNo": false,
2717
+ "type": "boolean"
2718
+ },
2719
+ "env": {
2720
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
2721
+ "name": "env",
2722
+ "hasDynamicHelp": false,
2723
+ "multiple": false,
2724
+ "type": "option"
2725
+ },
2726
+ "dry-run": {
2727
+ "char": "d",
2728
+ "description": "Show what would change without making changes",
2729
+ "name": "dry-run",
2730
+ "allowNo": false,
2731
+ "type": "boolean"
2732
+ },
2733
+ "yes": {
2734
+ "char": "y",
2735
+ "description": "Answer yes to confirmation prompts",
2736
+ "name": "yes",
2737
+ "allowNo": false,
2738
+ "type": "boolean"
2739
+ },
2740
+ "force": {
2741
+ "description": "Allow downgrades and let Loopress take over plugins installed outside it (replaces their files)",
2742
+ "name": "force",
2743
+ "allowNo": false,
2744
+ "type": "boolean"
2745
+ },
2746
+ "prune": {
2747
+ "description": "Deactivate plugins that are active on the site but absent from loopress.json",
2748
+ "name": "prune",
2749
+ "allowNo": false,
2750
+ "type": "boolean"
2751
+ }
2752
+ },
2753
+ "hasDynamicHelp": false,
2754
+ "hiddenAliases": [],
2755
+ "id": "plugin:push",
2756
+ "pluginAlias": "@loopress/cli",
2757
+ "pluginName": "@loopress/cli",
2758
+ "pluginType": "core",
2759
+ "strict": true,
2760
+ "enableJsonFlag": true,
2761
+ "isESM": true,
2762
+ "relativePath": [
2763
+ "dist",
2764
+ "commands",
2765
+ "plugin",
2766
+ "push.js"
2767
+ ]
2768
+ },
2769
+ "plugin:status": {
2770
+ "aliases": [],
2771
+ "args": {},
2772
+ "description": "Compare the plugins on WordPress against loopress.json and report drift",
2773
+ "examples": [
2774
+ "$ lps plugin status"
2775
+ ],
2776
+ "flags": {
2777
+ "json": {
2778
+ "description": "Format output as json.",
2779
+ "helpGroup": "GLOBAL",
2780
+ "name": "json",
2781
+ "allowNo": false,
2782
+ "type": "boolean"
2783
+ },
2784
+ "env": {
2785
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
2786
+ "name": "env",
2787
+ "hasDynamicHelp": false,
2788
+ "multiple": false,
2789
+ "type": "option"
2790
+ }
2791
+ },
2792
+ "hasDynamicHelp": false,
2793
+ "hiddenAliases": [],
2794
+ "id": "plugin:status",
2795
+ "pluginAlias": "@loopress/cli",
2796
+ "pluginName": "@loopress/cli",
2797
+ "pluginType": "core",
2798
+ "strict": true,
2799
+ "enableJsonFlag": true,
2800
+ "dryRunFlag": {
2801
+ "dry-run": {
2802
+ "char": "d",
2803
+ "description": "Show what would change without making changes",
2804
+ "allowNo": false,
2805
+ "type": "boolean"
2806
+ }
2807
+ },
2808
+ "yesFlag": {
2809
+ "yes": {
2810
+ "char": "y",
2811
+ "description": "Answer yes to confirmation prompts",
2812
+ "allowNo": false,
2813
+ "type": "boolean"
2814
+ }
2815
+ },
2816
+ "isESM": true,
2817
+ "relativePath": [
2818
+ "dist",
2819
+ "commands",
2820
+ "plugin",
2821
+ "status.js"
1569
2822
  ]
1570
2823
  },
1571
2824
  "project:config": {
@@ -1777,6 +3030,83 @@
1777
3030
  "switch.js"
1778
3031
  ]
1779
3032
  },
3033
+ "seo:diff": {
3034
+ "aliases": [],
3035
+ "args": {
3036
+ "path": {
3037
+ "description": "Path to SEO directory (overrides project config)",
3038
+ "name": "path"
3039
+ }
3040
+ },
3041
+ "description": "Show what differs in SEO settings, post meta, and redirects between your local files and a WordPress environment, or between two environments",
3042
+ "examples": [
3043
+ "$ lps seo diff",
3044
+ "$ lps seo diff --env staging",
3045
+ "$ lps seo diff --env staging --against production"
3046
+ ],
3047
+ "flags": {
3048
+ "json": {
3049
+ "description": "Format output as json.",
3050
+ "helpGroup": "GLOBAL",
3051
+ "name": "json",
3052
+ "allowNo": false,
3053
+ "type": "boolean"
3054
+ },
3055
+ "env": {
3056
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
3057
+ "name": "env",
3058
+ "hasDynamicHelp": false,
3059
+ "multiple": false,
3060
+ "type": "option"
3061
+ },
3062
+ "against": {
3063
+ "description": "Compare the primary environment against this second environment instead of against local files",
3064
+ "name": "against",
3065
+ "hasDynamicHelp": false,
3066
+ "multiple": false,
3067
+ "type": "option"
3068
+ }
3069
+ },
3070
+ "hasDynamicHelp": false,
3071
+ "hiddenAliases": [],
3072
+ "id": "seo:diff",
3073
+ "pluginAlias": "@loopress/cli",
3074
+ "pluginName": "@loopress/cli",
3075
+ "pluginType": "core",
3076
+ "strict": true,
3077
+ "enableJsonFlag": true,
3078
+ "dryRunFlag": {
3079
+ "dry-run": {
3080
+ "char": "d",
3081
+ "description": "Show what would change without making changes",
3082
+ "allowNo": false,
3083
+ "type": "boolean"
3084
+ }
3085
+ },
3086
+ "yesFlag": {
3087
+ "yes": {
3088
+ "char": "y",
3089
+ "description": "Answer yes to confirmation prompts",
3090
+ "allowNo": false,
3091
+ "type": "boolean"
3092
+ }
3093
+ },
3094
+ "againstFlag": {
3095
+ "against": {
3096
+ "description": "Compare the primary environment against this second environment instead of against local files",
3097
+ "input": [],
3098
+ "multiple": false,
3099
+ "type": "option"
3100
+ }
3101
+ },
3102
+ "isESM": true,
3103
+ "relativePath": [
3104
+ "dist",
3105
+ "commands",
3106
+ "seo",
3107
+ "diff.js"
3108
+ ]
3109
+ },
1780
3110
  "seo:list": {
1781
3111
  "aliases": [],
1782
3112
  "args": {},
@@ -1938,31 +3268,108 @@
1938
3268
  "dry-run": {
1939
3269
  "char": "d",
1940
3270
  "description": "Show what would change without making changes",
1941
- "name": "dry-run",
3271
+ "name": "dry-run",
3272
+ "allowNo": false,
3273
+ "type": "boolean"
3274
+ },
3275
+ "yes": {
3276
+ "char": "y",
3277
+ "description": "Answer yes to confirmation prompts",
3278
+ "name": "yes",
3279
+ "allowNo": false,
3280
+ "type": "boolean"
3281
+ }
3282
+ },
3283
+ "hasDynamicHelp": false,
3284
+ "hiddenAliases": [],
3285
+ "id": "seo:push",
3286
+ "pluginAlias": "@loopress/cli",
3287
+ "pluginName": "@loopress/cli",
3288
+ "pluginType": "core",
3289
+ "strict": true,
3290
+ "isESM": true,
3291
+ "relativePath": [
3292
+ "dist",
3293
+ "commands",
3294
+ "seo",
3295
+ "push.js"
3296
+ ]
3297
+ },
3298
+ "snippet:diff": {
3299
+ "aliases": [],
3300
+ "args": {
3301
+ "path": {
3302
+ "description": "Path to snippets directory (overrides project config)",
3303
+ "name": "path"
3304
+ }
3305
+ },
3306
+ "description": "Show what differs in snippets between your local files and a WordPress environment, or between two environments",
3307
+ "examples": [
3308
+ "$ lps snippet diff",
3309
+ "$ lps snippet diff --env staging",
3310
+ "$ lps snippet diff --env staging --against production"
3311
+ ],
3312
+ "flags": {
3313
+ "json": {
3314
+ "description": "Format output as json.",
3315
+ "helpGroup": "GLOBAL",
3316
+ "name": "json",
3317
+ "allowNo": false,
3318
+ "type": "boolean"
3319
+ },
3320
+ "env": {
3321
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
3322
+ "name": "env",
3323
+ "hasDynamicHelp": false,
3324
+ "multiple": false,
3325
+ "type": "option"
3326
+ },
3327
+ "against": {
3328
+ "description": "Compare the primary environment against this second environment instead of against local files",
3329
+ "name": "against",
3330
+ "hasDynamicHelp": false,
3331
+ "multiple": false,
3332
+ "type": "option"
3333
+ }
3334
+ },
3335
+ "hasDynamicHelp": false,
3336
+ "hiddenAliases": [],
3337
+ "id": "snippet:diff",
3338
+ "pluginAlias": "@loopress/cli",
3339
+ "pluginName": "@loopress/cli",
3340
+ "pluginType": "core",
3341
+ "strict": true,
3342
+ "enableJsonFlag": true,
3343
+ "dryRunFlag": {
3344
+ "dry-run": {
3345
+ "char": "d",
3346
+ "description": "Show what would change without making changes",
1942
3347
  "allowNo": false,
1943
3348
  "type": "boolean"
1944
- },
3349
+ }
3350
+ },
3351
+ "yesFlag": {
1945
3352
  "yes": {
1946
3353
  "char": "y",
1947
3354
  "description": "Answer yes to confirmation prompts",
1948
- "name": "yes",
1949
3355
  "allowNo": false,
1950
3356
  "type": "boolean"
1951
3357
  }
1952
3358
  },
1953
- "hasDynamicHelp": false,
1954
- "hiddenAliases": [],
1955
- "id": "seo:push",
1956
- "pluginAlias": "@loopress/cli",
1957
- "pluginName": "@loopress/cli",
1958
- "pluginType": "core",
1959
- "strict": true,
3359
+ "againstFlag": {
3360
+ "against": {
3361
+ "description": "Compare the primary environment against this second environment instead of against local files",
3362
+ "input": [],
3363
+ "multiple": false,
3364
+ "type": "option"
3365
+ }
3366
+ },
1960
3367
  "isESM": true,
1961
3368
  "relativePath": [
1962
3369
  "dist",
1963
3370
  "commands",
1964
- "seo",
1965
- "push.js"
3371
+ "snippet",
3372
+ "diff.js"
1966
3373
  ]
1967
3374
  },
1968
3375
  "snippet:list": {
@@ -2231,7 +3638,253 @@
2231
3638
  "telemetry",
2232
3639
  "enable.js"
2233
3640
  ]
3641
+ },
3642
+ "theme:add": {
3643
+ "aliases": [],
3644
+ "args": {
3645
+ "slug": {
3646
+ "description": "Theme slug on WordPress.org",
3647
+ "name": "slug",
3648
+ "required": true
3649
+ }
3650
+ },
3651
+ "description": "Add a WordPress.org theme to loopress.json",
3652
+ "examples": [
3653
+ "$ lps theme add generatepress",
3654
+ "$ lps theme add generatepress --version 3.4.0"
3655
+ ],
3656
+ "flags": {
3657
+ "env": {
3658
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
3659
+ "name": "env",
3660
+ "hasDynamicHelp": false,
3661
+ "multiple": false,
3662
+ "type": "option"
3663
+ },
3664
+ "dry-run": {
3665
+ "char": "d",
3666
+ "description": "Show what would change without making changes",
3667
+ "name": "dry-run",
3668
+ "allowNo": false,
3669
+ "type": "boolean"
3670
+ },
3671
+ "version": {
3672
+ "description": "Exact version to pin (default: \"latest\")",
3673
+ "name": "version",
3674
+ "hasDynamicHelp": false,
3675
+ "multiple": false,
3676
+ "type": "option"
3677
+ }
3678
+ },
3679
+ "hasDynamicHelp": false,
3680
+ "hiddenAliases": [],
3681
+ "id": "theme:add",
3682
+ "pluginAlias": "@loopress/cli",
3683
+ "pluginName": "@loopress/cli",
3684
+ "pluginType": "core",
3685
+ "strict": true,
3686
+ "enableJsonFlag": false,
3687
+ "dryRunFlag": {
3688
+ "dry-run": {
3689
+ "char": "d",
3690
+ "description": "Show what would change without making changes",
3691
+ "allowNo": false,
3692
+ "type": "boolean"
3693
+ }
3694
+ },
3695
+ "yesFlag": {
3696
+ "yes": {
3697
+ "char": "y",
3698
+ "description": "Answer yes to confirmation prompts",
3699
+ "allowNo": false,
3700
+ "type": "boolean"
3701
+ }
3702
+ },
3703
+ "isESM": true,
3704
+ "relativePath": [
3705
+ "dist",
3706
+ "commands",
3707
+ "theme",
3708
+ "add.js"
3709
+ ]
3710
+ },
3711
+ "theme:pull": {
3712
+ "aliases": [],
3713
+ "args": {},
3714
+ "description": "Pull installed themes from WordPress into loopress.json, pinned to their live versions",
3715
+ "examples": [
3716
+ "$ lps theme pull"
3717
+ ],
3718
+ "flags": {
3719
+ "json": {
3720
+ "description": "Format output as json.",
3721
+ "helpGroup": "GLOBAL",
3722
+ "name": "json",
3723
+ "allowNo": false,
3724
+ "type": "boolean"
3725
+ },
3726
+ "env": {
3727
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
3728
+ "name": "env",
3729
+ "hasDynamicHelp": false,
3730
+ "multiple": false,
3731
+ "type": "option"
3732
+ },
3733
+ "dry-run": {
3734
+ "char": "d",
3735
+ "description": "Show what would change without making changes",
3736
+ "name": "dry-run",
3737
+ "allowNo": false,
3738
+ "type": "boolean"
3739
+ }
3740
+ },
3741
+ "hasDynamicHelp": false,
3742
+ "hiddenAliases": [],
3743
+ "id": "theme:pull",
3744
+ "pluginAlias": "@loopress/cli",
3745
+ "pluginName": "@loopress/cli",
3746
+ "pluginType": "core",
3747
+ "strict": true,
3748
+ "enableJsonFlag": true,
3749
+ "dryRunFlag": {
3750
+ "dry-run": {
3751
+ "char": "d",
3752
+ "description": "Show what would change without making changes",
3753
+ "allowNo": false,
3754
+ "type": "boolean"
3755
+ }
3756
+ },
3757
+ "yesFlag": {
3758
+ "yes": {
3759
+ "char": "y",
3760
+ "description": "Answer yes to confirmation prompts",
3761
+ "allowNo": false,
3762
+ "type": "boolean"
3763
+ }
3764
+ },
3765
+ "isESM": true,
3766
+ "relativePath": [
3767
+ "dist",
3768
+ "commands",
3769
+ "theme",
3770
+ "pull.js"
3771
+ ]
3772
+ },
3773
+ "theme:push": {
3774
+ "aliases": [],
3775
+ "args": {},
3776
+ "description": "Install themes on WordPress to match loopress.json (versions only, never switches the active theme)",
3777
+ "examples": [
3778
+ "$ lps theme push",
3779
+ "$ lps theme push --force"
3780
+ ],
3781
+ "flags": {
3782
+ "json": {
3783
+ "description": "Format output as json.",
3784
+ "helpGroup": "GLOBAL",
3785
+ "name": "json",
3786
+ "allowNo": false,
3787
+ "type": "boolean"
3788
+ },
3789
+ "env": {
3790
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
3791
+ "name": "env",
3792
+ "hasDynamicHelp": false,
3793
+ "multiple": false,
3794
+ "type": "option"
3795
+ },
3796
+ "dry-run": {
3797
+ "char": "d",
3798
+ "description": "Show what would change without making changes",
3799
+ "name": "dry-run",
3800
+ "allowNo": false,
3801
+ "type": "boolean"
3802
+ },
3803
+ "yes": {
3804
+ "char": "y",
3805
+ "description": "Answer yes to confirmation prompts",
3806
+ "name": "yes",
3807
+ "allowNo": false,
3808
+ "type": "boolean"
3809
+ },
3810
+ "force": {
3811
+ "description": "Allow downgrades and take over themes installed outside Loopress",
3812
+ "name": "force",
3813
+ "allowNo": false,
3814
+ "type": "boolean"
3815
+ }
3816
+ },
3817
+ "hasDynamicHelp": false,
3818
+ "hiddenAliases": [],
3819
+ "id": "theme:push",
3820
+ "pluginAlias": "@loopress/cli",
3821
+ "pluginName": "@loopress/cli",
3822
+ "pluginType": "core",
3823
+ "strict": true,
3824
+ "enableJsonFlag": true,
3825
+ "isESM": true,
3826
+ "relativePath": [
3827
+ "dist",
3828
+ "commands",
3829
+ "theme",
3830
+ "push.js"
3831
+ ]
3832
+ },
3833
+ "theme:status": {
3834
+ "aliases": [],
3835
+ "args": {},
3836
+ "description": "Compare the themes on WordPress against loopress.json and report version drift",
3837
+ "examples": [
3838
+ "$ lps theme status"
3839
+ ],
3840
+ "flags": {
3841
+ "json": {
3842
+ "description": "Format output as json.",
3843
+ "helpGroup": "GLOBAL",
3844
+ "name": "json",
3845
+ "allowNo": false,
3846
+ "type": "boolean"
3847
+ },
3848
+ "env": {
3849
+ "description": "Target environment by name, overriding the globally active one (lps project switch)",
3850
+ "name": "env",
3851
+ "hasDynamicHelp": false,
3852
+ "multiple": false,
3853
+ "type": "option"
3854
+ }
3855
+ },
3856
+ "hasDynamicHelp": false,
3857
+ "hiddenAliases": [],
3858
+ "id": "theme:status",
3859
+ "pluginAlias": "@loopress/cli",
3860
+ "pluginName": "@loopress/cli",
3861
+ "pluginType": "core",
3862
+ "strict": true,
3863
+ "enableJsonFlag": true,
3864
+ "dryRunFlag": {
3865
+ "dry-run": {
3866
+ "char": "d",
3867
+ "description": "Show what would change without making changes",
3868
+ "allowNo": false,
3869
+ "type": "boolean"
3870
+ }
3871
+ },
3872
+ "yesFlag": {
3873
+ "yes": {
3874
+ "char": "y",
3875
+ "description": "Answer yes to confirmation prompts",
3876
+ "allowNo": false,
3877
+ "type": "boolean"
3878
+ }
3879
+ },
3880
+ "isESM": true,
3881
+ "relativePath": [
3882
+ "dist",
3883
+ "commands",
3884
+ "theme",
3885
+ "status.js"
3886
+ ]
2234
3887
  }
2235
3888
  },
2236
- "version": "0.22.0"
3889
+ "version": "0.24.0"
2237
3890
  }