@koda-sl/baker-cli 0.409.0 → 0.410.0-dev.53b577900
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 +17 -0
- package/dist/{chunk-QWRXQ2UC.js → chunk-TI5KBK4V.js} +4 -4
- package/dist/chunk-TI5KBK4V.js.map +1 -0
- package/dist/cli.js +911 -592
- package/dist/cli.js.map +1 -1
- package/dist/engine/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-QWRXQ2UC.js.map +0 -1
package/dist/cli.js
CHANGED
|
@@ -97,7 +97,7 @@ import {
|
|
|
97
97
|
withoutCastName,
|
|
98
98
|
wordCount,
|
|
99
99
|
ytDlpBlockSignal
|
|
100
|
-
} from "./chunk-
|
|
100
|
+
} from "./chunk-TI5KBK4V.js";
|
|
101
101
|
import {
|
|
102
102
|
NAME_CONTAINS_ARG,
|
|
103
103
|
csvOrJson,
|
|
@@ -173,9 +173,9 @@ import {
|
|
|
173
173
|
writeOutput
|
|
174
174
|
} from "./chunk-ISCXDKWB.js";
|
|
175
175
|
|
|
176
|
-
//
|
|
176
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/af.json
|
|
177
177
|
var require_af = __commonJS({
|
|
178
|
-
"
|
|
178
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/af.json"(exports, module) {
|
|
179
179
|
module.exports = {
|
|
180
180
|
locale: "af",
|
|
181
181
|
countries: {
|
|
@@ -434,9 +434,9 @@ var require_af = __commonJS({
|
|
|
434
434
|
}
|
|
435
435
|
});
|
|
436
436
|
|
|
437
|
-
//
|
|
437
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/am.json
|
|
438
438
|
var require_am = __commonJS({
|
|
439
|
-
"
|
|
439
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/am.json"(exports, module) {
|
|
440
440
|
module.exports = {
|
|
441
441
|
locale: "am",
|
|
442
442
|
countries: {
|
|
@@ -695,9 +695,9 @@ var require_am = __commonJS({
|
|
|
695
695
|
}
|
|
696
696
|
});
|
|
697
697
|
|
|
698
|
-
//
|
|
698
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ar.json
|
|
699
699
|
var require_ar = __commonJS({
|
|
700
|
-
"
|
|
700
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ar.json"(exports, module) {
|
|
701
701
|
module.exports = {
|
|
702
702
|
locale: "ar",
|
|
703
703
|
countries: {
|
|
@@ -956,9 +956,9 @@ var require_ar = __commonJS({
|
|
|
956
956
|
}
|
|
957
957
|
});
|
|
958
958
|
|
|
959
|
-
//
|
|
959
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/az.json
|
|
960
960
|
var require_az = __commonJS({
|
|
961
|
-
"
|
|
961
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/az.json"(exports, module) {
|
|
962
962
|
module.exports = {
|
|
963
963
|
locale: "az",
|
|
964
964
|
countries: {
|
|
@@ -1217,9 +1217,9 @@ var require_az = __commonJS({
|
|
|
1217
1217
|
}
|
|
1218
1218
|
});
|
|
1219
1219
|
|
|
1220
|
-
//
|
|
1220
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/be.json
|
|
1221
1221
|
var require_be = __commonJS({
|
|
1222
|
-
"
|
|
1222
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/be.json"(exports, module) {
|
|
1223
1223
|
module.exports = {
|
|
1224
1224
|
locale: "be",
|
|
1225
1225
|
countries: {
|
|
@@ -1478,9 +1478,9 @@ var require_be = __commonJS({
|
|
|
1478
1478
|
}
|
|
1479
1479
|
});
|
|
1480
1480
|
|
|
1481
|
-
//
|
|
1481
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/bg.json
|
|
1482
1482
|
var require_bg = __commonJS({
|
|
1483
|
-
"
|
|
1483
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/bg.json"(exports, module) {
|
|
1484
1484
|
module.exports = {
|
|
1485
1485
|
locale: "bg",
|
|
1486
1486
|
countries: {
|
|
@@ -1739,9 +1739,9 @@ var require_bg = __commonJS({
|
|
|
1739
1739
|
}
|
|
1740
1740
|
});
|
|
1741
1741
|
|
|
1742
|
-
//
|
|
1742
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/bn.json
|
|
1743
1743
|
var require_bn = __commonJS({
|
|
1744
|
-
"
|
|
1744
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/bn.json"(exports, module) {
|
|
1745
1745
|
module.exports = {
|
|
1746
1746
|
locale: "bn",
|
|
1747
1747
|
countries: {
|
|
@@ -2000,9 +2000,9 @@ var require_bn = __commonJS({
|
|
|
2000
2000
|
}
|
|
2001
2001
|
});
|
|
2002
2002
|
|
|
2003
|
-
//
|
|
2003
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/br.json
|
|
2004
2004
|
var require_br = __commonJS({
|
|
2005
|
-
"
|
|
2005
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/br.json"(exports, module) {
|
|
2006
2006
|
module.exports = {
|
|
2007
2007
|
locale: "br",
|
|
2008
2008
|
countries: {
|
|
@@ -2261,9 +2261,9 @@ var require_br = __commonJS({
|
|
|
2261
2261
|
}
|
|
2262
2262
|
});
|
|
2263
2263
|
|
|
2264
|
-
//
|
|
2264
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/bs.json
|
|
2265
2265
|
var require_bs = __commonJS({
|
|
2266
|
-
"
|
|
2266
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/bs.json"(exports, module) {
|
|
2267
2267
|
module.exports = {
|
|
2268
2268
|
locale: "bs",
|
|
2269
2269
|
countries: {
|
|
@@ -2522,9 +2522,9 @@ var require_bs = __commonJS({
|
|
|
2522
2522
|
}
|
|
2523
2523
|
});
|
|
2524
2524
|
|
|
2525
|
-
//
|
|
2525
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ca.json
|
|
2526
2526
|
var require_ca = __commonJS({
|
|
2527
|
-
"
|
|
2527
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ca.json"(exports, module) {
|
|
2528
2528
|
module.exports = {
|
|
2529
2529
|
locale: "ca",
|
|
2530
2530
|
countries: {
|
|
@@ -2783,9 +2783,9 @@ var require_ca = __commonJS({
|
|
|
2783
2783
|
}
|
|
2784
2784
|
});
|
|
2785
2785
|
|
|
2786
|
-
//
|
|
2786
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/cs.json
|
|
2787
2787
|
var require_cs = __commonJS({
|
|
2788
|
-
"
|
|
2788
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/cs.json"(exports, module) {
|
|
2789
2789
|
module.exports = {
|
|
2790
2790
|
locale: "cs",
|
|
2791
2791
|
countries: {
|
|
@@ -3044,9 +3044,9 @@ var require_cs = __commonJS({
|
|
|
3044
3044
|
}
|
|
3045
3045
|
});
|
|
3046
3046
|
|
|
3047
|
-
//
|
|
3047
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/cy.json
|
|
3048
3048
|
var require_cy = __commonJS({
|
|
3049
|
-
"
|
|
3049
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/cy.json"(exports, module) {
|
|
3050
3050
|
module.exports = {
|
|
3051
3051
|
locale: "cy",
|
|
3052
3052
|
countries: {
|
|
@@ -3305,9 +3305,9 @@ var require_cy = __commonJS({
|
|
|
3305
3305
|
}
|
|
3306
3306
|
});
|
|
3307
3307
|
|
|
3308
|
-
//
|
|
3308
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/da.json
|
|
3309
3309
|
var require_da = __commonJS({
|
|
3310
|
-
"
|
|
3310
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/da.json"(exports, module) {
|
|
3311
3311
|
module.exports = {
|
|
3312
3312
|
locale: "da",
|
|
3313
3313
|
countries: {
|
|
@@ -3566,9 +3566,9 @@ var require_da = __commonJS({
|
|
|
3566
3566
|
}
|
|
3567
3567
|
});
|
|
3568
3568
|
|
|
3569
|
-
//
|
|
3569
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/de.json
|
|
3570
3570
|
var require_de = __commonJS({
|
|
3571
|
-
"
|
|
3571
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/de.json"(exports, module) {
|
|
3572
3572
|
module.exports = {
|
|
3573
3573
|
locale: "de",
|
|
3574
3574
|
countries: {
|
|
@@ -3827,9 +3827,9 @@ var require_de = __commonJS({
|
|
|
3827
3827
|
}
|
|
3828
3828
|
});
|
|
3829
3829
|
|
|
3830
|
-
//
|
|
3830
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/dv.json
|
|
3831
3831
|
var require_dv = __commonJS({
|
|
3832
|
-
"
|
|
3832
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/dv.json"(exports, module) {
|
|
3833
3833
|
module.exports = {
|
|
3834
3834
|
locale: "dv",
|
|
3835
3835
|
countries: {
|
|
@@ -4088,9 +4088,9 @@ var require_dv = __commonJS({
|
|
|
4088
4088
|
}
|
|
4089
4089
|
});
|
|
4090
4090
|
|
|
4091
|
-
//
|
|
4091
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/el.json
|
|
4092
4092
|
var require_el = __commonJS({
|
|
4093
|
-
"
|
|
4093
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/el.json"(exports, module) {
|
|
4094
4094
|
module.exports = {
|
|
4095
4095
|
locale: "el",
|
|
4096
4096
|
countries: {
|
|
@@ -4416,9 +4416,9 @@ var require_el = __commonJS({
|
|
|
4416
4416
|
}
|
|
4417
4417
|
});
|
|
4418
4418
|
|
|
4419
|
-
//
|
|
4419
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/en.json
|
|
4420
4420
|
var require_en = __commonJS({
|
|
4421
|
-
"
|
|
4421
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/en.json"(exports, module) {
|
|
4422
4422
|
module.exports = {
|
|
4423
4423
|
locale: "en",
|
|
4424
4424
|
countries: {
|
|
@@ -4677,9 +4677,9 @@ var require_en = __commonJS({
|
|
|
4677
4677
|
}
|
|
4678
4678
|
});
|
|
4679
4679
|
|
|
4680
|
-
//
|
|
4680
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/es.json
|
|
4681
4681
|
var require_es = __commonJS({
|
|
4682
|
-
"
|
|
4682
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/es.json"(exports, module) {
|
|
4683
4683
|
module.exports = {
|
|
4684
4684
|
locale: "es",
|
|
4685
4685
|
countries: {
|
|
@@ -4938,9 +4938,9 @@ var require_es = __commonJS({
|
|
|
4938
4938
|
}
|
|
4939
4939
|
});
|
|
4940
4940
|
|
|
4941
|
-
//
|
|
4941
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/et.json
|
|
4942
4942
|
var require_et = __commonJS({
|
|
4943
|
-
"
|
|
4943
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/et.json"(exports, module) {
|
|
4944
4944
|
module.exports = {
|
|
4945
4945
|
locale: "et",
|
|
4946
4946
|
countries: {
|
|
@@ -5199,9 +5199,9 @@ var require_et = __commonJS({
|
|
|
5199
5199
|
}
|
|
5200
5200
|
});
|
|
5201
5201
|
|
|
5202
|
-
//
|
|
5202
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/eu.json
|
|
5203
5203
|
var require_eu = __commonJS({
|
|
5204
|
-
"
|
|
5204
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/eu.json"(exports, module) {
|
|
5205
5205
|
module.exports = {
|
|
5206
5206
|
locale: "eu",
|
|
5207
5207
|
countries: {
|
|
@@ -5460,9 +5460,9 @@ var require_eu = __commonJS({
|
|
|
5460
5460
|
}
|
|
5461
5461
|
});
|
|
5462
5462
|
|
|
5463
|
-
//
|
|
5463
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/fa.json
|
|
5464
5464
|
var require_fa = __commonJS({
|
|
5465
|
-
"
|
|
5465
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/fa.json"(exports, module) {
|
|
5466
5466
|
module.exports = {
|
|
5467
5467
|
locale: "fa",
|
|
5468
5468
|
countries: {
|
|
@@ -5721,9 +5721,9 @@ var require_fa = __commonJS({
|
|
|
5721
5721
|
}
|
|
5722
5722
|
});
|
|
5723
5723
|
|
|
5724
|
-
//
|
|
5724
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/fi.json
|
|
5725
5725
|
var require_fi = __commonJS({
|
|
5726
|
-
"
|
|
5726
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/fi.json"(exports, module) {
|
|
5727
5727
|
module.exports = {
|
|
5728
5728
|
locale: "fi",
|
|
5729
5729
|
countries: {
|
|
@@ -5982,9 +5982,9 @@ var require_fi = __commonJS({
|
|
|
5982
5982
|
}
|
|
5983
5983
|
});
|
|
5984
5984
|
|
|
5985
|
-
//
|
|
5985
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/fr.json
|
|
5986
5986
|
var require_fr = __commonJS({
|
|
5987
|
-
"
|
|
5987
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/fr.json"(exports, module) {
|
|
5988
5988
|
module.exports = {
|
|
5989
5989
|
locale: "fr",
|
|
5990
5990
|
countries: {
|
|
@@ -6243,9 +6243,9 @@ var require_fr = __commonJS({
|
|
|
6243
6243
|
}
|
|
6244
6244
|
});
|
|
6245
6245
|
|
|
6246
|
-
//
|
|
6246
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ga.json
|
|
6247
6247
|
var require_ga = __commonJS({
|
|
6248
|
-
"
|
|
6248
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ga.json"(exports, module) {
|
|
6249
6249
|
module.exports = {
|
|
6250
6250
|
locale: "ga",
|
|
6251
6251
|
countries: {
|
|
@@ -6504,9 +6504,9 @@ var require_ga = __commonJS({
|
|
|
6504
6504
|
}
|
|
6505
6505
|
});
|
|
6506
6506
|
|
|
6507
|
-
//
|
|
6507
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/gl.json
|
|
6508
6508
|
var require_gl = __commonJS({
|
|
6509
|
-
"
|
|
6509
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/gl.json"(exports, module) {
|
|
6510
6510
|
module.exports = {
|
|
6511
6511
|
locale: "gl",
|
|
6512
6512
|
countries: {
|
|
@@ -6765,9 +6765,9 @@ var require_gl = __commonJS({
|
|
|
6765
6765
|
}
|
|
6766
6766
|
});
|
|
6767
6767
|
|
|
6768
|
-
//
|
|
6768
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ha.json
|
|
6769
6769
|
var require_ha = __commonJS({
|
|
6770
|
-
"
|
|
6770
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ha.json"(exports, module) {
|
|
6771
6771
|
module.exports = {
|
|
6772
6772
|
locale: "ha",
|
|
6773
6773
|
countries: {
|
|
@@ -7026,9 +7026,9 @@ var require_ha = __commonJS({
|
|
|
7026
7026
|
}
|
|
7027
7027
|
});
|
|
7028
7028
|
|
|
7029
|
-
//
|
|
7029
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/he.json
|
|
7030
7030
|
var require_he = __commonJS({
|
|
7031
|
-
"
|
|
7031
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/he.json"(exports, module) {
|
|
7032
7032
|
module.exports = {
|
|
7033
7033
|
locale: "he",
|
|
7034
7034
|
countries: {
|
|
@@ -7287,9 +7287,9 @@ var require_he = __commonJS({
|
|
|
7287
7287
|
}
|
|
7288
7288
|
});
|
|
7289
7289
|
|
|
7290
|
-
//
|
|
7290
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/hi.json
|
|
7291
7291
|
var require_hi = __commonJS({
|
|
7292
|
-
"
|
|
7292
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/hi.json"(exports, module) {
|
|
7293
7293
|
module.exports = {
|
|
7294
7294
|
locale: "hi",
|
|
7295
7295
|
countries: {
|
|
@@ -7548,9 +7548,9 @@ var require_hi = __commonJS({
|
|
|
7548
7548
|
}
|
|
7549
7549
|
});
|
|
7550
7550
|
|
|
7551
|
-
//
|
|
7551
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/hr.json
|
|
7552
7552
|
var require_hr = __commonJS({
|
|
7553
|
-
"
|
|
7553
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/hr.json"(exports, module) {
|
|
7554
7554
|
module.exports = {
|
|
7555
7555
|
locale: "hr",
|
|
7556
7556
|
countries: {
|
|
@@ -7809,9 +7809,9 @@ var require_hr = __commonJS({
|
|
|
7809
7809
|
}
|
|
7810
7810
|
});
|
|
7811
7811
|
|
|
7812
|
-
//
|
|
7812
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/hu.json
|
|
7813
7813
|
var require_hu = __commonJS({
|
|
7814
|
-
"
|
|
7814
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/hu.json"(exports, module) {
|
|
7815
7815
|
module.exports = {
|
|
7816
7816
|
locale: "hu",
|
|
7817
7817
|
countries: {
|
|
@@ -8070,9 +8070,9 @@ var require_hu = __commonJS({
|
|
|
8070
8070
|
}
|
|
8071
8071
|
});
|
|
8072
8072
|
|
|
8073
|
-
//
|
|
8073
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/hy.json
|
|
8074
8074
|
var require_hy = __commonJS({
|
|
8075
|
-
"
|
|
8075
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/hy.json"(exports, module) {
|
|
8076
8076
|
module.exports = {
|
|
8077
8077
|
locale: "hy",
|
|
8078
8078
|
countries: {
|
|
@@ -8331,9 +8331,9 @@ var require_hy = __commonJS({
|
|
|
8331
8331
|
}
|
|
8332
8332
|
});
|
|
8333
8333
|
|
|
8334
|
-
//
|
|
8334
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/id.json
|
|
8335
8335
|
var require_id = __commonJS({
|
|
8336
|
-
"
|
|
8336
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/id.json"(exports, module) {
|
|
8337
8337
|
module.exports = {
|
|
8338
8338
|
locale: "id",
|
|
8339
8339
|
countries: {
|
|
@@ -8592,9 +8592,9 @@ var require_id = __commonJS({
|
|
|
8592
8592
|
}
|
|
8593
8593
|
});
|
|
8594
8594
|
|
|
8595
|
-
//
|
|
8595
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/is.json
|
|
8596
8596
|
var require_is = __commonJS({
|
|
8597
|
-
"
|
|
8597
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/is.json"(exports, module) {
|
|
8598
8598
|
module.exports = {
|
|
8599
8599
|
locale: "is",
|
|
8600
8600
|
countries: {
|
|
@@ -8853,9 +8853,9 @@ var require_is = __commonJS({
|
|
|
8853
8853
|
}
|
|
8854
8854
|
});
|
|
8855
8855
|
|
|
8856
|
-
//
|
|
8856
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/it.json
|
|
8857
8857
|
var require_it = __commonJS({
|
|
8858
|
-
"
|
|
8858
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/it.json"(exports, module) {
|
|
8859
8859
|
module.exports = {
|
|
8860
8860
|
locale: "it",
|
|
8861
8861
|
countries: {
|
|
@@ -9114,9 +9114,9 @@ var require_it = __commonJS({
|
|
|
9114
9114
|
}
|
|
9115
9115
|
});
|
|
9116
9116
|
|
|
9117
|
-
//
|
|
9117
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ja.json
|
|
9118
9118
|
var require_ja = __commonJS({
|
|
9119
|
-
"
|
|
9119
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ja.json"(exports, module) {
|
|
9120
9120
|
module.exports = {
|
|
9121
9121
|
locale: "ja",
|
|
9122
9122
|
countries: {
|
|
@@ -9375,9 +9375,9 @@ var require_ja = __commonJS({
|
|
|
9375
9375
|
}
|
|
9376
9376
|
});
|
|
9377
9377
|
|
|
9378
|
-
//
|
|
9378
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ka.json
|
|
9379
9379
|
var require_ka = __commonJS({
|
|
9380
|
-
"
|
|
9380
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ka.json"(exports, module) {
|
|
9381
9381
|
module.exports = {
|
|
9382
9382
|
locale: "ka",
|
|
9383
9383
|
countries: {
|
|
@@ -9636,9 +9636,9 @@ var require_ka = __commonJS({
|
|
|
9636
9636
|
}
|
|
9637
9637
|
});
|
|
9638
9638
|
|
|
9639
|
-
//
|
|
9639
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/kk.json
|
|
9640
9640
|
var require_kk = __commonJS({
|
|
9641
|
-
"
|
|
9641
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/kk.json"(exports, module) {
|
|
9642
9642
|
module.exports = {
|
|
9643
9643
|
locale: "kk",
|
|
9644
9644
|
countries: {
|
|
@@ -9897,9 +9897,9 @@ var require_kk = __commonJS({
|
|
|
9897
9897
|
}
|
|
9898
9898
|
});
|
|
9899
9899
|
|
|
9900
|
-
//
|
|
9900
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/km.json
|
|
9901
9901
|
var require_km = __commonJS({
|
|
9902
|
-
"
|
|
9902
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/km.json"(exports, module) {
|
|
9903
9903
|
module.exports = {
|
|
9904
9904
|
locale: "km",
|
|
9905
9905
|
countries: {
|
|
@@ -10158,9 +10158,9 @@ var require_km = __commonJS({
|
|
|
10158
10158
|
}
|
|
10159
10159
|
});
|
|
10160
10160
|
|
|
10161
|
-
//
|
|
10161
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ko.json
|
|
10162
10162
|
var require_ko = __commonJS({
|
|
10163
|
-
"
|
|
10163
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ko.json"(exports, module) {
|
|
10164
10164
|
module.exports = {
|
|
10165
10165
|
locale: "ko",
|
|
10166
10166
|
countries: {
|
|
@@ -10419,9 +10419,9 @@ var require_ko = __commonJS({
|
|
|
10419
10419
|
}
|
|
10420
10420
|
});
|
|
10421
10421
|
|
|
10422
|
-
//
|
|
10422
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ku.json
|
|
10423
10423
|
var require_ku = __commonJS({
|
|
10424
|
-
"
|
|
10424
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ku.json"(exports, module) {
|
|
10425
10425
|
module.exports = {
|
|
10426
10426
|
locale: "ku",
|
|
10427
10427
|
countries: {
|
|
@@ -10680,9 +10680,9 @@ var require_ku = __commonJS({
|
|
|
10680
10680
|
}
|
|
10681
10681
|
});
|
|
10682
10682
|
|
|
10683
|
-
//
|
|
10683
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ky.json
|
|
10684
10684
|
var require_ky = __commonJS({
|
|
10685
|
-
"
|
|
10685
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ky.json"(exports, module) {
|
|
10686
10686
|
module.exports = {
|
|
10687
10687
|
locale: "ky",
|
|
10688
10688
|
countries: {
|
|
@@ -10941,9 +10941,9 @@ var require_ky = __commonJS({
|
|
|
10941
10941
|
}
|
|
10942
10942
|
});
|
|
10943
10943
|
|
|
10944
|
-
//
|
|
10944
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/lt.json
|
|
10945
10945
|
var require_lt = __commonJS({
|
|
10946
|
-
"
|
|
10946
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/lt.json"(exports, module) {
|
|
10947
10947
|
module.exports = {
|
|
10948
10948
|
locale: "lt",
|
|
10949
10949
|
countries: {
|
|
@@ -11202,9 +11202,9 @@ var require_lt = __commonJS({
|
|
|
11202
11202
|
}
|
|
11203
11203
|
});
|
|
11204
11204
|
|
|
11205
|
-
//
|
|
11205
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/lv.json
|
|
11206
11206
|
var require_lv = __commonJS({
|
|
11207
|
-
"
|
|
11207
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/lv.json"(exports, module) {
|
|
11208
11208
|
module.exports = {
|
|
11209
11209
|
locale: "lv",
|
|
11210
11210
|
countries: {
|
|
@@ -11463,9 +11463,9 @@ var require_lv = __commonJS({
|
|
|
11463
11463
|
}
|
|
11464
11464
|
});
|
|
11465
11465
|
|
|
11466
|
-
//
|
|
11466
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/mk.json
|
|
11467
11467
|
var require_mk = __commonJS({
|
|
11468
|
-
"
|
|
11468
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/mk.json"(exports, module) {
|
|
11469
11469
|
module.exports = {
|
|
11470
11470
|
locale: "mk",
|
|
11471
11471
|
countries: {
|
|
@@ -11724,9 +11724,9 @@ var require_mk = __commonJS({
|
|
|
11724
11724
|
}
|
|
11725
11725
|
});
|
|
11726
11726
|
|
|
11727
|
-
//
|
|
11727
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ml.json
|
|
11728
11728
|
var require_ml = __commonJS({
|
|
11729
|
-
"
|
|
11729
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ml.json"(exports, module) {
|
|
11730
11730
|
module.exports = {
|
|
11731
11731
|
locale: "ml",
|
|
11732
11732
|
countries: {
|
|
@@ -11985,9 +11985,9 @@ var require_ml = __commonJS({
|
|
|
11985
11985
|
}
|
|
11986
11986
|
});
|
|
11987
11987
|
|
|
11988
|
-
//
|
|
11988
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/mn.json
|
|
11989
11989
|
var require_mn = __commonJS({
|
|
11990
|
-
"
|
|
11990
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/mn.json"(exports, module) {
|
|
11991
11991
|
module.exports = {
|
|
11992
11992
|
locale: "mn",
|
|
11993
11993
|
countries: {
|
|
@@ -12246,9 +12246,9 @@ var require_mn = __commonJS({
|
|
|
12246
12246
|
}
|
|
12247
12247
|
});
|
|
12248
12248
|
|
|
12249
|
-
//
|
|
12249
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/mr.json
|
|
12250
12250
|
var require_mr = __commonJS({
|
|
12251
|
-
"
|
|
12251
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/mr.json"(exports, module) {
|
|
12252
12252
|
module.exports = {
|
|
12253
12253
|
locale: "mr",
|
|
12254
12254
|
countries: {
|
|
@@ -12507,9 +12507,9 @@ var require_mr = __commonJS({
|
|
|
12507
12507
|
}
|
|
12508
12508
|
});
|
|
12509
12509
|
|
|
12510
|
-
//
|
|
12510
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ms.json
|
|
12511
12511
|
var require_ms = __commonJS({
|
|
12512
|
-
"
|
|
12512
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ms.json"(exports, module) {
|
|
12513
12513
|
module.exports = {
|
|
12514
12514
|
locale: "ms",
|
|
12515
12515
|
countries: {
|
|
@@ -12768,9 +12768,9 @@ var require_ms = __commonJS({
|
|
|
12768
12768
|
}
|
|
12769
12769
|
});
|
|
12770
12770
|
|
|
12771
|
-
//
|
|
12771
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/mt.json
|
|
12772
12772
|
var require_mt = __commonJS({
|
|
12773
|
-
"
|
|
12773
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/mt.json"(exports, module) {
|
|
12774
12774
|
module.exports = {
|
|
12775
12775
|
locale: "mt",
|
|
12776
12776
|
countries: {
|
|
@@ -13029,9 +13029,9 @@ var require_mt = __commonJS({
|
|
|
13029
13029
|
}
|
|
13030
13030
|
});
|
|
13031
13031
|
|
|
13032
|
-
//
|
|
13032
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/nb.json
|
|
13033
13033
|
var require_nb = __commonJS({
|
|
13034
|
-
"
|
|
13034
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/nb.json"(exports, module) {
|
|
13035
13035
|
module.exports = {
|
|
13036
13036
|
locale: "nb",
|
|
13037
13037
|
countries: {
|
|
@@ -13290,9 +13290,9 @@ var require_nb = __commonJS({
|
|
|
13290
13290
|
}
|
|
13291
13291
|
});
|
|
13292
13292
|
|
|
13293
|
-
//
|
|
13293
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/nl.json
|
|
13294
13294
|
var require_nl = __commonJS({
|
|
13295
|
-
"
|
|
13295
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/nl.json"(exports, module) {
|
|
13296
13296
|
module.exports = {
|
|
13297
13297
|
locale: "nl",
|
|
13298
13298
|
countries: {
|
|
@@ -13566,9 +13566,9 @@ var require_nl = __commonJS({
|
|
|
13566
13566
|
}
|
|
13567
13567
|
});
|
|
13568
13568
|
|
|
13569
|
-
//
|
|
13569
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/nn.json
|
|
13570
13570
|
var require_nn = __commonJS({
|
|
13571
|
-
"
|
|
13571
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/nn.json"(exports, module) {
|
|
13572
13572
|
module.exports = {
|
|
13573
13573
|
locale: "nn",
|
|
13574
13574
|
countries: {
|
|
@@ -13827,9 +13827,9 @@ var require_nn = __commonJS({
|
|
|
13827
13827
|
}
|
|
13828
13828
|
});
|
|
13829
13829
|
|
|
13830
|
-
//
|
|
13830
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/no.json
|
|
13831
13831
|
var require_no = __commonJS({
|
|
13832
|
-
"
|
|
13832
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/no.json"(exports, module) {
|
|
13833
13833
|
module.exports = {
|
|
13834
13834
|
locale: "no",
|
|
13835
13835
|
countries: {
|
|
@@ -14088,9 +14088,9 @@ var require_no = __commonJS({
|
|
|
14088
14088
|
}
|
|
14089
14089
|
});
|
|
14090
14090
|
|
|
14091
|
-
//
|
|
14091
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/pl.json
|
|
14092
14092
|
var require_pl = __commonJS({
|
|
14093
|
-
"
|
|
14093
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/pl.json"(exports, module) {
|
|
14094
14094
|
module.exports = {
|
|
14095
14095
|
locale: "pl",
|
|
14096
14096
|
countries: {
|
|
@@ -14349,9 +14349,9 @@ var require_pl = __commonJS({
|
|
|
14349
14349
|
}
|
|
14350
14350
|
});
|
|
14351
14351
|
|
|
14352
|
-
//
|
|
14352
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ps.json
|
|
14353
14353
|
var require_ps = __commonJS({
|
|
14354
|
-
"
|
|
14354
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ps.json"(exports, module) {
|
|
14355
14355
|
module.exports = {
|
|
14356
14356
|
locale: "ps",
|
|
14357
14357
|
countries: {
|
|
@@ -14610,9 +14610,9 @@ var require_ps = __commonJS({
|
|
|
14610
14610
|
}
|
|
14611
14611
|
});
|
|
14612
14612
|
|
|
14613
|
-
//
|
|
14613
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/pt.json
|
|
14614
14614
|
var require_pt = __commonJS({
|
|
14615
|
-
"
|
|
14615
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/pt.json"(exports, module) {
|
|
14616
14616
|
module.exports = {
|
|
14617
14617
|
locale: "pt",
|
|
14618
14618
|
countries: {
|
|
@@ -14871,9 +14871,9 @@ var require_pt = __commonJS({
|
|
|
14871
14871
|
}
|
|
14872
14872
|
});
|
|
14873
14873
|
|
|
14874
|
-
//
|
|
14874
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ro.json
|
|
14875
14875
|
var require_ro = __commonJS({
|
|
14876
|
-
"
|
|
14876
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ro.json"(exports, module) {
|
|
14877
14877
|
module.exports = {
|
|
14878
14878
|
locale: "ro",
|
|
14879
14879
|
countries: {
|
|
@@ -15132,9 +15132,9 @@ var require_ro = __commonJS({
|
|
|
15132
15132
|
}
|
|
15133
15133
|
});
|
|
15134
15134
|
|
|
15135
|
-
//
|
|
15135
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ru.json
|
|
15136
15136
|
var require_ru = __commonJS({
|
|
15137
|
-
"
|
|
15137
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ru.json"(exports, module) {
|
|
15138
15138
|
module.exports = {
|
|
15139
15139
|
locale: "ru",
|
|
15140
15140
|
countries: {
|
|
@@ -15393,9 +15393,9 @@ var require_ru = __commonJS({
|
|
|
15393
15393
|
}
|
|
15394
15394
|
});
|
|
15395
15395
|
|
|
15396
|
-
//
|
|
15396
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/sd.json
|
|
15397
15397
|
var require_sd = __commonJS({
|
|
15398
|
-
"
|
|
15398
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/sd.json"(exports, module) {
|
|
15399
15399
|
module.exports = {
|
|
15400
15400
|
locale: "sd",
|
|
15401
15401
|
countries: {
|
|
@@ -15654,9 +15654,9 @@ var require_sd = __commonJS({
|
|
|
15654
15654
|
}
|
|
15655
15655
|
});
|
|
15656
15656
|
|
|
15657
|
-
//
|
|
15657
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/sk.json
|
|
15658
15658
|
var require_sk = __commonJS({
|
|
15659
|
-
"
|
|
15659
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/sk.json"(exports, module) {
|
|
15660
15660
|
module.exports = {
|
|
15661
15661
|
locale: "sk",
|
|
15662
15662
|
countries: {
|
|
@@ -15915,9 +15915,9 @@ var require_sk = __commonJS({
|
|
|
15915
15915
|
}
|
|
15916
15916
|
});
|
|
15917
15917
|
|
|
15918
|
-
//
|
|
15918
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/sl.json
|
|
15919
15919
|
var require_sl = __commonJS({
|
|
15920
|
-
"
|
|
15920
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/sl.json"(exports, module) {
|
|
15921
15921
|
module.exports = {
|
|
15922
15922
|
locale: "sl",
|
|
15923
15923
|
countries: {
|
|
@@ -16176,9 +16176,9 @@ var require_sl = __commonJS({
|
|
|
16176
16176
|
}
|
|
16177
16177
|
});
|
|
16178
16178
|
|
|
16179
|
-
//
|
|
16179
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/so.json
|
|
16180
16180
|
var require_so = __commonJS({
|
|
16181
|
-
"
|
|
16181
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/so.json"(exports, module) {
|
|
16182
16182
|
module.exports = {
|
|
16183
16183
|
locale: "so",
|
|
16184
16184
|
countries: {
|
|
@@ -16437,9 +16437,9 @@ var require_so = __commonJS({
|
|
|
16437
16437
|
}
|
|
16438
16438
|
});
|
|
16439
16439
|
|
|
16440
|
-
//
|
|
16440
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/sq.json
|
|
16441
16441
|
var require_sq = __commonJS({
|
|
16442
|
-
"
|
|
16442
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/sq.json"(exports, module) {
|
|
16443
16443
|
module.exports = {
|
|
16444
16444
|
locale: "sq",
|
|
16445
16445
|
countries: {
|
|
@@ -16698,9 +16698,9 @@ var require_sq = __commonJS({
|
|
|
16698
16698
|
}
|
|
16699
16699
|
});
|
|
16700
16700
|
|
|
16701
|
-
//
|
|
16701
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/sr.json
|
|
16702
16702
|
var require_sr = __commonJS({
|
|
16703
|
-
"
|
|
16703
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/sr.json"(exports, module) {
|
|
16704
16704
|
module.exports = {
|
|
16705
16705
|
locale: "sr",
|
|
16706
16706
|
countries: {
|
|
@@ -16959,9 +16959,9 @@ var require_sr = __commonJS({
|
|
|
16959
16959
|
}
|
|
16960
16960
|
});
|
|
16961
16961
|
|
|
16962
|
-
//
|
|
16962
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/sv.json
|
|
16963
16963
|
var require_sv = __commonJS({
|
|
16964
|
-
"
|
|
16964
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/sv.json"(exports, module) {
|
|
16965
16965
|
module.exports = {
|
|
16966
16966
|
locale: "sv",
|
|
16967
16967
|
countries: {
|
|
@@ -17220,9 +17220,9 @@ var require_sv = __commonJS({
|
|
|
17220
17220
|
}
|
|
17221
17221
|
});
|
|
17222
17222
|
|
|
17223
|
-
//
|
|
17223
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/sw.json
|
|
17224
17224
|
var require_sw = __commonJS({
|
|
17225
|
-
"
|
|
17225
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/sw.json"(exports, module) {
|
|
17226
17226
|
module.exports = {
|
|
17227
17227
|
locale: "sw",
|
|
17228
17228
|
countries: {
|
|
@@ -17481,9 +17481,9 @@ var require_sw = __commonJS({
|
|
|
17481
17481
|
}
|
|
17482
17482
|
});
|
|
17483
17483
|
|
|
17484
|
-
//
|
|
17484
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ta.json
|
|
17485
17485
|
var require_ta = __commonJS({
|
|
17486
|
-
"
|
|
17486
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ta.json"(exports, module) {
|
|
17487
17487
|
module.exports = {
|
|
17488
17488
|
locale: "ta",
|
|
17489
17489
|
countries: {
|
|
@@ -17742,9 +17742,9 @@ var require_ta = __commonJS({
|
|
|
17742
17742
|
}
|
|
17743
17743
|
});
|
|
17744
17744
|
|
|
17745
|
-
//
|
|
17745
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/tg.json
|
|
17746
17746
|
var require_tg = __commonJS({
|
|
17747
|
-
"
|
|
17747
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/tg.json"(exports, module) {
|
|
17748
17748
|
module.exports = {
|
|
17749
17749
|
locale: "tg",
|
|
17750
17750
|
countries: {
|
|
@@ -18003,9 +18003,9 @@ var require_tg = __commonJS({
|
|
|
18003
18003
|
}
|
|
18004
18004
|
});
|
|
18005
18005
|
|
|
18006
|
-
//
|
|
18006
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/th.json
|
|
18007
18007
|
var require_th = __commonJS({
|
|
18008
|
-
"
|
|
18008
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/th.json"(exports, module) {
|
|
18009
18009
|
module.exports = {
|
|
18010
18010
|
locale: "th",
|
|
18011
18011
|
countries: {
|
|
@@ -18264,9 +18264,9 @@ var require_th = __commonJS({
|
|
|
18264
18264
|
}
|
|
18265
18265
|
});
|
|
18266
18266
|
|
|
18267
|
-
//
|
|
18267
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/tk.json
|
|
18268
18268
|
var require_tk = __commonJS({
|
|
18269
|
-
"
|
|
18269
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/tk.json"(exports, module) {
|
|
18270
18270
|
module.exports = {
|
|
18271
18271
|
locale: "tk",
|
|
18272
18272
|
countries: {
|
|
@@ -18525,9 +18525,9 @@ var require_tk = __commonJS({
|
|
|
18525
18525
|
}
|
|
18526
18526
|
});
|
|
18527
18527
|
|
|
18528
|
-
//
|
|
18528
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/tr.json
|
|
18529
18529
|
var require_tr = __commonJS({
|
|
18530
|
-
"
|
|
18530
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/tr.json"(exports, module) {
|
|
18531
18531
|
module.exports = {
|
|
18532
18532
|
locale: "tr",
|
|
18533
18533
|
countries: {
|
|
@@ -18786,9 +18786,9 @@ var require_tr = __commonJS({
|
|
|
18786
18786
|
}
|
|
18787
18787
|
});
|
|
18788
18788
|
|
|
18789
|
-
//
|
|
18789
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/tt.json
|
|
18790
18790
|
var require_tt = __commonJS({
|
|
18791
|
-
"
|
|
18791
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/tt.json"(exports, module) {
|
|
18792
18792
|
module.exports = {
|
|
18793
18793
|
locale: "tt",
|
|
18794
18794
|
countries: {
|
|
@@ -19047,9 +19047,9 @@ var require_tt = __commonJS({
|
|
|
19047
19047
|
}
|
|
19048
19048
|
});
|
|
19049
19049
|
|
|
19050
|
-
//
|
|
19050
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ug.json
|
|
19051
19051
|
var require_ug = __commonJS({
|
|
19052
|
-
"
|
|
19052
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ug.json"(exports, module) {
|
|
19053
19053
|
module.exports = {
|
|
19054
19054
|
locale: "ug",
|
|
19055
19055
|
countries: {
|
|
@@ -19308,9 +19308,9 @@ var require_ug = __commonJS({
|
|
|
19308
19308
|
}
|
|
19309
19309
|
});
|
|
19310
19310
|
|
|
19311
|
-
//
|
|
19311
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/uk.json
|
|
19312
19312
|
var require_uk = __commonJS({
|
|
19313
|
-
"
|
|
19313
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/uk.json"(exports, module) {
|
|
19314
19314
|
module.exports = {
|
|
19315
19315
|
locale: "uk",
|
|
19316
19316
|
countries: {
|
|
@@ -19569,9 +19569,9 @@ var require_uk = __commonJS({
|
|
|
19569
19569
|
}
|
|
19570
19570
|
});
|
|
19571
19571
|
|
|
19572
|
-
//
|
|
19572
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ur.json
|
|
19573
19573
|
var require_ur = __commonJS({
|
|
19574
|
-
"
|
|
19574
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/ur.json"(exports, module) {
|
|
19575
19575
|
module.exports = {
|
|
19576
19576
|
locale: "ur",
|
|
19577
19577
|
countries: {
|
|
@@ -19830,9 +19830,9 @@ var require_ur = __commonJS({
|
|
|
19830
19830
|
}
|
|
19831
19831
|
});
|
|
19832
19832
|
|
|
19833
|
-
//
|
|
19833
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/uz.json
|
|
19834
19834
|
var require_uz = __commonJS({
|
|
19835
|
-
"
|
|
19835
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/uz.json"(exports, module) {
|
|
19836
19836
|
module.exports = {
|
|
19837
19837
|
locale: "uz",
|
|
19838
19838
|
countries: {
|
|
@@ -20091,9 +20091,9 @@ var require_uz = __commonJS({
|
|
|
20091
20091
|
}
|
|
20092
20092
|
});
|
|
20093
20093
|
|
|
20094
|
-
//
|
|
20094
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/vi.json
|
|
20095
20095
|
var require_vi = __commonJS({
|
|
20096
|
-
"
|
|
20096
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/vi.json"(exports, module) {
|
|
20097
20097
|
module.exports = {
|
|
20098
20098
|
locale: "vi",
|
|
20099
20099
|
countries: {
|
|
@@ -20352,9 +20352,9 @@ var require_vi = __commonJS({
|
|
|
20352
20352
|
}
|
|
20353
20353
|
});
|
|
20354
20354
|
|
|
20355
|
-
//
|
|
20355
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/zh.json
|
|
20356
20356
|
var require_zh = __commonJS({
|
|
20357
|
-
"
|
|
20357
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/langs/zh.json"(exports, module) {
|
|
20358
20358
|
module.exports = {
|
|
20359
20359
|
locale: "zh",
|
|
20360
20360
|
countries: {
|
|
@@ -20613,10 +20613,10 @@ var require_zh = __commonJS({
|
|
|
20613
20613
|
}
|
|
20614
20614
|
});
|
|
20615
20615
|
|
|
20616
|
-
// require("./langs/**/*.json") in
|
|
20616
|
+
// require("./langs/**/*.json") in ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/entry-node.js
|
|
20617
20617
|
var globRequire_langs_json;
|
|
20618
20618
|
var init_ = __esm({
|
|
20619
|
-
'require("./langs/**/*.json") in
|
|
20619
|
+
'require("./langs/**/*.json") in ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/entry-node.js'() {
|
|
20620
20620
|
globRequire_langs_json = __glob({
|
|
20621
20621
|
"./langs/af.json": () => require_af(),
|
|
20622
20622
|
"./langs/am.json": () => require_am(),
|
|
@@ -20700,9 +20700,9 @@ var init_ = __esm({
|
|
|
20700
20700
|
}
|
|
20701
20701
|
});
|
|
20702
20702
|
|
|
20703
|
-
//
|
|
20703
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/codes.json
|
|
20704
20704
|
var require_codes = __commonJS({
|
|
20705
|
-
"
|
|
20705
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/codes.json"(exports, module) {
|
|
20706
20706
|
module.exports = [
|
|
20707
20707
|
["AF", "AFG", "004", "ISO 3166-2:AF"],
|
|
20708
20708
|
["AL", "ALB", "008", "ISO 3166-2:AL"],
|
|
@@ -20958,9 +20958,9 @@ var require_codes = __commonJS({
|
|
|
20958
20958
|
}
|
|
20959
20959
|
});
|
|
20960
20960
|
|
|
20961
|
-
//
|
|
20961
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/supportedLocales.json
|
|
20962
20962
|
var require_supportedLocales = __commonJS({
|
|
20963
|
-
"
|
|
20963
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/supportedLocales.json"(exports, module) {
|
|
20964
20964
|
module.exports = [
|
|
20965
20965
|
"br",
|
|
20966
20966
|
"cy",
|
|
@@ -21044,9 +21044,9 @@ var require_supportedLocales = __commonJS({
|
|
|
21044
21044
|
}
|
|
21045
21045
|
});
|
|
21046
21046
|
|
|
21047
|
-
//
|
|
21047
|
+
// ../../.pnpm-store/v10/links/@/diacritics/1.3.0/901e489f892c550ec2aae6ccb228516ccd6f6804963b70fa26eac86a1a210bf5/node_modules/diacritics/index.js
|
|
21048
21048
|
var require_diacritics = __commonJS({
|
|
21049
|
-
"
|
|
21049
|
+
"../../.pnpm-store/v10/links/@/diacritics/1.3.0/901e489f892c550ec2aae6ccb228516ccd6f6804963b70fa26eac86a1a210bf5/node_modules/diacritics/index.js"(exports) {
|
|
21050
21050
|
"use strict";
|
|
21051
21051
|
exports.remove = removeDiacritics;
|
|
21052
21052
|
var replacementList = [
|
|
@@ -21463,9 +21463,9 @@ var require_diacritics = __commonJS({
|
|
|
21463
21463
|
}
|
|
21464
21464
|
});
|
|
21465
21465
|
|
|
21466
|
-
//
|
|
21466
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/index.js
|
|
21467
21467
|
var require_i18n_iso_countries = __commonJS({
|
|
21468
|
-
"
|
|
21468
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/index.js"(exports) {
|
|
21469
21469
|
"use strict";
|
|
21470
21470
|
var codes = require_codes();
|
|
21471
21471
|
var supportedLocales = require_supportedLocales();
|
|
@@ -21697,9 +21697,9 @@ var require_i18n_iso_countries = __commonJS({
|
|
|
21697
21697
|
}
|
|
21698
21698
|
});
|
|
21699
21699
|
|
|
21700
|
-
//
|
|
21700
|
+
// ../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/entry-node.js
|
|
21701
21701
|
var require_entry_node = __commonJS({
|
|
21702
|
-
"
|
|
21702
|
+
"../../.pnpm-store/v10/links/@/i18n-iso-countries/7.14.0/5e6699c273c94e2e87598072b13ced7dbfb8ba9153290de3d03d5f711e81fac0/node_modules/i18n-iso-countries/entry-node.js"(exports, module) {
|
|
21703
21703
|
"use strict";
|
|
21704
21704
|
init_();
|
|
21705
21705
|
var library = require_i18n_iso_countries();
|
|
@@ -21715,7 +21715,7 @@ var require_entry_node = __commonJS({
|
|
|
21715
21715
|
});
|
|
21716
21716
|
|
|
21717
21717
|
// src/cli.ts
|
|
21718
|
-
import { defineCommand as
|
|
21718
|
+
import { defineCommand as defineCommand284, runMain } from "citty";
|
|
21719
21719
|
|
|
21720
21720
|
// src/cache-flag.ts
|
|
21721
21721
|
var NO_CACHE_ARG = {
|
|
@@ -26265,6 +26265,9 @@ var chatChangeTypeSchema = z13.enum([
|
|
|
26265
26265
|
// A connected social account feeding the image and video libraries, keyed
|
|
26266
26266
|
// on `platform:handle`. Immediate — see convex/mediaSources/mutations.ts.
|
|
26267
26267
|
"media-source",
|
|
26268
|
+
// A review site listing feeding the testimonials library, keyed on the
|
|
26269
|
+
// source's id. Immediate — see convex/testimonials/mutations.ts.
|
|
26270
|
+
"testimonial-source",
|
|
26268
26271
|
// A landing page saved to the reference library, keyed on the page.
|
|
26269
26272
|
"landing-reference",
|
|
26270
26273
|
// One Studio batch — the takes of one brief, as a set. See convex/lib/validators.ts.
|
|
@@ -28445,6 +28448,13 @@ var imageSourceSchema = z25.enum([
|
|
|
28445
28448
|
"website",
|
|
28446
28449
|
"google_testimonial",
|
|
28447
28450
|
"trustpilot_testimonial",
|
|
28451
|
+
"yelp_testimonial",
|
|
28452
|
+
"tripadvisor_testimonial",
|
|
28453
|
+
"g2_testimonial",
|
|
28454
|
+
"capterra_testimonial",
|
|
28455
|
+
"amazon_testimonial",
|
|
28456
|
+
"app_store_testimonial",
|
|
28457
|
+
"google_play_testimonial",
|
|
28448
28458
|
"instagram",
|
|
28449
28459
|
"tiktok",
|
|
28450
28460
|
"linkedin",
|
|
@@ -30186,7 +30196,17 @@ var tagChangeToolResultSchema = z33.object({
|
|
|
30186
30196
|
|
|
30187
30197
|
// ../api/src/testimonials.ts
|
|
30188
30198
|
import { z as z34 } from "zod";
|
|
30189
|
-
var testimonialSourceTypeSchema = z34.enum([
|
|
30199
|
+
var testimonialSourceTypeSchema = z34.enum([
|
|
30200
|
+
"google",
|
|
30201
|
+
"trustpilot",
|
|
30202
|
+
"yelp",
|
|
30203
|
+
"tripadvisor",
|
|
30204
|
+
"g2",
|
|
30205
|
+
"capterra",
|
|
30206
|
+
"amazon",
|
|
30207
|
+
"app_store",
|
|
30208
|
+
"google_play"
|
|
30209
|
+
]);
|
|
30190
30210
|
var testimonialStatusSchema = z34.enum(["pending", "processing", "ready", "error"]);
|
|
30191
30211
|
var testimonialSentimentSchema = z34.enum(["positive", "neutral", "negative"]);
|
|
30192
30212
|
var testimonialDocSchema = z34.object({
|
|
@@ -30254,6 +30274,35 @@ var testimonialsOutscraperWebhookResponseSchema = z34.object({
|
|
|
30254
30274
|
ok: z34.literal(true),
|
|
30255
30275
|
note: z34.string().optional()
|
|
30256
30276
|
});
|
|
30277
|
+
var testimonialSourceRefreshIntervalSchema = z34.enum(["never", "daily", "weekly", "monthly"]);
|
|
30278
|
+
var testimonialSourceSummarySchema = z34.object({
|
|
30279
|
+
id: z34.string(),
|
|
30280
|
+
platform: testimonialSourceTypeSchema,
|
|
30281
|
+
platformLabel: z34.string(),
|
|
30282
|
+
label: z34.string(),
|
|
30283
|
+
pageUrl: z34.string().optional(),
|
|
30284
|
+
status: z34.enum(["importing", "idle", "error"]),
|
|
30285
|
+
reviews: z34.number(),
|
|
30286
|
+
refreshInterval: z34.string(),
|
|
30287
|
+
lastSyncedAt: z34.number().optional(),
|
|
30288
|
+
error: z34.string().optional(),
|
|
30289
|
+
createdAt: z34.number()
|
|
30290
|
+
});
|
|
30291
|
+
var testimonialSourcesAddRequestSchema = z34.object({
|
|
30292
|
+
/** The review page's link; for Google Maps also the business name. */
|
|
30293
|
+
input: z34.string().trim().min(1, "Pass the review page's link, or a business name for Google Maps"),
|
|
30294
|
+
/** Needed only to force a site: a business name is Google, a link names its own site. */
|
|
30295
|
+
platform: testimonialSourceTypeSchema.optional(),
|
|
30296
|
+
/** Auto-sync cadence. Omitted = never, like the dashboard. */
|
|
30297
|
+
every: testimonialSourceRefreshIntervalSchema.optional()
|
|
30298
|
+
});
|
|
30299
|
+
var sourceIdSchema = z34.string().trim().min(1, "Pass a source id from `baker testimonials sources list`");
|
|
30300
|
+
var testimonialSourcesSyncRequestSchema = z34.object({ id: sourceIdSchema });
|
|
30301
|
+
var testimonialSourcesRemoveRequestSchema = z34.object({ id: sourceIdSchema });
|
|
30302
|
+
var testimonialSourcesScheduleRequestSchema = z34.object({
|
|
30303
|
+
id: sourceIdSchema,
|
|
30304
|
+
every: testimonialSourceRefreshIntervalSchema
|
|
30305
|
+
});
|
|
30257
30306
|
|
|
30258
30307
|
// ../api/src/videos.ts
|
|
30259
30308
|
import { z as z35 } from "zod";
|
|
@@ -34492,16 +34541,16 @@ async function runChatgptRead(reference, read, hintsFor4) {
|
|
|
34492
34541
|
}
|
|
34493
34542
|
}
|
|
34494
34543
|
var TRUNCATED_HINT = "These rows are the first 2,000, not the whole account \u2014 narrow the read (--campaign-id, --ad-group-id) before counting them or concluding something is missing.";
|
|
34495
|
-
async function getChatgptList(
|
|
34496
|
-
const { data, headers } = await apiGetWithHeaders(
|
|
34544
|
+
async function getChatgptList(path58, params) {
|
|
34545
|
+
const { data, headers } = await apiGetWithHeaders(path58, params);
|
|
34497
34546
|
return { data, truncated: headers.get(CHATGPT_ADS_TRUNCATED_HEADER) === "true" };
|
|
34498
34547
|
}
|
|
34499
|
-
async function runChatgptListRead(reference,
|
|
34548
|
+
async function runChatgptListRead(reference, path58, params, hintsFor4) {
|
|
34500
34549
|
let truncated = false;
|
|
34501
34550
|
await runChatgptRead(
|
|
34502
34551
|
reference,
|
|
34503
34552
|
async () => {
|
|
34504
|
-
const read = await getChatgptList(
|
|
34553
|
+
const read = await getChatgptList(path58, params);
|
|
34505
34554
|
truncated = read.truncated;
|
|
34506
34555
|
return read.data;
|
|
34507
34556
|
},
|
|
@@ -35306,7 +35355,7 @@ var MEMBER_ARGS = {
|
|
|
35306
35355
|
},
|
|
35307
35356
|
country: { type: "string", description: "Country of phones written without a +code, e.g. ES" }
|
|
35308
35357
|
};
|
|
35309
|
-
function membersFromArgs(args8, readFile43 = (
|
|
35358
|
+
function membersFromArgs(args8, readFile43 = (path58) => readFileSync2(path58, "utf8")) {
|
|
35310
35359
|
const fromFile = typeof args8.file === "string" && args8.file ? membersFromFile(readFile43(args8.file)) : { emails: [], phones: [] };
|
|
35311
35360
|
const given = [...csvArg(args8.emails) ?? [], ...fromFile.emails];
|
|
35312
35361
|
const givenPhones = [...csvArg(args8.phones) ?? [], ...fromFile.phones];
|
|
@@ -38681,9 +38730,9 @@ var COPY_LIST_FLAG = {
|
|
|
38681
38730
|
descriptions: "--descriptions",
|
|
38682
38731
|
longHeadlines: "--long-headlines"
|
|
38683
38732
|
};
|
|
38684
|
-
function valueAt(root,
|
|
38733
|
+
function valueAt(root, path58) {
|
|
38685
38734
|
let node = root;
|
|
38686
|
-
for (const key of
|
|
38735
|
+
for (const key of path58) {
|
|
38687
38736
|
if (node === null || typeof node !== "object") return void 0;
|
|
38688
38737
|
node = node[key];
|
|
38689
38738
|
}
|
|
@@ -38916,11 +38965,11 @@ function parseKeywordEntry(raw, defaultMatch) {
|
|
|
38916
38965
|
function rawTextEntries(value2, rawArgs) {
|
|
38917
38966
|
return repeatedValues(rawArgs, "text", value2).flatMap((v) => v.split(",")).map((v) => v.trim()).filter(Boolean);
|
|
38918
38967
|
}
|
|
38919
|
-
function rawFileEntries(
|
|
38920
|
-
if (typeof
|
|
38968
|
+
function rawFileEntries(path58) {
|
|
38969
|
+
if (typeof path58 !== "string" || path58.length === 0) {
|
|
38921
38970
|
return [];
|
|
38922
38971
|
}
|
|
38923
|
-
return readFileSync4(
|
|
38972
|
+
return readFileSync4(path58, "utf8").split(/\r?\n/).map((line) => line.trim()).filter((line) => line.length > 0 && !line.startsWith("#"));
|
|
38924
38973
|
}
|
|
38925
38974
|
function keywordEntries(args8, rawArgs) {
|
|
38926
38975
|
const defaultMatch = typeof args8["match-type"] === "string" ? args8["match-type"].toUpperCase() : void 0;
|
|
@@ -38943,14 +38992,14 @@ function keywordEntries(args8, rawArgs) {
|
|
|
38943
38992
|
}
|
|
38944
38993
|
return entries;
|
|
38945
38994
|
}
|
|
38946
|
-
function loadJsonFileArg(
|
|
38947
|
-
if (typeof
|
|
38995
|
+
function loadJsonFileArg(path58) {
|
|
38996
|
+
if (typeof path58 !== "string" || path58.length === 0) {
|
|
38948
38997
|
return {};
|
|
38949
38998
|
}
|
|
38950
|
-
const inline =
|
|
38951
|
-
const source = inline ? "inline JSON" :
|
|
38999
|
+
const inline = path58.trimStart().startsWith("{");
|
|
39000
|
+
const source = inline ? "inline JSON" : path58;
|
|
38952
39001
|
try {
|
|
38953
|
-
const parsed = JSON.parse(inline ?
|
|
39002
|
+
const parsed = JSON.parse(inline ? path58 : readFileSync4(path58, "utf8"));
|
|
38954
39003
|
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
38955
39004
|
failWriteValidation2(`${source} must contain a JSON object`);
|
|
38956
39005
|
}
|
|
@@ -39087,10 +39136,10 @@ async function stageUpdate(kind, customerId, target2, payload, hints2) {
|
|
|
39087
39136
|
async function stageTarget(kind, customerId, target2, hints2) {
|
|
39088
39137
|
await stageGoogleOp({ kind, customerId, target: target2 }, hints2);
|
|
39089
39138
|
}
|
|
39090
|
-
async function draftAction(
|
|
39139
|
+
async function draftAction(path58, body, chat) {
|
|
39091
39140
|
try {
|
|
39092
39141
|
const chatId = resolveChatId(chat);
|
|
39093
|
-
const response = await apiPost(
|
|
39142
|
+
const response = await apiPost(path58, { chatId, ...body });
|
|
39094
39143
|
writeJsonEnvelope(response);
|
|
39095
39144
|
} catch (err) {
|
|
39096
39145
|
handleGoogleError(err);
|
|
@@ -41510,14 +41559,14 @@ function mappingRowProblem(row) {
|
|
|
41510
41559
|
|
|
41511
41560
|
// ../api/src/event-sources/template.ts
|
|
41512
41561
|
var MENTION = /\{\{\s*([^{}]+?)\s*\}\}/g;
|
|
41513
|
-
function mentionOf(
|
|
41514
|
-
return `{{${
|
|
41562
|
+
function mentionOf(path58) {
|
|
41563
|
+
return `{{${path58}}}`;
|
|
41515
41564
|
}
|
|
41516
41565
|
function templateMentions(template) {
|
|
41517
41566
|
const seen = [];
|
|
41518
41567
|
for (const match of template.matchAll(MENTION)) {
|
|
41519
|
-
const
|
|
41520
|
-
if (
|
|
41568
|
+
const path58 = (match[1] ?? "").trim();
|
|
41569
|
+
if (path58 !== "" && !seen.includes(path58)) seen.push(path58);
|
|
41521
41570
|
}
|
|
41522
41571
|
return seen;
|
|
41523
41572
|
}
|
|
@@ -44892,17 +44941,17 @@ function ignoredColumnHints(columns) {
|
|
|
44892
44941
|
`Ignored ${columns.length} column(s) that are not part of a conversion: ${columns.join(", ")}. A conversion carries an order id, a date, and something to match on: a click id (gclid / gbraid / wbraid), an email, a phone, or all four of givenName + familyName + country + postalCode. Optionally a value + currency, conversionCount, and eventSource (WEB / APP / IN_STORE / PHONE / OTHER). A column named just \`Name\` is ignored on purpose \u2014 Google needs the first and last name separately, so split it before re-running.`
|
|
44893
44942
|
];
|
|
44894
44943
|
}
|
|
44895
|
-
function readRowsFile(
|
|
44896
|
-
const inline =
|
|
44944
|
+
function readRowsFile(path58) {
|
|
44945
|
+
const inline = path58.trimStart().startsWith("[") || path58.trimStart().startsWith("{");
|
|
44897
44946
|
let text2;
|
|
44898
44947
|
try {
|
|
44899
|
-
text2 = inline ?
|
|
44948
|
+
text2 = inline ? path58 : readFileSync6(path58, "utf8");
|
|
44900
44949
|
} catch (err) {
|
|
44901
|
-
failWriteValidation2(`could not read ${
|
|
44950
|
+
failWriteValidation2(`could not read ${path58}: ${err instanceof Error ? err.message : String(err)}`);
|
|
44902
44951
|
}
|
|
44903
44952
|
const parsed = parseConversionRowsText(text2);
|
|
44904
44953
|
if (!parsed.ok) {
|
|
44905
|
-
failWriteValidation2(`${inline ? "the conversions passed inline" :
|
|
44954
|
+
failWriteValidation2(`${inline ? "the conversions passed inline" : path58}: ${parsed.error}`);
|
|
44906
44955
|
}
|
|
44907
44956
|
return { rows: parsed.rows, ignoredColumns: parsed.ignoredColumns };
|
|
44908
44957
|
}
|
|
@@ -46803,19 +46852,19 @@ function failWriteValidation3(message) {
|
|
|
46803
46852
|
writeJsonEnvelope({ ok: false, error: { code: "VALIDATION_ERROR", message } });
|
|
46804
46853
|
process.exit(1);
|
|
46805
46854
|
}
|
|
46806
|
-
function loadJsonFileArg2(
|
|
46807
|
-
if (typeof
|
|
46855
|
+
function loadJsonFileArg2(path58) {
|
|
46856
|
+
if (typeof path58 !== "string" || path58.length === 0) {
|
|
46808
46857
|
return {};
|
|
46809
46858
|
}
|
|
46810
46859
|
try {
|
|
46811
|
-
const parsed = JSON.parse(readFileSync7(
|
|
46860
|
+
const parsed = JSON.parse(readFileSync7(path58, "utf8"));
|
|
46812
46861
|
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
46813
|
-
failWriteValidation3(`${
|
|
46862
|
+
failWriteValidation3(`${path58} must contain a JSON object`);
|
|
46814
46863
|
}
|
|
46815
46864
|
return parsed;
|
|
46816
46865
|
} catch (err) {
|
|
46817
46866
|
if (err instanceof SyntaxError) {
|
|
46818
|
-
failWriteValidation3(`${
|
|
46867
|
+
failWriteValidation3(`${path58} is not valid JSON: ${err.message}`);
|
|
46819
46868
|
}
|
|
46820
46869
|
throw err;
|
|
46821
46870
|
}
|
|
@@ -46900,15 +46949,15 @@ function parseLocaleFlag(value2) {
|
|
|
46900
46949
|
}
|
|
46901
46950
|
return { language: match[1], country: match[2].toUpperCase() };
|
|
46902
46951
|
}
|
|
46903
|
-
function loadTargetingFileArg(
|
|
46904
|
-
if (typeof
|
|
46952
|
+
function loadTargetingFileArg(path58) {
|
|
46953
|
+
if (typeof path58 !== "string" || path58.length === 0) {
|
|
46905
46954
|
return void 0;
|
|
46906
46955
|
}
|
|
46907
|
-
const parsed = loadJsonFileArg2(
|
|
46956
|
+
const parsed = loadJsonFileArg2(path58);
|
|
46908
46957
|
const criteria = parsed.targetingCriteria ?? parsed;
|
|
46909
46958
|
if (!criteria.include) {
|
|
46910
46959
|
failWriteValidation3(
|
|
46911
|
-
`${
|
|
46960
|
+
`${path58} must contain targeting criteria with an "include" block (see baker schema ads.linkedin.campaigns.create)`
|
|
46912
46961
|
);
|
|
46913
46962
|
}
|
|
46914
46963
|
return criteria;
|
|
@@ -46943,14 +46992,14 @@ function parseCsvLine(line) {
|
|
|
46943
46992
|
cells.push(current);
|
|
46944
46993
|
return cells.map((cell3) => cell3.trim());
|
|
46945
46994
|
}
|
|
46946
|
-
function parseListFileArg(
|
|
46947
|
-
if (typeof
|
|
46995
|
+
function parseListFileArg(path58, maxRows) {
|
|
46996
|
+
if (typeof path58 !== "string" || path58.length === 0) {
|
|
46948
46997
|
return void 0;
|
|
46949
46998
|
}
|
|
46950
|
-
const raw = readFileSync7(
|
|
46999
|
+
const raw = readFileSync7(path58, "utf8");
|
|
46951
47000
|
const lines = raw.split(/\r?\n/).filter((line) => line.trim().length > 0);
|
|
46952
47001
|
if (lines.length < 2) {
|
|
46953
|
-
failWriteValidation3(`${
|
|
47002
|
+
failWriteValidation3(`${path58} needs a header row and at least one data row`);
|
|
46954
47003
|
}
|
|
46955
47004
|
const columns = parseCsvLine(lines[0]).map((column) => column.trim());
|
|
46956
47005
|
const rows = [];
|
|
@@ -46969,7 +47018,7 @@ function parseListFileArg(path59, maxRows) {
|
|
|
46969
47018
|
}
|
|
46970
47019
|
}
|
|
46971
47020
|
if (rows.length > maxRows) {
|
|
46972
|
-
failWriteValidation3(`${
|
|
47021
|
+
failWriteValidation3(`${path58} has ${rows.length} rows \u2014 the inline limit is ${maxRows}. Split the list.`);
|
|
46973
47022
|
}
|
|
46974
47023
|
return { columns, rows };
|
|
46975
47024
|
}
|
|
@@ -47065,11 +47114,11 @@ function readPositionals(args8) {
|
|
|
47065
47114
|
function splitIdList(raw) {
|
|
47066
47115
|
return raw.split(",").map((id) => id.trim()).filter(Boolean);
|
|
47067
47116
|
}
|
|
47068
|
-
function idsFileEntries(
|
|
47069
|
-
if (typeof
|
|
47117
|
+
function idsFileEntries(path58) {
|
|
47118
|
+
if (typeof path58 !== "string" || path58.length === 0) {
|
|
47070
47119
|
return [];
|
|
47071
47120
|
}
|
|
47072
|
-
return readFileSync7(
|
|
47121
|
+
return readFileSync7(path58, "utf8").split(/\r?\n/).map((line) => line.trim()).filter((line) => line.length > 0 && !line.startsWith("#")).flatMap(splitIdList);
|
|
47073
47122
|
}
|
|
47074
47123
|
function requireTargets2(args8, entity) {
|
|
47075
47124
|
const positionals = readPositionals(args8);
|
|
@@ -49830,9 +49879,9 @@ import { defineCommand as defineCommand64 } from "citty";
|
|
|
49830
49879
|
function asRecord(value2) {
|
|
49831
49880
|
return typeof value2 === "object" && value2 !== null && !Array.isArray(value2) ? value2 : void 0;
|
|
49832
49881
|
}
|
|
49833
|
-
function readPath2(row,
|
|
49882
|
+
function readPath2(row, path58) {
|
|
49834
49883
|
let current = row;
|
|
49835
|
-
for (const segment of
|
|
49884
|
+
for (const segment of path58.split(".")) {
|
|
49836
49885
|
const record = asRecord(current);
|
|
49837
49886
|
if (!record) return void 0;
|
|
49838
49887
|
current = record[segment];
|
|
@@ -49842,10 +49891,10 @@ function readPath2(row, path59) {
|
|
|
49842
49891
|
function projectFields(rows, paths) {
|
|
49843
49892
|
return rows.map((row) => {
|
|
49844
49893
|
const projected = {};
|
|
49845
|
-
for (const
|
|
49846
|
-
const value2 = readPath2(row,
|
|
49894
|
+
for (const path58 of paths) {
|
|
49895
|
+
const value2 = readPath2(row, path58);
|
|
49847
49896
|
if (value2 !== void 0) {
|
|
49848
|
-
projected[
|
|
49897
|
+
projected[path58] = value2;
|
|
49849
49898
|
}
|
|
49850
49899
|
}
|
|
49851
49900
|
return projected;
|
|
@@ -49858,16 +49907,16 @@ function shapeListRows(rows, args8, compact5) {
|
|
|
49858
49907
|
const paths = fields.split(",").map((field) => field.trim()).filter((field) => field.length > 0);
|
|
49859
49908
|
if (paths.length > 0) {
|
|
49860
49909
|
const projected = projectFields(raw, paths).map((row, i) => {
|
|
49861
|
-
const missing = paths.filter((
|
|
49910
|
+
const missing = paths.filter((path58) => row[path58] === void 0);
|
|
49862
49911
|
const source = rows[i];
|
|
49863
49912
|
if (missing.length === 0 || source === void 0) return row;
|
|
49864
49913
|
const compactRow3 = compact5.row(source);
|
|
49865
|
-
for (const
|
|
49866
|
-
if (compactRow3[
|
|
49914
|
+
for (const path58 of missing) {
|
|
49915
|
+
if (compactRow3[path58] !== void 0) row[path58] = compactRow3[path58];
|
|
49867
49916
|
}
|
|
49868
49917
|
return row;
|
|
49869
49918
|
});
|
|
49870
|
-
const unmatched = paths.filter((
|
|
49919
|
+
const unmatched = paths.filter((path58) => projected.every((row) => row[path58] === void 0));
|
|
49871
49920
|
if (projected.length === 0 || unmatched.length === 0) return { rows: projected, fields: paths };
|
|
49872
49921
|
const carried = /* @__PURE__ */ new Set([...compact5.columns, ...raw.flatMap((row) => Object.keys(row))]);
|
|
49873
49922
|
return {
|
|
@@ -51227,54 +51276,54 @@ function ruleFields(node) {
|
|
|
51227
51276
|
([key, value2]) => (key === "and" || key === "or") && Array.isArray(value2) ? value2.flatMap(ruleFields) : [key]
|
|
51228
51277
|
);
|
|
51229
51278
|
}
|
|
51230
|
-
function branchRefusal(key, value2,
|
|
51279
|
+
function branchRefusal(key, value2, path58) {
|
|
51231
51280
|
if (!Array.isArray(value2) || value2.length === 0) {
|
|
51232
|
-
return `${
|
|
51281
|
+
return `${path58}.${key} must be a non-empty array of conditions \u2014 an empty one counts every event the pixel sends`;
|
|
51233
51282
|
}
|
|
51234
51283
|
for (const [index, child] of value2.entries()) {
|
|
51235
|
-
const refusal = ruleNodeRefusal(child, `${
|
|
51284
|
+
const refusal = ruleNodeRefusal(child, `${path58}.${key}[${index}]`);
|
|
51236
51285
|
if (refusal) {
|
|
51237
51286
|
return refusal;
|
|
51238
51287
|
}
|
|
51239
51288
|
}
|
|
51240
51289
|
return void 0;
|
|
51241
51290
|
}
|
|
51242
|
-
function conditionRefusal(key, value2,
|
|
51243
|
-
return key === "and" || key === "or" ? branchRefusal(key, value2,
|
|
51291
|
+
function conditionRefusal(key, value2, path58) {
|
|
51292
|
+
return key === "and" || key === "or" ? branchRefusal(key, value2, path58) : leafRefusal(key, value2, path58);
|
|
51244
51293
|
}
|
|
51245
|
-
function ruleNodeRefusal(node,
|
|
51294
|
+
function ruleNodeRefusal(node, path58) {
|
|
51246
51295
|
if (!isRecord2(node)) {
|
|
51247
|
-
return `${
|
|
51296
|
+
return `${path58} must be an object like {"URL":{"i_contains":"/thank-you"}}`;
|
|
51248
51297
|
}
|
|
51249
51298
|
const entries = Object.entries(node);
|
|
51250
51299
|
if (entries.length === 0) {
|
|
51251
|
-
return `${
|
|
51300
|
+
return `${path58} is empty \u2014 a rule with no condition counts every event the pixel sends`;
|
|
51252
51301
|
}
|
|
51253
51302
|
if (entries.length > 1) {
|
|
51254
|
-
return `${
|
|
51303
|
+
return `${path58} names ${entries.length} conditions side by side (${entries.map(([key]) => key).join(", ")}) \u2014 Meta reads one branch or one field test per object, so combine them with {"and":[\u2026]}`;
|
|
51255
51304
|
}
|
|
51256
51305
|
for (const [key, value2] of entries) {
|
|
51257
|
-
const refusal = conditionRefusal(key, value2,
|
|
51306
|
+
const refusal = conditionRefusal(key, value2, path58);
|
|
51258
51307
|
if (refusal) {
|
|
51259
51308
|
return refusal;
|
|
51260
51309
|
}
|
|
51261
51310
|
}
|
|
51262
51311
|
return void 0;
|
|
51263
51312
|
}
|
|
51264
|
-
function leafRefusal(field, condition,
|
|
51313
|
+
function leafRefusal(field, condition, path58) {
|
|
51265
51314
|
if (!isRecord2(condition)) {
|
|
51266
|
-
return `${
|
|
51315
|
+
return `${path58}.${field} must be a test like {"i_contains":"/thank-you"}, not a bare value`;
|
|
51267
51316
|
}
|
|
51268
51317
|
const tests = Object.entries(condition);
|
|
51269
51318
|
if (tests.length === 0) {
|
|
51270
|
-
return `${
|
|
51319
|
+
return `${path58}.${field} names no test \u2014 use one of ${Object.keys(RULE_OPERATORS).join(", ")}`;
|
|
51271
51320
|
}
|
|
51272
51321
|
if (tests.length > 1) {
|
|
51273
|
-
return `${
|
|
51322
|
+
return `${path58}.${field} names ${tests.length} operators at once (${tests.map(([operator]) => operator).join(", ")}) \u2014 test a field once per condition and combine them with {"and":[\u2026]}`;
|
|
51274
51323
|
}
|
|
51275
51324
|
for (const [operator] of tests) {
|
|
51276
51325
|
if (!RULE_OPERATORS[operator]) {
|
|
51277
|
-
return `${
|
|
51326
|
+
return `${path58}.${field} uses "${operator}", which is not a Meta rule operator \u2014 use one of ${Object.keys(RULE_OPERATORS).join(", ")} (URL matching is i_contains, not contains or includes)`;
|
|
51278
51327
|
}
|
|
51279
51328
|
}
|
|
51280
51329
|
return void 0;
|
|
@@ -51990,11 +52039,11 @@ var updateStatusSchema2 = z45.enum(UPDATE_STATUSES);
|
|
|
51990
52039
|
function currencyMinimums2(currencyCode) {
|
|
51991
52040
|
return CURRENCY_MINIMUMS2[currencyCode] ?? DEFAULT_CURRENCY_MINIMUM2;
|
|
51992
52041
|
}
|
|
51993
|
-
function validateDailyBudgetFloor(money, ctx,
|
|
52042
|
+
function validateDailyBudgetFloor(money, ctx, path58) {
|
|
51994
52043
|
if (money?.currencyCode) {
|
|
51995
52044
|
const min = currencyMinimums2(money.currencyCode).dailyBudgetMin;
|
|
51996
52045
|
if (Number(money.amount) < min) {
|
|
51997
|
-
ctx.addIssue({ code: "custom", path:
|
|
52046
|
+
ctx.addIssue({ code: "custom", path: path58, message: `below the ${min} ${money.currencyCode} daily minimum` });
|
|
51998
52047
|
}
|
|
51999
52048
|
}
|
|
52000
52049
|
}
|
|
@@ -52912,19 +52961,19 @@ function refuseDeleteByUpdate(payload, group) {
|
|
|
52912
52961
|
);
|
|
52913
52962
|
}
|
|
52914
52963
|
}
|
|
52915
|
-
function loadJsonFileArg3(
|
|
52916
|
-
if (typeof
|
|
52964
|
+
function loadJsonFileArg3(path58) {
|
|
52965
|
+
if (typeof path58 !== "string" || path58.length === 0) {
|
|
52917
52966
|
return {};
|
|
52918
52967
|
}
|
|
52919
52968
|
try {
|
|
52920
|
-
const parsed = JSON.parse(readFileSync11(
|
|
52969
|
+
const parsed = JSON.parse(readFileSync11(path58, "utf8"));
|
|
52921
52970
|
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
52922
|
-
failWriteValidation4(`${
|
|
52971
|
+
failWriteValidation4(`${path58} must contain a JSON object`);
|
|
52923
52972
|
}
|
|
52924
52973
|
return parsed;
|
|
52925
52974
|
} catch (err) {
|
|
52926
52975
|
if (err instanceof SyntaxError) {
|
|
52927
|
-
failWriteValidation4(`${
|
|
52976
|
+
failWriteValidation4(`${path58} is not valid JSON: ${err.message}`);
|
|
52928
52977
|
}
|
|
52929
52978
|
throw err;
|
|
52930
52979
|
}
|
|
@@ -58695,12 +58744,12 @@ function flowExists(slug) {
|
|
|
58695
58744
|
return existsSync3(join2(flowsDir(), slug, "_data.json"));
|
|
58696
58745
|
}
|
|
58697
58746
|
function readFlowTree(slug) {
|
|
58698
|
-
const
|
|
58699
|
-
if (!existsSync3(
|
|
58747
|
+
const path58 = join2(flowsDir(), slug, "_data.json");
|
|
58748
|
+
if (!existsSync3(path58)) {
|
|
58700
58749
|
failLocal(`No form "${slug}". Run "baker flows list" to see the forms in this workspace.`);
|
|
58701
58750
|
}
|
|
58702
58751
|
try {
|
|
58703
|
-
return JSON.parse(readFileSync13(
|
|
58752
|
+
return JSON.parse(readFileSync13(path58, "utf-8"));
|
|
58704
58753
|
} catch (error) {
|
|
58705
58754
|
failLocal(`Could not read form "${slug}": ${error instanceof Error ? error.message : String(error)}`);
|
|
58706
58755
|
}
|
|
@@ -59660,12 +59709,12 @@ function readPeopleFile(args8) {
|
|
|
59660
59709
|
}
|
|
59661
59710
|
function unreadablePeopleFile(args8) {
|
|
59662
59711
|
if (!args8["people-file"]) return void 0;
|
|
59663
|
-
const
|
|
59712
|
+
const path58 = String(args8["people-file"]);
|
|
59664
59713
|
try {
|
|
59665
|
-
readFileSync14(
|
|
59714
|
+
readFileSync14(path58, "utf8");
|
|
59666
59715
|
return void 0;
|
|
59667
59716
|
} catch {
|
|
59668
|
-
return `Couldn't read --people-file ${
|
|
59717
|
+
return `Couldn't read --people-file ${path58}. Check the path, or pass the people inline with --person.`;
|
|
59669
59718
|
}
|
|
59670
59719
|
}
|
|
59671
59720
|
function peopleLimitError(args8) {
|
|
@@ -60214,7 +60263,7 @@ var SOURCE_KINDS = ["webhook", "hubspot"];
|
|
|
60214
60263
|
var SOURCE_STATUSES = ["learning", "counting", "paused"];
|
|
60215
60264
|
var SOURCE_NAME_MAX = 80;
|
|
60216
60265
|
var sourceNameSchema = z49.string().trim().min(1).max(SOURCE_NAME_MAX).refine((name) => validateEventName(name) === null, REJECTION_MESSAGES.invalid_name);
|
|
60217
|
-
var
|
|
60266
|
+
var sourceIdSchema2 = z49.string().min(1);
|
|
60218
60267
|
var sourceMappingSchema = z49.record(z49.string(), z49.string().min(1)).superRefine((mapping, ctx) => {
|
|
60219
60268
|
for (const row of Object.keys(mapping)) {
|
|
60220
60269
|
const problem = mappingRowProblem(row);
|
|
@@ -60312,7 +60361,7 @@ var sourcesRequestSchema = z49.strictObject({
|
|
|
60312
60361
|
}).optional(),
|
|
60313
60362
|
/** Change what a HubSpot event watches. It counts from now on under the new trigger; the rows stay. The object cannot change: the rows read it. */
|
|
60314
60363
|
setTrigger: z49.strictObject({
|
|
60315
|
-
sourceId:
|
|
60364
|
+
sourceId: sourceIdSchema2,
|
|
60316
60365
|
trigger: hubspotTriggerInputSchema,
|
|
60317
60366
|
contacts: hubspotDealContactsSchema.optional()
|
|
60318
60367
|
}).optional(),
|
|
@@ -60320,7 +60369,7 @@ var sourcesRequestSchema = z49.strictObject({
|
|
|
60320
60369
|
preview: hubspotPreviewRequestSchema.optional(),
|
|
60321
60370
|
/** Change where a HubSpot-read source takes its amount from; no `amountProperty` clears it. Sugar over `map`. */
|
|
60322
60371
|
setAmount: z49.strictObject({
|
|
60323
|
-
sourceId:
|
|
60372
|
+
sourceId: sourceIdSchema2,
|
|
60324
60373
|
amountProperty: z49.string().trim().min(1).optional(),
|
|
60325
60374
|
currency: currencyCodeSchema.optional()
|
|
60326
60375
|
}).optional(),
|
|
@@ -60334,7 +60383,7 @@ var sourcesRequestSchema = z49.strictObject({
|
|
|
60334
60383
|
* has a timestamp for, so nothing is invented. Dry unless `write`.
|
|
60335
60384
|
*/
|
|
60336
60385
|
backfill: z49.strictObject({
|
|
60337
|
-
sourceId:
|
|
60386
|
+
sourceId: sourceIdSchema2,
|
|
60338
60387
|
/** ISO instant, or Unix milliseconds. Bounded by the 400 days the store keeps. */
|
|
60339
60388
|
since: z49.union([z49.string().trim().min(1), z49.number()]),
|
|
60340
60389
|
/**
|
|
@@ -60353,10 +60402,10 @@ var sourcesRequestSchema = z49.strictObject({
|
|
|
60353
60402
|
/** Without it, nothing is counted and the answer says what would be. */
|
|
60354
60403
|
write: z49.boolean().optional()
|
|
60355
60404
|
}).optional(),
|
|
60356
|
-
map: z49.strictObject({ sourceId:
|
|
60357
|
-
pause: z49.strictObject({ sourceId:
|
|
60358
|
-
resume: z49.strictObject({ sourceId:
|
|
60359
|
-
remove: z49.strictObject({ sourceId:
|
|
60405
|
+
map: z49.strictObject({ sourceId: sourceIdSchema2, mapping: sourceMappingSchema }).optional(),
|
|
60406
|
+
pause: z49.strictObject({ sourceId: sourceIdSchema2 }).optional(),
|
|
60407
|
+
resume: z49.strictObject({ sourceId: sourceIdSchema2 }).optional(),
|
|
60408
|
+
remove: z49.strictObject({ sourceId: sourceIdSchema2 }).optional()
|
|
60360
60409
|
});
|
|
60361
60410
|
var sourceRefusalSchema = z49.strictObject({
|
|
60362
60411
|
at: z49.number(),
|
|
@@ -60637,11 +60686,11 @@ function parseFieldArgs(argv) {
|
|
|
60637
60686
|
for (const pair of parseRepeated(argv, "--field")) {
|
|
60638
60687
|
const eq = pair.indexOf("=");
|
|
60639
60688
|
const field = eq === -1 ? pair : pair.slice(0, eq);
|
|
60640
|
-
const
|
|
60689
|
+
const path58 = eq === -1 ? "" : pair.slice(eq + 1).trim();
|
|
60641
60690
|
const problem = mappingRowProblem(field);
|
|
60642
60691
|
if (problem !== null) throw new ConversionArgsError(problem);
|
|
60643
|
-
if (
|
|
60644
|
-
mapping[field] =
|
|
60692
|
+
if (path58 === "") throw new ConversionArgsError(`--field ${field} needs a path: --field ${field}=<dotted.path>.`);
|
|
60693
|
+
mapping[field] = path58;
|
|
60645
60694
|
}
|
|
60646
60695
|
return mapping;
|
|
60647
60696
|
}
|
|
@@ -62243,11 +62292,11 @@ function unwrap(response) {
|
|
|
62243
62292
|
}
|
|
62244
62293
|
return response.data;
|
|
62245
62294
|
}
|
|
62246
|
-
async function readAvatars(
|
|
62247
|
-
return unwrap(await apiGet(
|
|
62295
|
+
async function readAvatars(path58, params) {
|
|
62296
|
+
return unwrap(await apiGet(path58, params));
|
|
62248
62297
|
}
|
|
62249
|
-
async function writeAvatars(
|
|
62250
|
-
return unwrap(await apiPost(
|
|
62298
|
+
async function writeAvatars(path58, body) {
|
|
62299
|
+
return unwrap(await apiPost(path58, body));
|
|
62251
62300
|
}
|
|
62252
62301
|
|
|
62253
62302
|
// src/commands/avatars/create.ts
|
|
@@ -63156,12 +63205,12 @@ function missingFontFiles(urls, available) {
|
|
|
63156
63205
|
function planFontAdoption(sources, families) {
|
|
63157
63206
|
const wanted = new Map(families.map((family) => [normalizeFamily(family), family]));
|
|
63158
63207
|
const byFamily = /* @__PURE__ */ new Map();
|
|
63159
|
-
for (const { path:
|
|
63160
|
-
const dir = posix.dirname(
|
|
63208
|
+
for (const { path: path58, source } of sources) {
|
|
63209
|
+
const dir = posix.dirname(path58);
|
|
63161
63210
|
for (const face of declaredFontFaces(source)) {
|
|
63162
63211
|
if (!wanted.has(face.family)) continue;
|
|
63163
63212
|
const perFile = byFamily.get(face.family) ?? /* @__PURE__ */ new Map();
|
|
63164
|
-
perFile.set(
|
|
63213
|
+
perFile.set(path58, [...perFile.get(path58) ?? [], rebaseFontFaceSrc(face.block, dir)]);
|
|
63165
63214
|
byFamily.set(face.family, perFile);
|
|
63166
63215
|
}
|
|
63167
63216
|
}
|
|
@@ -68168,8 +68217,8 @@ function relayPrompt(args8) {
|
|
|
68168
68217
|
...args8.exclusionsLast ? ["", EXCLUSIONS] : []
|
|
68169
68218
|
].join("\n");
|
|
68170
68219
|
}
|
|
68171
|
-
function ingestNode(id,
|
|
68172
|
-
return { id, type: "ingest", params: { source: "path", path:
|
|
68220
|
+
function ingestNode(id, path58, expect) {
|
|
68221
|
+
return { id, type: "ingest", params: { source: "path", path: path58, expect } };
|
|
68173
68222
|
}
|
|
68174
68223
|
function annotateBlueprintWithLabels(blueprintInput, elementsInput) {
|
|
68175
68224
|
if (!blueprintInput || typeof blueprintInput !== "object") return blueprintInput;
|
|
@@ -68424,8 +68473,7 @@ function fontLabel(font) {
|
|
|
68424
68473
|
const origin = {
|
|
68425
68474
|
brand_file: "the brand's font file",
|
|
68426
68475
|
tokens: "named in tokens.json, loaded as a web font",
|
|
68427
|
-
brand_md: "named in BRAND.md, loaded as a web font"
|
|
68428
|
-
default: "the default, since the brand names no typeface"
|
|
68476
|
+
brand_md: "named in BRAND.md, loaded as a web font"
|
|
68429
68477
|
};
|
|
68430
68478
|
const name = font.family ?? ("path" in font.slot ? font.slot.path.split("/").pop() ?? font.slot.path : "a web font");
|
|
68431
68479
|
return `${name} (${origin[font.origin]})`;
|
|
@@ -71547,7 +71595,7 @@ var rerunCommand = defineCommand132({
|
|
|
71547
71595
|
|
|
71548
71596
|
// src/commands/canvas/scaffold-static-ad.ts
|
|
71549
71597
|
import { mkdir as mkdir8, readFile as readFile24, writeFile as writeFile12 } from "fs/promises";
|
|
71550
|
-
import
|
|
71598
|
+
import path30 from "path";
|
|
71551
71599
|
import { defineCommand as defineCommand134 } from "citty";
|
|
71552
71600
|
|
|
71553
71601
|
// src/commands/canvas/creative-limit.ts
|
|
@@ -71609,7 +71657,7 @@ import path26 from "path";
|
|
|
71609
71657
|
|
|
71610
71658
|
// src/engine/scaffold/static-fonts.ts
|
|
71611
71659
|
import { marked } from "marked";
|
|
71612
|
-
var
|
|
71660
|
+
var HEADLINE_WEIGHT = 800;
|
|
71613
71661
|
var HEADLINE_WORDS = /\b(headings?|headlines?|display|titles?|h[1-3])\b/i;
|
|
71614
71662
|
var BODY_WORDS = /\b(body|paragraphs?|text|copy)\b/i;
|
|
71615
71663
|
var PROHIBITION = /\b(never|don'?t|do not|avoid|instead of|ban(?:ned)?|no)\b/i;
|
|
@@ -71713,7 +71761,7 @@ async function brandHeadlineFont(args8) {
|
|
|
71713
71761
|
if (args8.file) return fileFace(args8.file);
|
|
71714
71762
|
const named = args8.named.headline ?? args8.named.body;
|
|
71715
71763
|
if (!named) return null;
|
|
71716
|
-
const url = await args8.resolveUrl(named.family,
|
|
71764
|
+
const url = await args8.resolveUrl(named.family, HEADLINE_WEIGHT);
|
|
71717
71765
|
return url ? { slot: { url }, family: named.family, origin: named.origin } : null;
|
|
71718
71766
|
}
|
|
71719
71767
|
|
|
@@ -71886,7 +71934,6 @@ function fileExists(target2) {
|
|
|
71886
71934
|
}
|
|
71887
71935
|
|
|
71888
71936
|
// src/commands/canvas/creative-definition.ts
|
|
71889
|
-
import path28 from "path";
|
|
71890
71937
|
import { parseDocument as parseDocument2 } from "yaml";
|
|
71891
71938
|
var PLATFORM_VALUES = ["meta", "google", "linkedin", "tiktok", "youtube", "x", "other"];
|
|
71892
71939
|
var FORMAT_VALUES = ["1:1", "4:5", "9:16", "16:9", "1.91:1"];
|
|
@@ -71951,16 +71998,16 @@ function parseDefinitionSourceFields(raw) {
|
|
|
71951
71998
|
}
|
|
71952
71999
|
|
|
71953
72000
|
// src/commands/canvas/scaffold-static-ad-paths.ts
|
|
71954
|
-
import
|
|
72001
|
+
import path28 from "path";
|
|
71955
72002
|
function resolveScaffoldStaticAdPaths(rawFile, out, cwd = process.cwd(), slug) {
|
|
71956
72003
|
const file = rawFile.trim();
|
|
71957
72004
|
const imageIsUrl = /^https?:\/\//i.test(file);
|
|
71958
|
-
const imageSource = imageIsUrl ? file :
|
|
71959
|
-
const outPath = out ?
|
|
71960
|
-
const blueprintPath2 =
|
|
71961
|
-
const creativeDir = slug ?
|
|
71962
|
-
const definitionPath = creativeDir ?
|
|
71963
|
-
const referencesDir = creativeDir ?
|
|
72005
|
+
const imageSource = imageIsUrl ? file : path28.resolve(cwd, file);
|
|
72006
|
+
const outPath = out ? path28.resolve(cwd, out) : slug ? path28.join(cwd, "src", "creatives", slug, `${slug}.canvas.json`) : imageIsUrl ? path28.join(cwd, "static-ad.canvas.json") : path28.join(path28.dirname(imageSource), "static-ad.canvas.json");
|
|
72007
|
+
const blueprintPath2 = path28.join(path28.dirname(outPath), "prompt.json");
|
|
72008
|
+
const creativeDir = slug ? path28.dirname(outPath) : null;
|
|
72009
|
+
const definitionPath = creativeDir ? path28.join(creativeDir, "_definition.md") : null;
|
|
72010
|
+
const referencesDir = creativeDir ? path28.join(creativeDir, "references") : null;
|
|
71964
72011
|
return { imageIsUrl, imageSource, outPath, blueprintPath: blueprintPath2, creativeDir, definitionPath, referencesDir };
|
|
71965
72012
|
}
|
|
71966
72013
|
var SCAFFOLD_SLUG_PATTERN = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
|
|
@@ -71971,7 +72018,7 @@ function isValidScaffoldSlug(slug) {
|
|
|
71971
72018
|
|
|
71972
72019
|
// src/commands/canvas/sync-definition.ts
|
|
71973
72020
|
import { readdir as readdir11, readFile as readFile23, stat as stat4 } from "fs/promises";
|
|
71974
|
-
import
|
|
72021
|
+
import path29 from "path";
|
|
71975
72022
|
import { defineCommand as defineCommand133 } from "citty";
|
|
71976
72023
|
|
|
71977
72024
|
// src/commands/canvas/definition-graph.ts
|
|
@@ -72028,7 +72075,7 @@ function buildDefinitionSyncPayload(input, graph, chatId) {
|
|
|
72028
72075
|
}
|
|
72029
72076
|
async function readDefinitionSourceFields(canvasPath) {
|
|
72030
72077
|
try {
|
|
72031
|
-
return parseDefinitionSourceFields(await readFile23(
|
|
72078
|
+
return parseDefinitionSourceFields(await readFile23(path29.join(path29.dirname(canvasPath), "_definition.md"), "utf8"));
|
|
72032
72079
|
} catch {
|
|
72033
72080
|
return {};
|
|
72034
72081
|
}
|
|
@@ -72051,15 +72098,15 @@ async function syncCreativeDefinitionBestEffort(input) {
|
|
|
72051
72098
|
}
|
|
72052
72099
|
}
|
|
72053
72100
|
async function resolveCanvasPath(inputPath) {
|
|
72054
|
-
const resolved =
|
|
72101
|
+
const resolved = path29.resolve(inputPath);
|
|
72055
72102
|
let dir = resolved;
|
|
72056
72103
|
try {
|
|
72057
72104
|
if ((await stat4(resolved)).isFile()) {
|
|
72058
72105
|
if (resolved.endsWith(".canvas.json")) return resolved;
|
|
72059
|
-
dir =
|
|
72106
|
+
dir = path29.dirname(resolved);
|
|
72060
72107
|
}
|
|
72061
72108
|
} catch {
|
|
72062
|
-
dir = resolved.endsWith(".canvas.json") ?
|
|
72109
|
+
dir = resolved.endsWith(".canvas.json") ? path29.dirname(resolved) : resolved;
|
|
72063
72110
|
}
|
|
72064
72111
|
let entries;
|
|
72065
72112
|
try {
|
|
@@ -72070,7 +72117,7 @@ async function resolveCanvasPath(inputPath) {
|
|
|
72070
72117
|
const canvases = entries.filter((name) => name.endsWith(".canvas.json"));
|
|
72071
72118
|
const slug = creativeSlugFromCanvasPath(`${dir}/x/`);
|
|
72072
72119
|
const chosen = (slug ? canvases.find((name) => name === `${slug}.canvas.json`) : void 0) ?? canvases[0];
|
|
72073
|
-
return chosen ?
|
|
72120
|
+
return chosen ? path29.join(dir, chosen) : null;
|
|
72074
72121
|
}
|
|
72075
72122
|
var syncDefinitionCommand = defineCommand133({
|
|
72076
72123
|
meta: {
|
|
@@ -72246,7 +72293,7 @@ function mergeReferenceIntoBlueprint(blueprint, reference) {
|
|
|
72246
72293
|
|
|
72247
72294
|
// src/commands/canvas/scaffold-static-ad.ts
|
|
72248
72295
|
function toCanvasRelative2(canvasDir, file) {
|
|
72249
|
-
const rel =
|
|
72296
|
+
const rel = path30.relative(canvasDir, file).split(path30.sep).join("/");
|
|
72250
72297
|
return rel.startsWith(".") ? rel : `./${rel}`;
|
|
72251
72298
|
}
|
|
72252
72299
|
async function uploadSourceAsReference(source, isUrl, client) {
|
|
@@ -72559,7 +72606,7 @@ var scaffoldStaticAdCommand = defineCommand134({
|
|
|
72559
72606
|
}
|
|
72560
72607
|
const { imageIsUrl, imageSource, outPath, blueprintPath: blueprintPath2, definitionPath, referencesDir } = resolveScaffoldStaticAdPaths(sourceFile, args8.out ? String(args8.out) : void 0, process.cwd(), slug);
|
|
72561
72608
|
if (slug) await enforceNewCreativeLimit(slug, outPath);
|
|
72562
|
-
await mkdir8(
|
|
72609
|
+
await mkdir8(path30.dirname(outPath), { recursive: true });
|
|
72563
72610
|
let models;
|
|
72564
72611
|
try {
|
|
72565
72612
|
models = resolveModels(args8);
|
|
@@ -72592,7 +72639,7 @@ var scaffoldStaticAdCommand = defineCommand134({
|
|
|
72592
72639
|
const blueprint = mergeReferenceIntoBlueprint(vision.blueprint, reference);
|
|
72593
72640
|
const elements = castAvatarsOnStaticElements(vision.elements, cast.avatars);
|
|
72594
72641
|
const uncast = staticAvatarsNotCast(vision.elements, cast.handles);
|
|
72595
|
-
const canvasDir =
|
|
72642
|
+
const canvasDir = path30.dirname(outPath);
|
|
72596
72643
|
const workspaceRoot = await findBrandRoot(canvasDir) ?? process.cwd();
|
|
72597
72644
|
const kit = await readStaticBrandKit(workspaceRoot);
|
|
72598
72645
|
const annotated = annotateBlueprintWithLabels(blueprint, elements);
|
|
@@ -72640,7 +72687,7 @@ var scaffoldStaticAdCommand = defineCommand134({
|
|
|
72640
72687
|
} catch (e) {
|
|
72641
72688
|
return fail4("scaffold", e instanceof Error ? e.message : String(e));
|
|
72642
72689
|
}
|
|
72643
|
-
const validation = await validateScaffoldedStaticAd(canvas,
|
|
72690
|
+
const validation = await validateScaffoldedStaticAd(canvas, path30.dirname(outPath));
|
|
72644
72691
|
if (validation.blocking.length > 0) {
|
|
72645
72692
|
process.stderr.write(
|
|
72646
72693
|
`${JSON.stringify({ ok: false, error: { code: "validation", issues: validation.blocking } }, null, 2)}
|
|
@@ -72729,7 +72776,7 @@ var scaffoldStaticAdCommand = defineCommand134({
|
|
|
72729
72776
|
run_estimated_credits: validation.estimatedCredits
|
|
72730
72777
|
},
|
|
72731
72778
|
checklist: {
|
|
72732
|
-
edit_prompt: `Edit ${
|
|
72779
|
+
edit_prompt: `Edit ${path30.basename(blueprintPath2)} \u2014 it is the blueprint generated from your image; rewrite it into the ad you want (palette, copy, claims, subjects). It feeds the generator directly.${reference ? " Its `reference` block is the library's read of the source ad (container, layout, mechanism, offer, text blocks): keep it as the account of why the ad won, and rebuild it for our brand." : ""}`,
|
|
72733
72780
|
winning_mechanisms: report.winning_mechanisms,
|
|
72734
72781
|
rebuild_the_mechanism: "`winning_mechanisms` is WHY the source ad works. Rewrite each one for our brand in prompt.json (a rhyme stays a rhyme in our words, a before/after stays a before/after of our product); never copy the source's literal copy.",
|
|
72735
72782
|
assets_to_supply: report.elements,
|
|
@@ -72791,7 +72838,7 @@ function clientLogoMissNote(decision, domain) {
|
|
|
72791
72838
|
|
|
72792
72839
|
// src/commands/canvas/scaffold-ad.ts
|
|
72793
72840
|
import { copyFile, cp, mkdir as mkdir9, readFile as readFile26, stat as stat5, writeFile as writeFile14 } from "fs/promises";
|
|
72794
|
-
import
|
|
72841
|
+
import path32 from "path";
|
|
72795
72842
|
import { defineCommand as defineCommand135 } from "citty";
|
|
72796
72843
|
|
|
72797
72844
|
// src/engine/scaffold/ad-spec.ts
|
|
@@ -73506,7 +73553,7 @@ function injectAdBrandOverlay(indexHtml, overlayHtml, style = {}) {
|
|
|
73506
73553
|
|
|
73507
73554
|
// src/commands/canvas/composition-dims.ts
|
|
73508
73555
|
import { readFile as readFile25, writeFile as writeFile13 } from "fs/promises";
|
|
73509
|
-
import
|
|
73556
|
+
import path31 from "path";
|
|
73510
73557
|
function patchCompositionMeta(metaJson, dims) {
|
|
73511
73558
|
try {
|
|
73512
73559
|
const meta = JSON.parse(metaJson);
|
|
@@ -73521,10 +73568,10 @@ function patchCompositionHtml(html, dims) {
|
|
|
73521
73568
|
return html.replace(/(<meta\s+name="viewport"\s+content="width=)\d+(,\s*height=)\d+(")/i, `$1${dims.w}$2${dims.h}$3`).replace(/(width:\s*)\d+(px;\s*height:\s*)\d+(px;)/i, `$1${dims.w}$2${dims.h}$3`).replace(/(data-width=")\d+(")/i, `$1${dims.w}$2`).replace(/(data-height=")\d+(")/i, `$1${dims.h}$2`);
|
|
73522
73569
|
}
|
|
73523
73570
|
async function stampCompositionDims(compositionDir, dims) {
|
|
73524
|
-
const metaPath =
|
|
73571
|
+
const metaPath = path31.join(compositionDir, "meta.json");
|
|
73525
73572
|
const rawMeta = await readFile25(metaPath, "utf8");
|
|
73526
73573
|
await writeFile13(metaPath, patchCompositionMeta(rawMeta, dims), "utf8");
|
|
73527
|
-
const htmlPath =
|
|
73574
|
+
const htmlPath = path31.join(compositionDir, "index.html");
|
|
73528
73575
|
const rawHtml = await readFile25(htmlPath, "utf8");
|
|
73529
73576
|
await writeFile13(htmlPath, patchCompositionHtml(rawHtml, dims), "utf8");
|
|
73530
73577
|
}
|
|
@@ -73821,8 +73868,8 @@ var scaffoldAdCommand = defineCommand135({
|
|
|
73821
73868
|
videoModel: chosenVideoModel,
|
|
73822
73869
|
...avatarVoice ? { avatarVoice } : {}
|
|
73823
73870
|
});
|
|
73824
|
-
const slug = args8.slug ??
|
|
73825
|
-
const outPath = args8.out ?? (args8.slug ?
|
|
73871
|
+
const slug = args8.slug ?? path32.basename(specPath).replace(/\.[^.]+$/, "");
|
|
73872
|
+
const outPath = args8.out ?? (args8.slug ? path32.join("src/creatives", slug, `${slug}.canvas.json`) : path32.join(path32.dirname(specPath), `${slug}.canvas.json`));
|
|
73826
73873
|
if (args8.slug) await enforceNewCreativeLimit(slug, outPath);
|
|
73827
73874
|
let outAr;
|
|
73828
73875
|
try {
|
|
@@ -73840,28 +73887,28 @@ var scaffoldAdCommand = defineCommand135({
|
|
|
73840
73887
|
return;
|
|
73841
73888
|
}
|
|
73842
73889
|
const outDims = canvasDims(outAr);
|
|
73843
|
-
const outDir =
|
|
73890
|
+
const outDir = path32.dirname(outPath);
|
|
73844
73891
|
await mkdir9(outDir, { recursive: true });
|
|
73845
|
-
const compositionDest =
|
|
73846
|
-
const captionsDest =
|
|
73892
|
+
const compositionDest = path32.join(outDir, "video-overlay-composition");
|
|
73893
|
+
const captionsDest = path32.join(outDir, "tiktok-captions-composition");
|
|
73847
73894
|
await cp(SHIPPED_OVERLAY_COMPOSITION_DIR, compositionDest, { recursive: true });
|
|
73848
73895
|
await cp(SHIPPED_CAPTIONS_DIR, captionsDest, { recursive: true });
|
|
73849
73896
|
await stampCompositionDims(compositionDest, outDims);
|
|
73850
73897
|
await stampCompositionDims(captionsDest, outDims);
|
|
73851
|
-
const captionsIndex =
|
|
73898
|
+
const captionsIndex = path32.join(captionsDest, "index.html");
|
|
73852
73899
|
await writeFile14(captionsIndex, injectAdCaptionPlacement(await readFile26(captionsIndex, "utf-8"), outAr), "utf-8");
|
|
73853
73900
|
const face = await stageBrandDisplayFace(outDir, captionsDest);
|
|
73854
73901
|
if (face) {
|
|
73855
73902
|
await writeFile14(captionsIndex, injectAdDisplayFace(await readFile26(captionsIndex, "utf-8"), face.file), "utf-8");
|
|
73856
73903
|
}
|
|
73857
|
-
const blueprintPath2 =
|
|
73858
|
-
const blueprintStylePath =
|
|
73904
|
+
const blueprintPath2 = path32.join(outDir, "prompt.json");
|
|
73905
|
+
const blueprintStylePath = path32.join(outDir, "prompt.style.json");
|
|
73859
73906
|
await writeSceneFiles(outDir, blueprint);
|
|
73860
73907
|
await writeFile14(blueprintStylePath, renderStyleProjectionFromValue(blueprint), "utf8");
|
|
73861
|
-
await writeFile14(
|
|
73908
|
+
await writeFile14(path32.join(outDir, AD_SPEC_FILE), `${JSON.stringify(specArtifact, null, 2)}
|
|
73862
73909
|
`, "utf8");
|
|
73863
73910
|
const logoPath = noBrand ? void 0 : spec.data.brand?.logo?.trim();
|
|
73864
|
-
const transcriptPath =
|
|
73911
|
+
const transcriptPath = path32.join(outDir, "transcript.json");
|
|
73865
73912
|
if (spec.data.voiceover === false) {
|
|
73866
73913
|
await writeFile14(transcriptPath, `${JSON.stringify(staticTranscript(spec.data, chosenVideoModel), null, 2)}
|
|
73867
73914
|
`, "utf-8");
|
|
@@ -73873,10 +73920,10 @@ var scaffoldAdCommand = defineCommand135({
|
|
|
73873
73920
|
// that stops the whole canvas. The same sheet model every other scaffold uses.
|
|
73874
73921
|
sheetModel: ACTOR_SHEET_MODEL,
|
|
73875
73922
|
videoModel: chosenVideoModel,
|
|
73876
|
-
overlayCompositionPath:
|
|
73877
|
-
captionsCompositionPath:
|
|
73878
|
-
blueprintPath:
|
|
73879
|
-
blueprintStylePath:
|
|
73923
|
+
overlayCompositionPath: path32.relative(outDir, compositionDest),
|
|
73924
|
+
captionsCompositionPath: path32.relative(outDir, captionsDest),
|
|
73925
|
+
blueprintPath: path32.relative(outDir, blueprintPath2),
|
|
73926
|
+
blueprintStylePath: path32.relative(outDir, blueprintStylePath),
|
|
73880
73927
|
aspect: spec.data.format.aspect_ratio,
|
|
73881
73928
|
resolution: spec.data.format.resolution,
|
|
73882
73929
|
// A beat is one clause and one card, so the cap has to clear a whole clause.
|
|
@@ -73915,17 +73962,17 @@ var scaffoldAdCommand = defineCommand135({
|
|
|
73915
73962
|
// the stock voice this exists to avoid. It is to convert the LATER extracts onto the
|
|
73916
73963
|
// first beat of the same speaker, which keeps a voice the clip really produced.
|
|
73917
73964
|
...avatar ? { keepRenderedVoice: true } : {},
|
|
73918
|
-
...spec.data.voiceover === false ? { staticTranscriptPath:
|
|
73965
|
+
...spec.data.voiceover === false ? { staticTranscriptPath: path32.relative(outDir, transcriptPath) } : {}
|
|
73919
73966
|
};
|
|
73920
73967
|
const canvas = scaffoldVideoCanvas(blueprint, adSpecCastElements(spec.data, avatar), opts);
|
|
73921
73968
|
const renderNode5 = canvas.nodes.find((n) => n.type === "hyperframe_render");
|
|
73922
|
-
const renderedDir = renderNode5 ?
|
|
73969
|
+
const renderedDir = renderNode5 ? path32.join(outDir, String(renderNode5.params?.composition ?? "")) : null;
|
|
73923
73970
|
let staged = null;
|
|
73924
73971
|
let markIsLight = false;
|
|
73925
73972
|
if (logoPath && renderedDir) {
|
|
73926
|
-
const ext =
|
|
73973
|
+
const ext = path32.extname(logoPath) || ".png";
|
|
73927
73974
|
try {
|
|
73928
|
-
await copyFile(logoPath,
|
|
73975
|
+
await copyFile(logoPath, path32.join(renderedDir, `brand-mark${ext}`));
|
|
73929
73976
|
staged = { file: `brand-mark${ext}`, alt: spec.data.brand?.name ?? "brand" };
|
|
73930
73977
|
markIsLight = await markInkIsLight(logoPath);
|
|
73931
73978
|
} catch {
|
|
@@ -73944,12 +73991,12 @@ var scaffoldAdCommand = defineCommand135({
|
|
|
73944
73991
|
plateIsDark: plateIsDark(spec.data.brand?.palette)
|
|
73945
73992
|
}) : "";
|
|
73946
73993
|
if (overlayHtml && renderedDir) {
|
|
73947
|
-
const indexPath =
|
|
73994
|
+
const indexPath = path32.join(renderedDir, "index.html");
|
|
73948
73995
|
const html = await readFile26(indexPath, "utf-8");
|
|
73949
73996
|
await writeFile14(indexPath, injectAdBrandOverlay(html, overlayHtml, { aspect: outAr, ...face ? { face: AD_DISPLAY_FAMILY } : {} }), "utf-8");
|
|
73950
73997
|
}
|
|
73951
73998
|
await writeFile14(
|
|
73952
|
-
|
|
73999
|
+
path32.join(outDir, REBUILD_FILE),
|
|
73953
74000
|
`${JSON.stringify({ elements: adSpecCastElements(spec.data, avatar), opts }, null, 2)}
|
|
73954
74001
|
`,
|
|
73955
74002
|
"utf8"
|
|
@@ -73979,7 +74026,7 @@ var scaffoldAdCommand = defineCommand135({
|
|
|
73979
74026
|
return;
|
|
73980
74027
|
}
|
|
73981
74028
|
if (args8.slug) {
|
|
73982
|
-
const definitionPath =
|
|
74029
|
+
const definitionPath = path32.join(outDir, "_definition.md");
|
|
73983
74030
|
const definitionExists = await stat5(definitionPath).then(() => true, () => false);
|
|
73984
74031
|
if (!definitionExists) {
|
|
73985
74032
|
await writeFile14(
|
|
@@ -74097,9 +74144,9 @@ async function fetchClientLogo() {
|
|
|
74097
74144
|
if (!response.ok) return { ok: false, reason: clientLogoMissNote({ use: false, reason: "no_hits" }, domain) };
|
|
74098
74145
|
const bytes = Buffer.from(await response.arrayBuffer());
|
|
74099
74146
|
const extension = /\.(svg|png|jpg|jpeg|webp)(?:\?|$)/i.exec(decision.url)?.[1]?.toLowerCase() ?? "svg";
|
|
74100
|
-
const dir =
|
|
74147
|
+
const dir = path32.join(BRAND_DIR, "logos");
|
|
74101
74148
|
await mkdir9(dir, { recursive: true });
|
|
74102
|
-
const file =
|
|
74149
|
+
const file = path32.join(dir, `brand-mark.${extension}`);
|
|
74103
74150
|
await writeFile14(file, bytes);
|
|
74104
74151
|
return { ok: true, path: file };
|
|
74105
74152
|
} catch {
|
|
@@ -74118,14 +74165,14 @@ async function stageBrandDisplayFace(outDir, compositionDir) {
|
|
|
74118
74165
|
if (!face) return null;
|
|
74119
74166
|
try {
|
|
74120
74167
|
if ("path" in face.slot) {
|
|
74121
|
-
const file2 = `brand-face${
|
|
74122
|
-
await copyFile(face.slot.path,
|
|
74123
|
-
return { file: file2, label: `the font file \`${
|
|
74168
|
+
const file2 = `brand-face${path32.extname(face.slot.path).toLowerCase()}`;
|
|
74169
|
+
await copyFile(face.slot.path, path32.join(compositionDir, file2));
|
|
74170
|
+
return { file: file2, label: `the font file \`${path32.relative(root, face.slot.path)}\`` };
|
|
74124
74171
|
}
|
|
74125
74172
|
const { buffer } = await fetchExternalBytes(face.slot.url, { maxBytes: MAX_FONT_BYTES });
|
|
74126
74173
|
const extension = /\.(woff2|woff|ttf|otf)(?:\?|$)/i.exec(face.slot.url)?.[1]?.toLowerCase() ?? "woff2";
|
|
74127
74174
|
const file = `brand-face.${extension}`;
|
|
74128
|
-
await writeFile14(
|
|
74175
|
+
await writeFile14(path32.join(compositionDir, file), buffer);
|
|
74129
74176
|
return { file, label: `${face.family ?? "the brand's typeface"}, loaded as a web font` };
|
|
74130
74177
|
} catch {
|
|
74131
74178
|
return null;
|
|
@@ -74135,7 +74182,7 @@ async function stageBrandDisplayFace(outDir, compositionDir) {
|
|
|
74135
74182
|
// src/commands/canvas/scaffold-video.ts
|
|
74136
74183
|
import { cp as cp2, mkdir as mkdir10, readFile as readFile29, rm as rm8, writeFile as writeFile15 } from "fs/promises";
|
|
74137
74184
|
import { tmpdir as tmpdir3 } from "os";
|
|
74138
|
-
import
|
|
74185
|
+
import path34 from "path";
|
|
74139
74186
|
import { defineCommand as defineCommand136 } from "citty";
|
|
74140
74187
|
|
|
74141
74188
|
// src/engine/scaffold/lib/model-router.ts
|
|
@@ -74276,7 +74323,7 @@ async function detectSceneCutsPySceneDetect(filePath, opts = {}) {
|
|
|
74276
74323
|
|
|
74277
74324
|
// src/commands/canvas/gitignore.ts
|
|
74278
74325
|
import { appendFile, readFile as readFile28 } from "fs/promises";
|
|
74279
|
-
import
|
|
74326
|
+
import path33 from "path";
|
|
74280
74327
|
function missingGitignoreEntries(existing, entries) {
|
|
74281
74328
|
const present2 = new Set(
|
|
74282
74329
|
existing.split("\n").map((l) => l.trim().replace(/\/+$/, "")).filter((l) => l.length > 0 && !l.startsWith("#"))
|
|
@@ -74284,7 +74331,7 @@ function missingGitignoreEntries(existing, entries) {
|
|
|
74284
74331
|
return entries.filter((e) => !present2.has(e.trim().replace(/\/+$/, "")));
|
|
74285
74332
|
}
|
|
74286
74333
|
async function ensureGitignore(dir, entries) {
|
|
74287
|
-
const file =
|
|
74334
|
+
const file = path33.join(dir, ".gitignore");
|
|
74288
74335
|
let existing;
|
|
74289
74336
|
try {
|
|
74290
74337
|
existing = await readFile28(file, "utf8");
|
|
@@ -74329,7 +74376,7 @@ async function loadTranscriptBestEffort(ref2) {
|
|
|
74329
74376
|
async function stageCaptions(outDir, transcript) {
|
|
74330
74377
|
const text2 = transcript?.trim();
|
|
74331
74378
|
if (!text2 || text2 === "[]") return {};
|
|
74332
|
-
const compositionPath =
|
|
74379
|
+
const compositionPath = path34.join(outDir, "tiktok-captions-composition");
|
|
74333
74380
|
await cp2(SHIPPED_CAPTIONS_DIR, compositionPath, { recursive: true });
|
|
74334
74381
|
return { compositionPath };
|
|
74335
74382
|
}
|
|
@@ -74365,7 +74412,7 @@ var VIDEO_EXT_BY_MIME = {
|
|
|
74365
74412
|
"video/x-matroska": ".mkv"
|
|
74366
74413
|
};
|
|
74367
74414
|
function referenceVideoExt(url, contentType) {
|
|
74368
|
-
const fromPath =
|
|
74415
|
+
const fromPath = path34.extname(new URL(url).pathname).toLowerCase();
|
|
74369
74416
|
if (fromPath && fromPath.length <= 5) return fromPath;
|
|
74370
74417
|
const mime = (contentType ?? "").split(";")[0]?.trim().toLowerCase();
|
|
74371
74418
|
return mime && VIDEO_EXT_BY_MIME[mime] || ".mp4";
|
|
@@ -74391,7 +74438,7 @@ function framesModeReport(canvas, requested) {
|
|
|
74391
74438
|
return { frames_mode: mode, ...refused ? { frames_reuse_refused: refused } : {} };
|
|
74392
74439
|
}
|
|
74393
74440
|
async function materializeReferenceVideo(fileArg2) {
|
|
74394
|
-
if (!/^https?:\/\//i.test(fileArg2)) return
|
|
74441
|
+
if (!/^https?:\/\//i.test(fileArg2)) return path34.resolve(fileArg2);
|
|
74395
74442
|
let bytes;
|
|
74396
74443
|
let contentType;
|
|
74397
74444
|
try {
|
|
@@ -74403,7 +74450,7 @@ async function materializeReferenceVideo(fileArg2) {
|
|
|
74403
74450
|
throw new Error(`failed to download reference video: ${e instanceof Error ? e.message : String(e)}`);
|
|
74404
74451
|
}
|
|
74405
74452
|
if (bytes.length === 0) throw new Error("reference video download was empty");
|
|
74406
|
-
const dest =
|
|
74453
|
+
const dest = path34.join(
|
|
74407
74454
|
tmpdir3(),
|
|
74408
74455
|
`baker-ref-${sha256Hex(bytes).slice(0, 16)}${referenceVideoExt(fileArg2, contentType)}`
|
|
74409
74456
|
);
|
|
@@ -74630,12 +74677,12 @@ var scaffoldVideoCommand = defineCommand136({
|
|
|
74630
74677
|
} catch (e) {
|
|
74631
74678
|
return fail4("download", e instanceof Error ? e.message : String(e));
|
|
74632
74679
|
}
|
|
74633
|
-
const base =
|
|
74634
|
-
const outPath = args8.out ?
|
|
74680
|
+
const base = path34.basename(videoPath, path34.extname(videoPath));
|
|
74681
|
+
const outPath = args8.out ? path34.resolve(String(args8.out)) : slug ? path34.join(process.cwd(), "src", "creatives", slug, `${slug}.canvas.json`) : path34.join(path34.dirname(videoPath), `${base}.video.canvas.json`);
|
|
74635
74682
|
if (slug) await enforceNewCreativeLimit(slug, outPath);
|
|
74636
|
-
const outDir =
|
|
74637
|
-
const blueprintPath2 =
|
|
74638
|
-
const blueprintStylePath =
|
|
74683
|
+
const outDir = path34.dirname(outPath);
|
|
74684
|
+
const blueprintPath2 = path34.join(outDir, "prompt.json");
|
|
74685
|
+
const blueprintStylePath = path34.join(outDir, "prompt.style.json");
|
|
74639
74686
|
const frames = args8.frames === "reuse" ? "reuse" : "generate";
|
|
74640
74687
|
const maxScenes = args8["max-scenes"] ? Number(args8["max-scenes"]) : void 0;
|
|
74641
74688
|
if (Number.isFinite(maxScenes)) {
|
|
@@ -74704,10 +74751,10 @@ var scaffoldVideoCommand = defineCommand136({
|
|
|
74704
74751
|
`
|
|
74705
74752
|
);
|
|
74706
74753
|
}
|
|
74707
|
-
const compositionDest =
|
|
74754
|
+
const compositionDest = path34.join(outDir, "video-overlay-composition");
|
|
74708
74755
|
await cp2(SHIPPED_OVERLAY_COMPOSITION_DIR, compositionDest, { recursive: true });
|
|
74709
74756
|
await stampCompositionDims(compositionDest, outDims);
|
|
74710
|
-
const indexPath =
|
|
74757
|
+
const indexPath = path34.join(compositionDest, "index.html");
|
|
74711
74758
|
const overlayHtml = buildOverlayHtml(blueprint, { captionsActive: Boolean(transcript), videoModel });
|
|
74712
74759
|
const indexHtml = await readFile29(indexPath, "utf8");
|
|
74713
74760
|
const injected = indexHtml.replace("<!--OVERLAYS-->", () => overlayHtml);
|
|
@@ -74723,10 +74770,10 @@ var scaffoldVideoCommand = defineCommand136({
|
|
|
74723
74770
|
const opts = {
|
|
74724
74771
|
imageModel,
|
|
74725
74772
|
videoModel,
|
|
74726
|
-
overlayCompositionPath:
|
|
74727
|
-
captionsCompositionPath: captions.compositionPath ?
|
|
74728
|
-
blueprintPath:
|
|
74729
|
-
blueprintStylePath:
|
|
74773
|
+
overlayCompositionPath: path34.relative(outDir, compositionDest),
|
|
74774
|
+
captionsCompositionPath: captions.compositionPath ? path34.relative(outDir, captions.compositionPath) : void 0,
|
|
74775
|
+
blueprintPath: path34.relative(outDir, blueprintPath2),
|
|
74776
|
+
blueprintStylePath: path34.relative(outDir, blueprintStylePath),
|
|
74730
74777
|
frames,
|
|
74731
74778
|
ambient: Boolean(args8.ambient),
|
|
74732
74779
|
seamDedup: resolveSeamDedup(args8["seam-dedup"]),
|
|
@@ -74754,7 +74801,7 @@ var scaffoldVideoCommand = defineCommand136({
|
|
|
74754
74801
|
await writeFile15(outPath, `${JSON.stringify(canvas, null, 2)}
|
|
74755
74802
|
`, "utf8");
|
|
74756
74803
|
await writeFile15(
|
|
74757
|
-
|
|
74804
|
+
path34.join(outDir, REBUILD_FILE),
|
|
74758
74805
|
`${JSON.stringify({ elements, opts }, null, 2)}
|
|
74759
74806
|
`,
|
|
74760
74807
|
"utf8"
|
|
@@ -74781,7 +74828,7 @@ var scaffoldVideoCommand = defineCommand136({
|
|
|
74781
74828
|
await ensureGitignore(process.cwd(), ["canvas/", ".context/"]);
|
|
74782
74829
|
const sourceRef = videoSourceReference(blueprint, fileArg2);
|
|
74783
74830
|
if (slug) {
|
|
74784
|
-
const definitionPath =
|
|
74831
|
+
const definitionPath = path34.join(outDir, "_definition.md");
|
|
74785
74832
|
if (!await fileExists(definitionPath)) {
|
|
74786
74833
|
await writeFile15(
|
|
74787
74834
|
definitionPath,
|
|
@@ -74837,7 +74884,7 @@ var scaffoldVideoCommand = defineCommand136({
|
|
|
74837
74884
|
graph: canvas.metadata?.video?.graph_stats
|
|
74838
74885
|
},
|
|
74839
74886
|
checklist: {
|
|
74840
|
-
edit_prompt: `The blueprint is split so you edit ONE small file at a time \u2014 never a giant one. Per-scene content (a scene's dialogue, action, frame prompts, overlays) lives in \`scenes/sNN.json\` \u2014 edit the single scene you want to change. Global cast/palette/brand/copy lives in \`${
|
|
74887
|
+
edit_prompt: `The blueprint is split so you edit ONE small file at a time \u2014 never a giant one. Per-scene content (a scene's dialogue, action, frame prompts, overlays) lives in \`scenes/sNN.json\` \u2014 edit the single scene you want to change. Global cast/palette/brand/copy lives in \`${path34.basename(blueprintPath2)}\`. \`baker canvas validate\`/\`run\` re-assemble the blueprint and re-flow every edited scene back into the render (and regenerate ${path34.basename(blueprintStylePath)}, the projection each frame's target_blueprint reads) \u2014 so your scene edits reach the render automatically. Never hand-edit the inlined node prompts in the canvas or the derived ${path34.basename(blueprintStylePath)}; both are regenerated.`,
|
|
74841
74888
|
recurring_elements_to_supply: report.elements,
|
|
74842
74889
|
voices_to_confirm: report.dialogue.map((d) => ({
|
|
74843
74890
|
scene: d.scene,
|
|
@@ -74875,7 +74922,7 @@ var scaffoldVideoCommand = defineCommand136({
|
|
|
74875
74922
|
|
|
74876
74923
|
// src/commands/canvas/set-prompt.ts
|
|
74877
74924
|
import { readFile as readFile30, writeFile as writeFile16 } from "fs/promises";
|
|
74878
|
-
import
|
|
74925
|
+
import path35 from "path";
|
|
74879
74926
|
import { defineCommand as defineCommand137 } from "citty";
|
|
74880
74927
|
function setNodePrompt(canvas, nodeId, text2) {
|
|
74881
74928
|
const nodes = canvas?.nodes;
|
|
@@ -74904,7 +74951,7 @@ var SetPromptError = class extends Error {
|
|
|
74904
74951
|
}
|
|
74905
74952
|
};
|
|
74906
74953
|
async function setPromptInCanvasFile(canvasPath, nodeId, text2) {
|
|
74907
|
-
const filePath =
|
|
74954
|
+
const filePath = path35.resolve(canvasPath);
|
|
74908
74955
|
const original = await readFile30(filePath, "utf8");
|
|
74909
74956
|
let canvas;
|
|
74910
74957
|
try {
|
|
@@ -74972,7 +75019,7 @@ var setPromptCommand = defineCommand137({
|
|
|
74972
75019
|
},
|
|
74973
75020
|
async run({ args: args8 }) {
|
|
74974
75021
|
let text2;
|
|
74975
|
-
if (args8["text-file"]) text2 = await readFile30(
|
|
75022
|
+
if (args8["text-file"]) text2 = await readFile30(path35.resolve(String(args8["text-file"])), "utf8");
|
|
74976
75023
|
else if (args8.text !== void 0) text2 = String(args8.text);
|
|
74977
75024
|
else {
|
|
74978
75025
|
process.stderr.write(
|
|
@@ -75029,7 +75076,7 @@ var staleCommand = defineCommand138({
|
|
|
75029
75076
|
});
|
|
75030
75077
|
|
|
75031
75078
|
// src/commands/canvas/validate.ts
|
|
75032
|
-
import
|
|
75079
|
+
import path36 from "path";
|
|
75033
75080
|
import { defineCommand as defineCommand139 } from "citty";
|
|
75034
75081
|
var validateCommand = defineCommand139({
|
|
75035
75082
|
meta: {
|
|
@@ -75038,7 +75085,7 @@ var validateCommand = defineCommand139({
|
|
|
75038
75085
|
},
|
|
75039
75086
|
args: { file: { type: "positional", required: true, description: "Path to canvas JSON" } },
|
|
75040
75087
|
async run({ args: args8 }) {
|
|
75041
|
-
const filePath =
|
|
75088
|
+
const filePath = path36.resolve(String(args8.file));
|
|
75042
75089
|
let prepared;
|
|
75043
75090
|
try {
|
|
75044
75091
|
prepared = await prepareCanvas(filePath, { log: (line) => process.stderr.write(`${line}
|
|
@@ -75600,7 +75647,7 @@ var feedbackCommand = defineCommand144({
|
|
|
75600
75647
|
|
|
75601
75648
|
// src/commands/creatives/performance.ts
|
|
75602
75649
|
import { readFileSync as readFileSync16 } from "fs";
|
|
75603
|
-
import
|
|
75650
|
+
import path37 from "path";
|
|
75604
75651
|
import { defineCommand as defineCommand145 } from "citty";
|
|
75605
75652
|
import { parse as parseYaml2 } from "yaml";
|
|
75606
75653
|
var DESCRIPTION4 = `How each Baker creative is doing in the live Meta ads that show it: spend, impressions, CTR, CPC, results, cost per result, frequency and a fatigue verdict, next to the angle, hook, mechanism and dominant slot its definition set out to test. Video creatives add hookRate (percent of impressions that watched 3 seconds) and holdRate (percent of those that reached a ThruPlay). Use it before briefing new creatives, to learn which angle and mechanism to make next and which creatives to replace.
|
|
@@ -75653,7 +75700,7 @@ function definitionInsights(markdown) {
|
|
|
75653
75700
|
}
|
|
75654
75701
|
function readLocalDefinition(slug) {
|
|
75655
75702
|
try {
|
|
75656
|
-
return readFileSync16(
|
|
75703
|
+
return readFileSync16(path37.join(process.cwd(), "src", "creatives", slug, "_definition.md"), "utf8");
|
|
75657
75704
|
} catch {
|
|
75658
75705
|
return null;
|
|
75659
75706
|
}
|
|
@@ -76213,11 +76260,11 @@ import { defineCommand as defineCommand149 } from "citty";
|
|
|
76213
76260
|
|
|
76214
76261
|
// src/commands/experiment/composition.ts
|
|
76215
76262
|
import { readdir as readdir14, readFile as readFile34 } from "fs/promises";
|
|
76216
|
-
import
|
|
76263
|
+
import path39 from "path";
|
|
76217
76264
|
|
|
76218
76265
|
// src/commands/landing/import-graph.ts
|
|
76219
76266
|
import { readdir as readdir13, readFile as readFile33, stat as stat6 } from "fs/promises";
|
|
76220
|
-
import
|
|
76267
|
+
import path38 from "path";
|
|
76221
76268
|
var SOURCE_EXT = /\.(astro|ts|tsx|js|jsx|mjs|cjs|vue|svelte)$/;
|
|
76222
76269
|
var RESOLVE_CANDIDATES = [
|
|
76223
76270
|
"",
|
|
@@ -76250,7 +76297,7 @@ async function walkFiles(dir) {
|
|
|
76250
76297
|
}
|
|
76251
76298
|
const out = [];
|
|
76252
76299
|
for (const entry of entries) {
|
|
76253
|
-
const full =
|
|
76300
|
+
const full = path38.join(dir, entry.name);
|
|
76254
76301
|
if (entry.isDirectory()) {
|
|
76255
76302
|
if (entry.name === "node_modules" || entry.name === "dist") continue;
|
|
76256
76303
|
out.push(...await walkFiles(full));
|
|
@@ -76264,8 +76311,8 @@ async function resolveSpecifier(specifier, fromFile, root) {
|
|
|
76264
76311
|
const bare = specifier.split("?")[0] ?? "";
|
|
76265
76312
|
if (bare.includes("*")) return null;
|
|
76266
76313
|
let base;
|
|
76267
|
-
if (bare.startsWith("/")) base =
|
|
76268
|
-
else if (bare.startsWith(".")) base =
|
|
76314
|
+
if (bare.startsWith("/")) base = path38.join(root, bare.slice(1));
|
|
76315
|
+
else if (bare.startsWith(".")) base = path38.resolve(path38.dirname(fromFile), bare);
|
|
76269
76316
|
else return null;
|
|
76270
76317
|
for (const suffix of RESOLVE_CANDIDATES) {
|
|
76271
76318
|
const candidate = base + suffix;
|
|
@@ -76287,7 +76334,7 @@ async function importedFiles(text2, file, root) {
|
|
|
76287
76334
|
}
|
|
76288
76335
|
async function landingGraphFiles(root, slug) {
|
|
76289
76336
|
const seen = /* @__PURE__ */ new Set();
|
|
76290
|
-
const queue = await walkFiles(
|
|
76337
|
+
const queue = await walkFiles(path38.join(root, "src/pages", slug));
|
|
76291
76338
|
while (queue.length > 0) {
|
|
76292
76339
|
const file = queue.pop();
|
|
76293
76340
|
if (file === void 0 || seen.has(file)) continue;
|
|
@@ -76302,7 +76349,7 @@ async function landingGraphFiles(root, slug) {
|
|
|
76302
76349
|
if (!seen.has(target2)) queue.push(target2);
|
|
76303
76350
|
}
|
|
76304
76351
|
}
|
|
76305
|
-
return new Set([...seen].map((abs) =>
|
|
76352
|
+
return new Set([...seen].map((abs) => path38.relative(root, abs).split(path38.sep).join("/")));
|
|
76306
76353
|
}
|
|
76307
76354
|
|
|
76308
76355
|
// src/commands/experiment/composition.ts
|
|
@@ -76347,7 +76394,7 @@ function formsOnlyIn(these, those) {
|
|
|
76347
76394
|
}
|
|
76348
76395
|
async function knownFlows(root) {
|
|
76349
76396
|
try {
|
|
76350
|
-
const entries = await readdir14(
|
|
76397
|
+
const entries = await readdir14(path39.join(root, "src/lib/flow-engine/flows"), { withFileTypes: true });
|
|
76351
76398
|
return new Set(entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name));
|
|
76352
76399
|
} catch {
|
|
76353
76400
|
return /* @__PURE__ */ new Set();
|
|
@@ -76358,7 +76405,7 @@ async function readForms(root, slug) {
|
|
|
76358
76405
|
const [files, flows] = await Promise.all([landingGraphFiles(root, slug), knownFlows(root)]);
|
|
76359
76406
|
if (flows.size === 0) return [];
|
|
76360
76407
|
const texts = await Promise.all(
|
|
76361
|
-
[...files].filter((file) => /\.(astro|ts|tsx|js|mjs)$/.test(file)).map((file) => readFile34(
|
|
76408
|
+
[...files].filter((file) => /\.(astro|ts|tsx|js|mjs)$/.test(file)).map((file) => readFile34(path39.join(root, file), "utf8"))
|
|
76362
76409
|
);
|
|
76363
76410
|
return formsReferenced(texts, flows);
|
|
76364
76411
|
} catch {
|
|
@@ -76369,7 +76416,7 @@ async function readForms(root, slug) {
|
|
|
76369
76416
|
// src/commands/experiment/fold.ts
|
|
76370
76417
|
import { statSync } from "fs";
|
|
76371
76418
|
import { cp as cp3, mkdir as mkdir11, readdir as readdir15, readFile as readFile35, rm as rm9, stat as stat7, writeFile as writeFile17 } from "fs/promises";
|
|
76372
|
-
import
|
|
76419
|
+
import path41 from "path";
|
|
76373
76420
|
|
|
76374
76421
|
// ../api/src/experiments/variants.ts
|
|
76375
76422
|
var VARIANT_SEPARATOR = "--";
|
|
@@ -76394,21 +76441,21 @@ function nextVariantNumber(page, existingSlugs, archived) {
|
|
|
76394
76441
|
}
|
|
76395
76442
|
|
|
76396
76443
|
// src/commands/landing/repoint.ts
|
|
76397
|
-
import
|
|
76444
|
+
import path40 from "path";
|
|
76398
76445
|
var QUOTED_RELATIVE = /(['"])(\.\.?\/[^'"]*)\1/g;
|
|
76399
76446
|
function isInside3(abs, dir) {
|
|
76400
|
-
return abs === dir || abs.startsWith(dir +
|
|
76447
|
+
return abs === dir || abs.startsWith(dir + path40.sep);
|
|
76401
76448
|
}
|
|
76402
76449
|
function toSpecifier(from, to) {
|
|
76403
|
-
const rel =
|
|
76450
|
+
const rel = path40.relative(from, to).split(path40.sep).join("/");
|
|
76404
76451
|
return rel.startsWith(".") ? rel : `./${rel}`;
|
|
76405
76452
|
}
|
|
76406
76453
|
function repointSpecifier(spec, opts) {
|
|
76407
76454
|
if (!spec.startsWith(".")) return spec;
|
|
76408
|
-
const abs =
|
|
76455
|
+
const abs = path40.resolve(opts.fromDir, spec);
|
|
76409
76456
|
if (opts.forkedTargets?.has(abs)) {
|
|
76410
|
-
const withinControl =
|
|
76411
|
-
return toSpecifier(opts.toDir,
|
|
76457
|
+
const withinControl = path40.relative(opts.controlDir, abs);
|
|
76458
|
+
return toSpecifier(opts.toDir, path40.resolve(opts.variantDir, withinControl));
|
|
76412
76459
|
}
|
|
76413
76460
|
if (!isInside3(abs, opts.controlDir)) return spec;
|
|
76414
76461
|
return toSpecifier(opts.toDir, abs);
|
|
@@ -76420,9 +76467,9 @@ function repointFile(text2, opts) {
|
|
|
76420
76467
|
}
|
|
76421
76468
|
function repointMoved(text2, opts) {
|
|
76422
76469
|
return text2.replace(QUOTED_RELATIVE, (_match, quote, spec) => {
|
|
76423
|
-
const abs =
|
|
76424
|
-
const within =
|
|
76425
|
-
const target2 = within.startsWith("..") ||
|
|
76470
|
+
const abs = path40.resolve(opts.fromDir, spec);
|
|
76471
|
+
const within = path40.relative(opts.movedFrom, abs);
|
|
76472
|
+
const target2 = within.startsWith("..") || path40.isAbsolute(within) ? abs : path40.resolve(opts.movedTo, within);
|
|
76426
76473
|
return `${quote}${toSpecifier(opts.toDir, target2)}${quote}`;
|
|
76427
76474
|
});
|
|
76428
76475
|
}
|
|
@@ -76431,7 +76478,7 @@ function repointMoved(text2, opts) {
|
|
|
76431
76478
|
var ARCHIVE_ROOT = "src/_variants";
|
|
76432
76479
|
var QUOTED_RELATIVE2 = /(['"])(\.\.?\/[^'"]*)\1/g;
|
|
76433
76480
|
function posix2(p) {
|
|
76434
|
-
return p.split(
|
|
76481
|
+
return p.split(path41.sep).join("/");
|
|
76435
76482
|
}
|
|
76436
76483
|
async function isDir(p) {
|
|
76437
76484
|
try {
|
|
@@ -76450,39 +76497,39 @@ async function filesUnder(dir, prefix = "") {
|
|
|
76450
76497
|
const out = [];
|
|
76451
76498
|
for (const entry of entries) {
|
|
76452
76499
|
const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
76453
|
-
if (entry.isDirectory()) out.push(...await filesUnder(
|
|
76500
|
+
if (entry.isDirectory()) out.push(...await filesUnder(path41.join(dir, entry.name), rel));
|
|
76454
76501
|
else out.push(rel);
|
|
76455
76502
|
}
|
|
76456
76503
|
return out.sort();
|
|
76457
76504
|
}
|
|
76458
76505
|
var TEXT_EXT = /\.(astro|ts|tsx|js|jsx|mjs|cjs|vue|svelte|md|json|css)$/;
|
|
76459
76506
|
function archiveRelPath(abs, base) {
|
|
76460
|
-
if (!abs.startsWith(base +
|
|
76461
|
-
return posix2(
|
|
76507
|
+
if (!abs.startsWith(base + path41.sep)) return null;
|
|
76508
|
+
return posix2(path41.relative(base, abs));
|
|
76462
76509
|
}
|
|
76463
76510
|
async function archiveArm(opts) {
|
|
76464
76511
|
const { root, armDir, pageDir, archiveDir, armSlug } = opts;
|
|
76465
76512
|
const targets = await archiveContents({ root, armDir, pageDir, armSlug });
|
|
76466
|
-
const archivedBySource = new Map([...targets].map(([rel, abs]) => [abs,
|
|
76513
|
+
const archivedBySource = new Map([...targets].map(([rel, abs]) => [abs, path41.join(archiveDir, rel)]));
|
|
76467
76514
|
const written = [];
|
|
76468
76515
|
for (const [rel, abs] of [...targets].sort()) {
|
|
76469
|
-
const dest =
|
|
76470
|
-
await mkdir11(
|
|
76516
|
+
const dest = path41.join(archiveDir, rel);
|
|
76517
|
+
await mkdir11(path41.dirname(dest), { recursive: true });
|
|
76471
76518
|
if (!TEXT_EXT.test(rel)) {
|
|
76472
76519
|
await cp3(abs, dest);
|
|
76473
76520
|
} else {
|
|
76474
76521
|
const text2 = await readFile35(abs, "utf8");
|
|
76475
76522
|
await writeFile17(dest, repointIntoArchive(text2, abs, dest, archivedBySource), "utf8");
|
|
76476
76523
|
}
|
|
76477
|
-
written.push(posix2(
|
|
76524
|
+
written.push(posix2(path41.relative(root, dest)));
|
|
76478
76525
|
}
|
|
76479
76526
|
return written;
|
|
76480
76527
|
}
|
|
76481
76528
|
async function archiveContents(opts) {
|
|
76482
76529
|
const { root, armDir, pageDir, armSlug } = opts;
|
|
76483
76530
|
const graph = await landingGraphFiles(root, armSlug);
|
|
76484
|
-
const reachable = new Set([...graph].map((rel) =>
|
|
76485
|
-
for (const rel of await filesUnder(armDir)) reachable.add(
|
|
76531
|
+
const reachable = new Set([...graph].map((rel) => path41.resolve(root, rel)));
|
|
76532
|
+
for (const rel of await filesUnder(armDir)) reachable.add(path41.join(armDir, rel));
|
|
76486
76533
|
const sorted = [...reachable].sort();
|
|
76487
76534
|
const targets = /* @__PURE__ */ new Map();
|
|
76488
76535
|
for (const base of [pageDir, armDir]) {
|
|
@@ -76495,14 +76542,14 @@ async function archiveContents(opts) {
|
|
|
76495
76542
|
return targets;
|
|
76496
76543
|
}
|
|
76497
76544
|
function repointIntoArchive(text2, sourceAbs, destAbs, archivedBySource) {
|
|
76498
|
-
const fromDir =
|
|
76499
|
-
const toDir =
|
|
76545
|
+
const fromDir = path41.dirname(sourceAbs);
|
|
76546
|
+
const toDir = path41.dirname(destAbs);
|
|
76500
76547
|
return text2.replace(QUOTED_RELATIVE2, (match, quote, spec, offset) => {
|
|
76501
76548
|
const [specPath, suffix] = splitSuffix(spec);
|
|
76502
|
-
const target2 =
|
|
76549
|
+
const target2 = path41.resolve(fromDir, specPath);
|
|
76503
76550
|
const resolved = resolveInArchive(target2, archivedBySource) ?? resolveOnDisk(target2, isImportPosition(text2, offset));
|
|
76504
76551
|
if (resolved === null) return match;
|
|
76505
|
-
const rel = posix2(
|
|
76552
|
+
const rel = posix2(path41.relative(toDir, resolved));
|
|
76506
76553
|
return `${quote}${rel.startsWith(".") ? rel : `./${rel}`}${suffix}${quote}`;
|
|
76507
76554
|
});
|
|
76508
76555
|
}
|
|
@@ -76536,9 +76583,9 @@ async function promoteVariantFiles(opts) {
|
|
|
76536
76583
|
const written = [];
|
|
76537
76584
|
for (const rel of await filesUnder(variantDir)) {
|
|
76538
76585
|
if (rel === "_definition.md") continue;
|
|
76539
|
-
const from =
|
|
76540
|
-
const to =
|
|
76541
|
-
await mkdir11(
|
|
76586
|
+
const from = path41.join(variantDir, rel);
|
|
76587
|
+
const to = path41.join(pageDir, rel);
|
|
76588
|
+
await mkdir11(path41.dirname(to), { recursive: true });
|
|
76542
76589
|
if (!TEXT_EXT.test(rel)) {
|
|
76543
76590
|
await cp3(from, to);
|
|
76544
76591
|
} else {
|
|
@@ -76546,15 +76593,15 @@ async function promoteVariantFiles(opts) {
|
|
|
76546
76593
|
await writeFile17(
|
|
76547
76594
|
to,
|
|
76548
76595
|
repointMoved(text2, {
|
|
76549
|
-
fromDir:
|
|
76550
|
-
toDir:
|
|
76596
|
+
fromDir: path41.dirname(from),
|
|
76597
|
+
toDir: path41.dirname(to),
|
|
76551
76598
|
movedFrom: variantDir,
|
|
76552
76599
|
movedTo: pageDir
|
|
76553
76600
|
}),
|
|
76554
76601
|
"utf8"
|
|
76555
76602
|
);
|
|
76556
76603
|
}
|
|
76557
|
-
written.push(posix2(
|
|
76604
|
+
written.push(posix2(path41.relative(root, to)));
|
|
76558
76605
|
}
|
|
76559
76606
|
return written;
|
|
76560
76607
|
}
|
|
@@ -76578,8 +76625,8 @@ function archiveRecord(target2, variantNumber) {
|
|
|
76578
76625
|
`;
|
|
76579
76626
|
}
|
|
76580
76627
|
async function foldExperiment(root, target2) {
|
|
76581
|
-
const pageDir =
|
|
76582
|
-
const variantDir =
|
|
76628
|
+
const pageDir = path41.resolve(root, "src/pages", target2.landingSlug);
|
|
76629
|
+
const variantDir = path41.resolve(root, "src/pages", target2.variantSlug);
|
|
76583
76630
|
const variantNumber = variantNumberOf(target2.variantSlug);
|
|
76584
76631
|
if (variantNumber === null) {
|
|
76585
76632
|
return {
|
|
@@ -76593,7 +76640,7 @@ async function foldExperiment(root, target2) {
|
|
|
76593
76640
|
return { error: `src/pages/${target2.variantSlug}/ is already gone \u2014 this test looks folded in already` };
|
|
76594
76641
|
}
|
|
76595
76642
|
const archiveKey = target2.landingInternalId ?? target2.landingSlug;
|
|
76596
|
-
const archiveDir =
|
|
76643
|
+
const archiveDir = path41.resolve(root, ARCHIVE_ROOT, archiveKey, String(variantNumber));
|
|
76597
76644
|
await rm9(archiveDir, { recursive: true, force: true });
|
|
76598
76645
|
await mkdir11(archiveDir, { recursive: true });
|
|
76599
76646
|
const written = await archiveArm({
|
|
@@ -76603,8 +76650,8 @@ async function foldExperiment(root, target2) {
|
|
|
76603
76650
|
archiveDir,
|
|
76604
76651
|
armSlug: target2.survivor === "variant" ? target2.landingSlug : target2.variantSlug
|
|
76605
76652
|
});
|
|
76606
|
-
await writeFile17(
|
|
76607
|
-
written.push(posix2(
|
|
76653
|
+
await writeFile17(path41.join(archiveDir, "_variant.json"), archiveRecord(target2, variantNumber), "utf8");
|
|
76654
|
+
written.push(posix2(path41.join(ARCHIVE_ROOT, archiveKey, String(variantNumber), "_variant.json")));
|
|
76608
76655
|
if (target2.survivor === "variant") {
|
|
76609
76656
|
written.push(...await promoteVariantFiles({ root, pageDir, variantDir }));
|
|
76610
76657
|
}
|
|
@@ -76612,7 +76659,7 @@ async function foldExperiment(root, target2) {
|
|
|
76612
76659
|
return {
|
|
76613
76660
|
experimentId: target2.experimentId,
|
|
76614
76661
|
page: target2.landingSlug,
|
|
76615
|
-
archivedTo: posix2(
|
|
76662
|
+
archivedTo: posix2(path41.join(ARCHIVE_ROOT, archiveKey, String(variantNumber))),
|
|
76616
76663
|
written,
|
|
76617
76664
|
removed: [`src/pages/${target2.variantSlug}`]
|
|
76618
76665
|
};
|
|
@@ -77385,10 +77432,10 @@ function parseEvidence(raw, rawArgs) {
|
|
|
77385
77432
|
|
|
77386
77433
|
// src/commands/experiment/identity.ts
|
|
77387
77434
|
import { readFile as readFile36 } from "fs/promises";
|
|
77388
|
-
import
|
|
77435
|
+
import path42 from "path";
|
|
77389
77436
|
async function readPageInternalId(root, slug) {
|
|
77390
77437
|
try {
|
|
77391
|
-
const text2 = await readFile36(
|
|
77438
|
+
const text2 = await readFile36(path42.resolve(root, "src", "pages", slug, "_definition.md"), "utf8");
|
|
77392
77439
|
return /^internalId:\s*"?([^"\s]+)"?\s*$/m.exec(text2)?.[1];
|
|
77393
77440
|
} catch {
|
|
77394
77441
|
return void 0;
|
|
@@ -77397,7 +77444,7 @@ async function readPageInternalId(root, slug) {
|
|
|
77397
77444
|
|
|
77398
77445
|
// src/commands/experiment/measurement.ts
|
|
77399
77446
|
import { readFile as readFile37 } from "fs/promises";
|
|
77400
|
-
import
|
|
77447
|
+
import path43 from "path";
|
|
77401
77448
|
function eventDeclarationsIn(source) {
|
|
77402
77449
|
const found = [];
|
|
77403
77450
|
const pattern = /\b(data-baker-(?:view|event))\s*=\s*["']([^"']+)["']/g;
|
|
@@ -77457,7 +77504,7 @@ function sectionsOf(files, slug) {
|
|
|
77457
77504
|
return files.filter((file) => file.startsWith(prefix) && !file.slice(prefix.length).startsWith("index."));
|
|
77458
77505
|
}
|
|
77459
77506
|
async function declarationsOf(root, files) {
|
|
77460
|
-
const sources = await Promise.all(files.map((file) => readFile37(
|
|
77507
|
+
const sources = await Promise.all(files.map((file) => readFile37(path43.join(root, file), "utf8").catch(() => "")));
|
|
77461
77508
|
return sources.flatMap(eventDeclarationsIn);
|
|
77462
77509
|
}
|
|
77463
77510
|
|
|
@@ -78509,10 +78556,10 @@ function parseValueExpression(raw) {
|
|
|
78509
78556
|
return parts.map(parsePart);
|
|
78510
78557
|
}
|
|
78511
78558
|
function trackingFieldIds() {
|
|
78512
|
-
const
|
|
78513
|
-
if (!existsSync9(
|
|
78559
|
+
const path58 = join4(flowsDir(), "..", "tracking.ts");
|
|
78560
|
+
if (!existsSync9(path58)) return null;
|
|
78514
78561
|
try {
|
|
78515
|
-
const source = readFileSync17(
|
|
78562
|
+
const source = readFileSync17(path58, "utf-8");
|
|
78516
78563
|
const block2 = source.match(/TRACKING_FIELD_IDS\s*=\s*\[([\s\S]*?)\]\s*as const/)?.[1];
|
|
78517
78564
|
if (!block2) return null;
|
|
78518
78565
|
const ids2 = [...block2.matchAll(/"(tracking\.[a-z0-9_]+)"/g)].map((match) => match[1]);
|
|
@@ -79094,13 +79141,13 @@ function specsFromFile(parsed) {
|
|
|
79094
79141
|
return `${destField}${type}=${entry?.value ?? ""}`;
|
|
79095
79142
|
});
|
|
79096
79143
|
}
|
|
79097
|
-
function readSpecFile(
|
|
79144
|
+
function readSpecFile(path58) {
|
|
79098
79145
|
let raw;
|
|
79099
79146
|
try {
|
|
79100
|
-
raw =
|
|
79147
|
+
raw = path58 === "-" ? readFileSync18(0, "utf-8") : readFileSync18(path58, "utf-8");
|
|
79101
79148
|
} catch (error) {
|
|
79102
79149
|
refuse(
|
|
79103
|
-
`Could not read ${
|
|
79150
|
+
`Could not read ${path58 === "-" ? "the mapping from stdin" : `"${path58}"`}: ${error instanceof Error ? error.message : String(error)}`
|
|
79104
79151
|
);
|
|
79105
79152
|
}
|
|
79106
79153
|
let parsed;
|
|
@@ -79108,7 +79155,7 @@ function readSpecFile(path59) {
|
|
|
79108
79155
|
parsed = JSON.parse(raw);
|
|
79109
79156
|
} catch (error) {
|
|
79110
79157
|
refuse(
|
|
79111
|
-
`${
|
|
79158
|
+
`${path58 === "-" ? "stdin" : `"${path58}"`} is not valid JSON: ${error instanceof Error ? error.message : String(error)}`,
|
|
79112
79159
|
'Expected { "map": { "<destField>": "<value>", \u2026 } }'
|
|
79113
79160
|
);
|
|
79114
79161
|
}
|
|
@@ -79407,21 +79454,21 @@ var ARRAY_FIELDS = [
|
|
|
79407
79454
|
"tagIds"
|
|
79408
79455
|
];
|
|
79409
79456
|
var ARRAY_OWNERS = ["", "body"];
|
|
79410
|
-
function dropUnsetOptionals(sideEffect,
|
|
79457
|
+
function dropUnsetOptionals(sideEffect, path58) {
|
|
79411
79458
|
return OPTIONAL_STRINGS.flatMap((key) => {
|
|
79412
79459
|
if (!(key in sideEffect) || sideEffect[key] !== null && sideEffect[key] !== "") return [];
|
|
79413
79460
|
delete sideEffect[key];
|
|
79414
|
-
return [{ path:
|
|
79461
|
+
return [{ path: path58, change: `dropped \`${key}\` (an optional string is absent, never null)` }];
|
|
79415
79462
|
});
|
|
79416
79463
|
}
|
|
79417
|
-
function fillNulledArrays(target2, prefix,
|
|
79464
|
+
function fillNulledArrays(target2, prefix, path58) {
|
|
79418
79465
|
return ARRAY_FIELDS.flatMap((key) => {
|
|
79419
79466
|
if (!(key in target2) || target2[key] !== null) return [];
|
|
79420
79467
|
target2[key] = [];
|
|
79421
|
-
return [{ path:
|
|
79468
|
+
return [{ path: path58, change: `\`${prefix}${key}: null\` \u2192 \`[]\`` }];
|
|
79422
79469
|
});
|
|
79423
79470
|
}
|
|
79424
|
-
function tidyEmailRecipients(sideEffect,
|
|
79471
|
+
function tidyEmailRecipients(sideEffect, path58) {
|
|
79425
79472
|
if (sideEffect.type !== "email") return [];
|
|
79426
79473
|
const config = sideEffect.encryptedConfig;
|
|
79427
79474
|
if (!config || typeof config !== "object" || Array.isArray(config)) return [];
|
|
@@ -79432,7 +79479,7 @@ function tidyEmailRecipients(sideEffect, path59) {
|
|
|
79432
79479
|
const tidied = to.join(", ");
|
|
79433
79480
|
if (tidied === raw) return [];
|
|
79434
79481
|
config.email = tidied;
|
|
79435
|
-
return [{ path:
|
|
79482
|
+
return [{ path: path58, change: "tidied the recipient list's spacing and separators" }];
|
|
79436
79483
|
}
|
|
79437
79484
|
function sideEffectsOf(node) {
|
|
79438
79485
|
if (!Array.isArray(node.sideEffects)) return [];
|
|
@@ -79441,13 +79488,13 @@ function sideEffectsOf(node) {
|
|
|
79441
79488
|
);
|
|
79442
79489
|
}
|
|
79443
79490
|
function normalizeSideEffect(sideEffect, where) {
|
|
79444
|
-
const
|
|
79491
|
+
const path58 = `${where} \u2192 ${String(sideEffect.id ?? "side effect")}`;
|
|
79445
79492
|
const arrays = ARRAY_OWNERS.flatMap((owner) => {
|
|
79446
79493
|
const target2 = owner ? sideEffect[owner] : sideEffect;
|
|
79447
79494
|
if (!target2 || typeof target2 !== "object") return [];
|
|
79448
|
-
return fillNulledArrays(target2, owner ? `${owner}.` : "",
|
|
79495
|
+
return fillNulledArrays(target2, owner ? `${owner}.` : "", path58);
|
|
79449
79496
|
});
|
|
79450
|
-
return [...dropUnsetOptionals(sideEffect,
|
|
79497
|
+
return [...dropUnsetOptionals(sideEffect, path58), ...arrays, ...tidyEmailRecipients(sideEffect, path58)];
|
|
79451
79498
|
}
|
|
79452
79499
|
function normalizeFlowTree(tree) {
|
|
79453
79500
|
const changes = [];
|
|
@@ -80839,10 +80886,10 @@ async function stageOps(ops) {
|
|
|
80839
80886
|
handleError5(err);
|
|
80840
80887
|
}
|
|
80841
80888
|
}
|
|
80842
|
-
async function draftAction2(
|
|
80889
|
+
async function draftAction2(path58, body, chat) {
|
|
80843
80890
|
const chatId = resolveChatId(chat);
|
|
80844
80891
|
try {
|
|
80845
|
-
const { data, hints: hints2 } = splitHints(await apiPost(
|
|
80892
|
+
const { data, hints: hints2 } = splitHints(await apiPost(path58, { chatId, ...body }));
|
|
80846
80893
|
writeJsonEnvelope({ ok: true, data, ...hints2.length > 0 ? { hints: hints2 } : {} });
|
|
80847
80894
|
return data;
|
|
80848
80895
|
} catch (err) {
|
|
@@ -83372,9 +83419,9 @@ async function readImageBuffer(pathOrUrl) {
|
|
|
83372
83419
|
}
|
|
83373
83420
|
return readFile38(pathOrUrl);
|
|
83374
83421
|
}
|
|
83375
|
-
async function isDirectory(
|
|
83422
|
+
async function isDirectory(path58) {
|
|
83376
83423
|
try {
|
|
83377
|
-
const s = await stat8(
|
|
83424
|
+
const s = await stat8(path58);
|
|
83378
83425
|
return s.isDirectory();
|
|
83379
83426
|
} catch {
|
|
83380
83427
|
return false;
|
|
@@ -83802,13 +83849,13 @@ function resolveDownloadPath({ baseName, extension, out, outIsDirectory: outIsDi
|
|
|
83802
83849
|
}
|
|
83803
83850
|
function disambiguate(paths) {
|
|
83804
83851
|
const taken = /* @__PURE__ */ new Set();
|
|
83805
|
-
return paths.map((
|
|
83806
|
-
if (!taken.has(
|
|
83807
|
-
taken.add(
|
|
83808
|
-
return
|
|
83852
|
+
return paths.map((path58) => {
|
|
83853
|
+
if (!taken.has(path58)) {
|
|
83854
|
+
taken.add(path58);
|
|
83855
|
+
return path58;
|
|
83809
83856
|
}
|
|
83810
|
-
const ext = extname4(
|
|
83811
|
-
const stem =
|
|
83857
|
+
const ext = extname4(path58);
|
|
83858
|
+
const stem = path58.slice(0, path58.length - ext.length);
|
|
83812
83859
|
let n = 2;
|
|
83813
83860
|
while (taken.has(`${stem}-${n}${ext}`)) n += 1;
|
|
83814
83861
|
const unique = `${stem}-${n}${ext}`;
|
|
@@ -83934,10 +83981,10 @@ async function runDownloads(plan) {
|
|
|
83934
83981
|
const paths = disambiguate(fetched.map((item) => item.path));
|
|
83935
83982
|
const downloaded = [];
|
|
83936
83983
|
for (const [index, item] of fetched.entries()) {
|
|
83937
|
-
const
|
|
83984
|
+
const path58 = paths[index] ?? item.path;
|
|
83938
83985
|
try {
|
|
83939
|
-
await atomicWrite(
|
|
83940
|
-
downloaded.push({ input: item.input, output:
|
|
83986
|
+
await atomicWrite(path58, item.buffer);
|
|
83987
|
+
downloaded.push({ input: item.input, output: path58, bytes: item.buffer.length, contentType: item.contentType });
|
|
83941
83988
|
} catch (err) {
|
|
83942
83989
|
failed.push({ input: item.input, error: failureMessage(err, "Write failed") });
|
|
83943
83990
|
}
|
|
@@ -86920,7 +86967,7 @@ import { defineCommand as defineCommand207 } from "citty";
|
|
|
86920
86967
|
|
|
86921
86968
|
// src/commands/landing/critique.ts
|
|
86922
86969
|
import { readdir as readdir17, readFile as readFile40, stat as stat10 } from "fs/promises";
|
|
86923
|
-
import
|
|
86970
|
+
import path46 from "path";
|
|
86924
86971
|
import { defineCommand as defineCommand196 } from "citty";
|
|
86925
86972
|
|
|
86926
86973
|
// src/engine/landing/lib/constants.ts
|
|
@@ -88112,13 +88159,13 @@ function describeCounts(findings) {
|
|
|
88112
88159
|
|
|
88113
88160
|
// src/commands/landing/snapshot.ts
|
|
88114
88161
|
import { mkdir as mkdir12, rename as rename2, writeFile as writeFile19 } from "fs/promises";
|
|
88115
|
-
import
|
|
88162
|
+
import path44 from "path";
|
|
88116
88163
|
var CRITIC_VERSION = "4";
|
|
88117
88164
|
function critiqueCacheDir(projectRoot) {
|
|
88118
|
-
return
|
|
88165
|
+
return path44.join(projectRoot, ".cache", "landing-critique");
|
|
88119
88166
|
}
|
|
88120
88167
|
function snapshotPath(projectRoot, slug) {
|
|
88121
|
-
return
|
|
88168
|
+
return path44.join(critiqueCacheDir(projectRoot), `${slug}.json`);
|
|
88122
88169
|
}
|
|
88123
88170
|
async function writeCritiqueSnapshot(projectRoot, snapshot) {
|
|
88124
88171
|
await mkdir12(critiqueCacheDir(projectRoot), { recursive: true });
|
|
@@ -88131,7 +88178,7 @@ async function writeCritiqueSnapshot(projectRoot, snapshot) {
|
|
|
88131
88178
|
|
|
88132
88179
|
// src/commands/landing/source-version.ts
|
|
88133
88180
|
import { readdir as readdir16, readFile as readFile39, stat as stat9 } from "fs/promises";
|
|
88134
|
-
import
|
|
88181
|
+
import path45 from "path";
|
|
88135
88182
|
var CRITIQUED_ROOTS = ["src/pages/", "src/components/"];
|
|
88136
88183
|
async function landingSourceRelPaths(root, slug) {
|
|
88137
88184
|
const files = await landingGraphFiles(root, slug);
|
|
@@ -88140,7 +88187,7 @@ async function landingSourceRelPaths(root, slug) {
|
|
|
88140
88187
|
async function readLandingSources(root, slug) {
|
|
88141
88188
|
const rel = await landingSourceRelPaths(root, slug);
|
|
88142
88189
|
const out = [];
|
|
88143
|
-
for (const r of rel) out.push({ path: r, text: await readFile39(
|
|
88190
|
+
for (const r of rel) out.push({ path: r, text: await readFile39(path45.join(root, r), "utf8") });
|
|
88144
88191
|
return out;
|
|
88145
88192
|
}
|
|
88146
88193
|
async function computeLandingSourceSha(root, slug) {
|
|
@@ -88149,7 +88196,7 @@ async function computeLandingSourceSha(root, slug) {
|
|
|
88149
88196
|
for (const r of rel) {
|
|
88150
88197
|
let bytes;
|
|
88151
88198
|
try {
|
|
88152
|
-
bytes = await readFile39(
|
|
88199
|
+
bytes = await readFile39(path45.join(root, r));
|
|
88153
88200
|
} catch {
|
|
88154
88201
|
bytes = Buffer.alloc(0);
|
|
88155
88202
|
}
|
|
@@ -88159,16 +88206,16 @@ async function computeLandingSourceSha(root, slug) {
|
|
|
88159
88206
|
}
|
|
88160
88207
|
async function computeLegacyLandingSourceSha(landingDir) {
|
|
88161
88208
|
const rel = [];
|
|
88162
|
-
if (await isFile2(
|
|
88163
|
-
for (const abs of await walkAstro(
|
|
88164
|
-
rel.push(
|
|
88209
|
+
if (await isFile2(path45.join(landingDir, "index.astro"))) rel.push("index.astro");
|
|
88210
|
+
for (const abs of await walkAstro(path45.join(landingDir, "_components"))) {
|
|
88211
|
+
rel.push(path45.relative(landingDir, abs).split(path45.sep).join("/"));
|
|
88165
88212
|
}
|
|
88166
88213
|
rel.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
88167
88214
|
const parts = [];
|
|
88168
88215
|
for (const r of rel) {
|
|
88169
88216
|
let bytes;
|
|
88170
88217
|
try {
|
|
88171
|
-
bytes = await readFile39(
|
|
88218
|
+
bytes = await readFile39(path45.join(landingDir, r));
|
|
88172
88219
|
} catch {
|
|
88173
88220
|
bytes = Buffer.alloc(0);
|
|
88174
88221
|
}
|
|
@@ -88192,7 +88239,7 @@ async function walkAstro(dir) {
|
|
|
88192
88239
|
}
|
|
88193
88240
|
const out = [];
|
|
88194
88241
|
for (const entry of entries) {
|
|
88195
|
-
const abs =
|
|
88242
|
+
const abs = path45.join(dir, entry.name);
|
|
88196
88243
|
if (entry.isDirectory()) out.push(...await walkAstro(abs));
|
|
88197
88244
|
else if (entry.isFile() && entry.name.endsWith(".astro")) out.push(abs);
|
|
88198
88245
|
}
|
|
@@ -88253,7 +88300,7 @@ var critiqueCommand2 = defineCommand196({
|
|
|
88253
88300
|
{ availableSlugs: await listLandingSlugs(projectRoot) }
|
|
88254
88301
|
);
|
|
88255
88302
|
}
|
|
88256
|
-
if (!await isDir2(
|
|
88303
|
+
if (!await isDir2(path46.resolve(projectRoot, "src", "pages", slug))) {
|
|
88257
88304
|
fail8("NOT_FOUND", `No landing at src/pages/${slug}/`, {
|
|
88258
88305
|
availableSlugs: await listLandingSlugs(projectRoot)
|
|
88259
88306
|
});
|
|
@@ -88296,7 +88343,7 @@ async function critiqueOne(projectRoot, slug, brand, competitors) {
|
|
|
88296
88343
|
const [sources, compositionSha, sourceSha] = await Promise.all([
|
|
88297
88344
|
readLandingSources(projectRoot, slug),
|
|
88298
88345
|
computeLandingSourceSha(projectRoot, slug),
|
|
88299
|
-
computeLegacyLandingSourceSha(
|
|
88346
|
+
computeLegacyLandingSourceSha(path46.resolve(projectRoot, "src", "pages", slug))
|
|
88300
88347
|
]);
|
|
88301
88348
|
const report = critiqueLanding({ slug, sources, brand, competitors });
|
|
88302
88349
|
let snapshotFailed = false;
|
|
@@ -88316,7 +88363,7 @@ async function critiqueOne(projectRoot, slug, brand, competitors) {
|
|
|
88316
88363
|
return { slug, report, snapshotFailed };
|
|
88317
88364
|
}
|
|
88318
88365
|
async function readCompetitorNames(projectRoot) {
|
|
88319
|
-
const dir =
|
|
88366
|
+
const dir = path46.join(projectRoot, "src", "content", "competitors");
|
|
88320
88367
|
let entries;
|
|
88321
88368
|
try {
|
|
88322
88369
|
entries = (await readdir17(dir)).filter((f) => f.endsWith(".md"));
|
|
@@ -88325,9 +88372,9 @@ async function readCompetitorNames(projectRoot) {
|
|
|
88325
88372
|
}
|
|
88326
88373
|
const names = [];
|
|
88327
88374
|
for (const entry of entries) {
|
|
88328
|
-
names.push(
|
|
88375
|
+
names.push(path46.basename(entry, ".md").replace(/[-_]+/g, " "));
|
|
88329
88376
|
try {
|
|
88330
|
-
const head = (await readFile40(
|
|
88377
|
+
const head = (await readFile40(path46.join(dir, entry), "utf8")).slice(0, 2e3);
|
|
88331
88378
|
const titled = /^\s*(?:title|name)\s*:\s*["']?([^"'\n]+)["']?\s*$/im.exec(head);
|
|
88332
88379
|
if (titled?.[1]) names.push(titled[1].trim());
|
|
88333
88380
|
} catch {
|
|
@@ -88337,7 +88384,7 @@ async function readCompetitorNames(projectRoot) {
|
|
|
88337
88384
|
}
|
|
88338
88385
|
async function listLandingSlugs(projectRoot) {
|
|
88339
88386
|
try {
|
|
88340
|
-
const entries = await readdir17(
|
|
88387
|
+
const entries = await readdir17(path46.join(projectRoot, "src", "pages"), { withFileTypes: true });
|
|
88341
88388
|
return entries.filter((e) => e.isDirectory() && !e.name.startsWith("_") && !e.name.startsWith(".")).map((e) => e.name).sort();
|
|
88342
88389
|
} catch {
|
|
88343
88390
|
return [];
|
|
@@ -88489,7 +88536,7 @@ var addCommand = defineCommand197({
|
|
|
88489
88536
|
|
|
88490
88537
|
// src/commands/landing/inspiration/code.ts
|
|
88491
88538
|
import { mkdir as mkdir13, writeFile as writeFile20 } from "fs/promises";
|
|
88492
|
-
import
|
|
88539
|
+
import path47 from "path";
|
|
88493
88540
|
import { defineCommand as defineCommand198 } from "citty";
|
|
88494
88541
|
registerSchema({
|
|
88495
88542
|
command: "landing.inspiration.code",
|
|
@@ -88512,9 +88559,9 @@ var codeCommand = defineCommand198({
|
|
|
88512
88559
|
try {
|
|
88513
88560
|
const id = args8.id;
|
|
88514
88561
|
const data = await apiGet("/api/landing-inspiration/section-code", { id });
|
|
88515
|
-
const dir =
|
|
88562
|
+
const dir = path47.join(process.cwd(), ".baker", "inspiration", id);
|
|
88516
88563
|
await mkdir13(dir, { recursive: true });
|
|
88517
|
-
const file =
|
|
88564
|
+
const file = path47.join(dir, "section.html");
|
|
88518
88565
|
await writeFile20(file, data.html);
|
|
88519
88566
|
const hints2 = [INSPIRATION_HINTS.structureNotCopy, INSPIRATION_HINTS.adapt];
|
|
88520
88567
|
const fidelity = fidelityHint(data.fidelity);
|
|
@@ -88524,7 +88571,7 @@ var codeCommand = defineCommand198({
|
|
|
88524
88571
|
ok: true,
|
|
88525
88572
|
data: {
|
|
88526
88573
|
id,
|
|
88527
|
-
file:
|
|
88574
|
+
file: path47.relative(process.cwd(), file),
|
|
88528
88575
|
bytes: data.html.length,
|
|
88529
88576
|
fidelity: data.fidelity,
|
|
88530
88577
|
reproduction_notes: data.reproductionNotes,
|
|
@@ -88956,7 +89003,7 @@ function classifyCaptureFailure(error) {
|
|
|
88956
89003
|
|
|
88957
89004
|
// src/engine/landing-library/run.ts
|
|
88958
89005
|
import { mkdir as mkdir14, writeFile as writeFile22 } from "fs/promises";
|
|
88959
|
-
import
|
|
89006
|
+
import path49 from "path";
|
|
88960
89007
|
|
|
88961
89008
|
// ../proxy/src/preflight.ts
|
|
88962
89009
|
import http from "http";
|
|
@@ -90372,9 +90419,9 @@ async function renderBundleToPng(browser, html, viewportWidth, options = {}) {
|
|
|
90372
90419
|
|
|
90373
90420
|
// src/engine/landing-library/report.ts
|
|
90374
90421
|
import { writeFile as writeFile21 } from "fs/promises";
|
|
90375
|
-
import
|
|
90422
|
+
import path48 from "path";
|
|
90376
90423
|
async function writeCaptureReport(manifest, outDir) {
|
|
90377
|
-
const file =
|
|
90424
|
+
const file = path48.join(outDir, "report.html");
|
|
90378
90425
|
await writeFile21(file, renderReport(manifest));
|
|
90379
90426
|
return file;
|
|
90380
90427
|
}
|
|
@@ -90553,32 +90600,32 @@ async function reproducePage(args8) {
|
|
|
90553
90600
|
const { browser, page, outDir, pageUrl, livePageShot } = args8;
|
|
90554
90601
|
const built = await buildSectionBundle(page, "body", pageUrl).catch(() => null);
|
|
90555
90602
|
if (!built) return { bundle: null, fidelity: null };
|
|
90556
|
-
await writeFile22(
|
|
90603
|
+
await writeFile22(path49.join(outDir, "page.html"), built.html);
|
|
90557
90604
|
const rendered = await renderBundleToPng(browser, built.html, DESKTOP_VIEWPORT.width, {
|
|
90558
90605
|
wholePage: true,
|
|
90559
90606
|
timeoutMs: 6e4
|
|
90560
90607
|
});
|
|
90561
90608
|
if (!rendered || !livePageShot) return { bundle: "page.html", fidelity: null };
|
|
90562
|
-
await writeFile22(
|
|
90609
|
+
await writeFile22(path49.join(outDir, "page-rendered.png"), rendered);
|
|
90563
90610
|
const { score, note } = await scoreFidelity(livePageShot, rendered);
|
|
90564
90611
|
return { bundle: "page.html", fidelity: score, ...note ? { fidelityNote: note } : {} };
|
|
90565
90612
|
}
|
|
90566
90613
|
async function captureOneSection(args8) {
|
|
90567
90614
|
const { browser, page, candidate, sectionsDir, outDir, pageUrl, withCode } = args8;
|
|
90568
|
-
const dir =
|
|
90615
|
+
const dir = path49.join(sectionsDir, String(candidate.index).padStart(2, "0"));
|
|
90569
90616
|
await mkdir14(dir, { recursive: true });
|
|
90570
90617
|
const desktop = await captureSection(page, candidate);
|
|
90571
|
-
if (desktop) await writeFile22(
|
|
90618
|
+
if (desktop) await writeFile22(path49.join(dir, "desktop.png"), desktop);
|
|
90572
90619
|
const visualHash = desktop ? await perceptualHash(desktop) : null;
|
|
90573
90620
|
const motion = await collectMotion(page, candidate.selector);
|
|
90574
90621
|
const built = withCode ? await buildSectionBundle(page, candidate.selector, pageUrl) : null;
|
|
90575
90622
|
let fidelity = null;
|
|
90576
90623
|
let fidelityNote;
|
|
90577
90624
|
if (built) {
|
|
90578
|
-
await writeFile22(
|
|
90625
|
+
await writeFile22(path49.join(dir, "section.html"), built.html);
|
|
90579
90626
|
const rendered = await renderBundleToPng(browser, built.html, DESKTOP_VIEWPORT.width);
|
|
90580
90627
|
if (rendered && desktop) {
|
|
90581
|
-
await writeFile22(
|
|
90628
|
+
await writeFile22(path49.join(dir, "section-rendered.png"), rendered);
|
|
90582
90629
|
const result = await scoreFidelity(desktop, rendered);
|
|
90583
90630
|
fidelity = result.score;
|
|
90584
90631
|
fidelityNote = result.note;
|
|
@@ -90586,9 +90633,9 @@ async function captureOneSection(args8) {
|
|
|
90586
90633
|
}
|
|
90587
90634
|
return {
|
|
90588
90635
|
...candidate,
|
|
90589
|
-
desktopShot: desktop ?
|
|
90636
|
+
desktopShot: desktop ? path49.relative(outDir, path49.join(dir, "desktop.png")) : null,
|
|
90590
90637
|
mobileShot: null,
|
|
90591
|
-
bundle: built ?
|
|
90638
|
+
bundle: built ? path49.relative(outDir, path49.join(dir, "section.html")) : null,
|
|
90592
90639
|
fidelity,
|
|
90593
90640
|
...fidelityNote ? { fidelityNote } : {},
|
|
90594
90641
|
...built ? { cssStats: built.stats } : {},
|
|
@@ -90607,9 +90654,9 @@ async function captureMobileShots(args8) {
|
|
|
90607
90654
|
for (const section of sections) {
|
|
90608
90655
|
const shot = await captureSectionOnMobile(mobile.page, section);
|
|
90609
90656
|
if (!shot) continue;
|
|
90610
|
-
const file =
|
|
90657
|
+
const file = path49.join(sectionsDir, String(section.index).padStart(2, "0"), "mobile.png");
|
|
90611
90658
|
await writeFile22(file, shot);
|
|
90612
|
-
section.mobileShot =
|
|
90659
|
+
section.mobileShot = path49.relative(outDir, file);
|
|
90613
90660
|
}
|
|
90614
90661
|
} finally {
|
|
90615
90662
|
await mobile.context.close();
|
|
@@ -90624,10 +90671,10 @@ async function captureMotionTakes(args8) {
|
|
|
90624
90671
|
const filmOne = async (section) => {
|
|
90625
90672
|
const take = await captureMotionTake(browser, pageUrl, section.selector).catch(() => null);
|
|
90626
90673
|
if (!take) return;
|
|
90627
|
-
const dir =
|
|
90628
|
-
const file =
|
|
90674
|
+
const dir = path49.join(sectionsDir, String(section.index).padStart(2, "0"));
|
|
90675
|
+
const file = path49.join(dir, "motion-filmstrip.png");
|
|
90629
90676
|
await writeFile22(file, take.filmstrip);
|
|
90630
|
-
section.motionFilmstrip =
|
|
90677
|
+
section.motionFilmstrip = path49.relative(outDir, file);
|
|
90631
90678
|
log(` [${section.index}] ${section.motion.summary}`);
|
|
90632
90679
|
};
|
|
90633
90680
|
const queue = [...moving];
|
|
@@ -90684,7 +90731,7 @@ async function captureAlternateViews(args8) {
|
|
|
90684
90731
|
async function reproduceWholePage(args8) {
|
|
90685
90732
|
const { browser, page, outDir, pageUrl, withCode, log } = args8;
|
|
90686
90733
|
const fullPage = await page.screenshot({ type: "png", fullPage: true }).catch(() => null);
|
|
90687
|
-
if (fullPage) await writeFile22(
|
|
90734
|
+
if (fullPage) await writeFile22(path49.join(outDir, "full-page.png"), fullPage);
|
|
90688
90735
|
if (!withCode) return { bundle: null, fidelity: null };
|
|
90689
90736
|
const reproduction = await reproducePage({ browser, page, outDir, pageUrl, livePageShot: fullPage });
|
|
90690
90737
|
log(`page reproduction: ${reproduction.fidelity === null ? "unavailable" : reproduction.fidelity.toFixed(2)}`);
|
|
@@ -90755,7 +90802,7 @@ async function openViaLadder(args8) {
|
|
|
90755
90802
|
async function scrapeLanding(options) {
|
|
90756
90803
|
const timeoutMs = options.timeoutMs ?? 45e3;
|
|
90757
90804
|
const log = options.onProgress ?? (() => void 0);
|
|
90758
|
-
const sectionsDir =
|
|
90805
|
+
const sectionsDir = path49.join(options.outDir, "sections");
|
|
90759
90806
|
const nonPublic = refuseNonPublicUrl(options.url);
|
|
90760
90807
|
if (nonPublic) {
|
|
90761
90808
|
throw new BlockedPageError({
|
|
@@ -90817,7 +90864,7 @@ async function scrapeLanding(options) {
|
|
|
90817
90864
|
security: prepared.security,
|
|
90818
90865
|
captureTier: tier
|
|
90819
90866
|
};
|
|
90820
|
-
await writeFile22(
|
|
90867
|
+
await writeFile22(path49.join(options.outDir, "manifest.json"), `${JSON.stringify(manifest, null, 2)}
|
|
90821
90868
|
`);
|
|
90822
90869
|
if (options.report !== false) {
|
|
90823
90870
|
const reportPath = await writeCaptureReport(manifest, options.outDir);
|
|
@@ -90832,28 +90879,28 @@ async function scrapeLanding(options) {
|
|
|
90832
90879
|
|
|
90833
90880
|
// src/commands/landing/inspiration/captureOut.ts
|
|
90834
90881
|
import { existsSync as existsSync12 } from "fs";
|
|
90835
|
-
import
|
|
90882
|
+
import path50 from "path";
|
|
90836
90883
|
var SCRATCH_DIR = ".baker";
|
|
90837
90884
|
function isWithin(parent, target2) {
|
|
90838
|
-
const relative =
|
|
90839
|
-
return relative === "" || !relative.startsWith("..") && !
|
|
90885
|
+
const relative = path50.relative(parent, target2);
|
|
90886
|
+
return relative === "" || !relative.startsWith("..") && !path50.isAbsolute(relative);
|
|
90840
90887
|
}
|
|
90841
90888
|
function findRepoRoot(from) {
|
|
90842
|
-
let dir =
|
|
90889
|
+
let dir = path50.resolve(from);
|
|
90843
90890
|
for (; ; ) {
|
|
90844
|
-
if (existsSync12(
|
|
90845
|
-
const parent =
|
|
90891
|
+
if (existsSync12(path50.join(dir, ".git"))) return dir;
|
|
90892
|
+
const parent = path50.dirname(dir);
|
|
90846
90893
|
if (parent === dir) return null;
|
|
90847
90894
|
dir = parent;
|
|
90848
90895
|
}
|
|
90849
90896
|
}
|
|
90850
90897
|
function checkCaptureOut(out, options) {
|
|
90851
90898
|
const { cwd, repoRoot } = options;
|
|
90852
|
-
const resolved =
|
|
90899
|
+
const resolved = path50.resolve(cwd, out);
|
|
90853
90900
|
if (repoRoot === null || !isWithin(repoRoot, resolved)) return { ok: true };
|
|
90854
|
-
const scratch =
|
|
90901
|
+
const scratch = path50.join(repoRoot, SCRATCH_DIR);
|
|
90855
90902
|
if (isWithin(scratch, resolved)) return { ok: true };
|
|
90856
|
-
const suggestion =
|
|
90903
|
+
const suggestion = path50.posix.join(SCRATCH_DIR, "teardowns", path50.basename(resolved) || "capture");
|
|
90857
90904
|
return {
|
|
90858
90905
|
ok: false,
|
|
90859
90906
|
error: {
|
|
@@ -91027,12 +91074,12 @@ var scrapeCommand = defineCommand201({
|
|
|
91027
91074
|
});
|
|
91028
91075
|
|
|
91029
91076
|
// src/commands/landing/inspiration/search.ts
|
|
91030
|
-
import
|
|
91077
|
+
import path52 from "path";
|
|
91031
91078
|
import { defineCommand as defineCommand202 } from "citty";
|
|
91032
91079
|
|
|
91033
91080
|
// src/commands/landing/inspiration/shot.ts
|
|
91034
91081
|
import { mkdir as mkdir15, writeFile as writeFile23 } from "fs/promises";
|
|
91035
|
-
import
|
|
91082
|
+
import path51 from "path";
|
|
91036
91083
|
import sharp8 from "sharp";
|
|
91037
91084
|
var READABLE_SHOT = {
|
|
91038
91085
|
maxWidth: 1440,
|
|
@@ -91058,9 +91105,9 @@ async function downloadReadableShot(url, file) {
|
|
|
91058
91105
|
const response = await fetch(url);
|
|
91059
91106
|
if (!response.ok) return null;
|
|
91060
91107
|
const shot = await toReadableShot(Buffer.from(await response.arrayBuffer()));
|
|
91061
|
-
await mkdir15(
|
|
91108
|
+
await mkdir15(path51.dirname(file), { recursive: true });
|
|
91062
91109
|
await writeFile23(file, shot);
|
|
91063
|
-
return
|
|
91110
|
+
return path51.relative(process.cwd(), file);
|
|
91064
91111
|
} catch {
|
|
91065
91112
|
return null;
|
|
91066
91113
|
}
|
|
@@ -91152,13 +91199,13 @@ function buildSearchBody(args8) {
|
|
|
91152
91199
|
return body;
|
|
91153
91200
|
}
|
|
91154
91201
|
async function downloadShots(results) {
|
|
91155
|
-
const dir =
|
|
91202
|
+
const dir = path52.join(process.cwd(), ".baker", "inspiration");
|
|
91156
91203
|
const saved = /* @__PURE__ */ new Map();
|
|
91157
91204
|
await Promise.all(
|
|
91158
91205
|
results.map(async (result) => {
|
|
91159
91206
|
const file = await downloadReadableShot(
|
|
91160
91207
|
result.desktopShotUrl,
|
|
91161
|
-
|
|
91208
|
+
path52.join(dir, `${result.id}.${READABLE_SHOT.extension}`)
|
|
91162
91209
|
);
|
|
91163
91210
|
if (file) saved.set(result.id, file);
|
|
91164
91211
|
})
|
|
@@ -91386,7 +91433,7 @@ var sequencesCommand = defineCommand203({
|
|
|
91386
91433
|
});
|
|
91387
91434
|
|
|
91388
91435
|
// src/commands/landing/inspiration/view.ts
|
|
91389
|
-
import
|
|
91436
|
+
import path53 from "path";
|
|
91390
91437
|
import { defineCommand as defineCommand204 } from "citty";
|
|
91391
91438
|
registerSchema({
|
|
91392
91439
|
command: "landing.inspiration.view",
|
|
@@ -91419,12 +91466,12 @@ var viewCommand2 = defineCommand204({
|
|
|
91419
91466
|
const id = args8.id;
|
|
91420
91467
|
const data = await apiGet("/api/landing-inspiration/section", { id });
|
|
91421
91468
|
const section = data.section;
|
|
91422
|
-
const dir =
|
|
91469
|
+
const dir = path53.join(process.cwd(), ".baker", "inspiration", id);
|
|
91423
91470
|
const ext = READABLE_SHOT.extension;
|
|
91424
91471
|
const [desktop, mobile, filmstrip] = await Promise.all([
|
|
91425
|
-
downloadReadableShot(section.desktopShotUrl,
|
|
91426
|
-
downloadReadableShot(section.mobileShotUrl,
|
|
91427
|
-
downloadReadableShot(section.motionFilmstripUrl,
|
|
91472
|
+
downloadReadableShot(section.desktopShotUrl, path53.join(dir, `desktop.${ext}`)),
|
|
91473
|
+
downloadReadableShot(section.mobileShotUrl, path53.join(dir, `mobile.${ext}`)),
|
|
91474
|
+
downloadReadableShot(section.motionFilmstripUrl, path53.join(dir, `motion-filmstrip.${ext}`))
|
|
91428
91475
|
]);
|
|
91429
91476
|
const full = args8.full;
|
|
91430
91477
|
const hints2 = [INSPIRATION_HINTS.structureNotCopy, INSPIRATION_HINTS.adapt];
|
|
@@ -91531,7 +91578,7 @@ Full guide: __tooling__/docs/tools/baker/landing.md`
|
|
|
91531
91578
|
// src/commands/landing/variant.ts
|
|
91532
91579
|
import { randomUUID as randomUUID3 } from "crypto";
|
|
91533
91580
|
import { mkdir as mkdir16, readdir as readdir18, readFile as readFile41, stat as stat11, writeFile as writeFile24 } from "fs/promises";
|
|
91534
|
-
import
|
|
91581
|
+
import path54 from "path";
|
|
91535
91582
|
import { defineCommand as defineCommand206 } from "citty";
|
|
91536
91583
|
registerSchema({
|
|
91537
91584
|
command: "landing.variant",
|
|
@@ -91567,7 +91614,7 @@ async function readInternalId(definitionPath) {
|
|
|
91567
91614
|
async function archivedVariantNumbers(root, internalId) {
|
|
91568
91615
|
if (!internalId) return [];
|
|
91569
91616
|
try {
|
|
91570
|
-
const entries = await readdir18(
|
|
91617
|
+
const entries = await readdir18(path54.resolve(root, "src/_variants", internalId), { withFileTypes: true });
|
|
91571
91618
|
return entries.filter((entry) => entry.isDirectory()).map((entry) => Number(entry.name)).filter((n) => Number.isInteger(n) && n > 0);
|
|
91572
91619
|
} catch {
|
|
91573
91620
|
return [];
|
|
@@ -91597,7 +91644,7 @@ async function exists2(p) {
|
|
|
91597
91644
|
}
|
|
91598
91645
|
async function listLandingSlugs2(root) {
|
|
91599
91646
|
try {
|
|
91600
|
-
const entries = await readdir18(
|
|
91647
|
+
const entries = await readdir18(path54.resolve(root, "src", "pages"), { withFileTypes: true });
|
|
91601
91648
|
return entries.filter((e) => e.isDirectory() && !e.name.startsWith("_") && !e.name.startsWith(".")).map((e) => e.name).sort();
|
|
91602
91649
|
} catch {
|
|
91603
91650
|
return [];
|
|
@@ -91613,7 +91660,7 @@ async function listComponents(componentsDir, prefix = "") {
|
|
|
91613
91660
|
const out = [];
|
|
91614
91661
|
for (const entry of entries) {
|
|
91615
91662
|
const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
91616
|
-
if (entry.isDirectory()) out.push(...await listComponents(
|
|
91663
|
+
if (entry.isDirectory()) out.push(...await listComponents(path54.join(componentsDir, entry.name), rel));
|
|
91617
91664
|
else if (entry.name.endsWith(".astro")) out.push(rel);
|
|
91618
91665
|
}
|
|
91619
91666
|
return out.sort();
|
|
@@ -91680,16 +91727,16 @@ async function resolveTargets(projectRoot, opts) {
|
|
|
91680
91727
|
`"${controlSlug}" is already a variant of "${variantOfSlug(controlSlug)}". Make the next variant of the page itself: \`baker landing variant ${variantOfSlug(controlSlug)}\`.`
|
|
91681
91728
|
);
|
|
91682
91729
|
}
|
|
91683
|
-
const controlDir =
|
|
91730
|
+
const controlDir = path54.resolve(projectRoot, "src", "pages", controlSlug);
|
|
91684
91731
|
if (!await isDir3(controlDir)) {
|
|
91685
91732
|
fail9("NOT_FOUND", `No page at src/pages/${controlSlug}/`, {
|
|
91686
91733
|
availableSlugs: await listLandingSlugs2(projectRoot)
|
|
91687
91734
|
});
|
|
91688
91735
|
}
|
|
91689
|
-
if (!await exists2(
|
|
91736
|
+
if (!await exists2(path54.join(controlDir, "index.astro"))) {
|
|
91690
91737
|
fail9("NOT_FOUND", `src/pages/${controlSlug}/index.astro is missing, so there is no page to make a variant of.`);
|
|
91691
91738
|
}
|
|
91692
|
-
const internalId = await readInternalId(
|
|
91739
|
+
const internalId = await readInternalId(path54.join(controlDir, "_definition.md"));
|
|
91693
91740
|
const variantSlugValue = variantSlug(
|
|
91694
91741
|
controlSlug,
|
|
91695
91742
|
nextVariantNumber(
|
|
@@ -91698,8 +91745,8 @@ async function resolveTargets(projectRoot, opts) {
|
|
|
91698
91745
|
await archivedVariantNumbers(projectRoot, internalId)
|
|
91699
91746
|
)
|
|
91700
91747
|
);
|
|
91701
|
-
const variantDir =
|
|
91702
|
-
const available = await listComponents(
|
|
91748
|
+
const variantDir = path54.resolve(projectRoot, "src", "pages", variantSlugValue);
|
|
91749
|
+
const available = await listComponents(path54.join(controlDir, "_components"));
|
|
91703
91750
|
const forks = [];
|
|
91704
91751
|
for (const name of parseForks(opts.fork, opts.rawArgs)) {
|
|
91705
91752
|
const resolved = resolveForkName(name, available);
|
|
@@ -91715,26 +91762,26 @@ async function resolveTargets(projectRoot, opts) {
|
|
|
91715
91762
|
}
|
|
91716
91763
|
async function writeVariant(opts) {
|
|
91717
91764
|
const { controlDir, variantDir, controlSlug, variantSlug: variantSlug2, forks } = opts;
|
|
91718
|
-
const forkedTargets = new Set(forks.map((f) =>
|
|
91765
|
+
const forkedTargets = new Set(forks.map((f) => path54.join(controlDir, "_components", f)));
|
|
91719
91766
|
const written = [];
|
|
91720
|
-
const indexText = await readFile41(
|
|
91767
|
+
const indexText = await readFile41(path54.join(controlDir, "index.astro"), "utf8");
|
|
91721
91768
|
await mkdir16(variantDir, { recursive: true });
|
|
91722
91769
|
await writeFile24(
|
|
91723
|
-
|
|
91770
|
+
path54.join(variantDir, "index.astro"),
|
|
91724
91771
|
repointFile(indexText, { fromDir: controlDir, toDir: variantDir, controlDir, variantDir, forkedTargets }),
|
|
91725
91772
|
"utf8"
|
|
91726
91773
|
);
|
|
91727
91774
|
written.push(`src/pages/${variantSlug2}/index.astro`);
|
|
91728
91775
|
for (const fork of forks) {
|
|
91729
|
-
const fromFile =
|
|
91730
|
-
const toFile =
|
|
91776
|
+
const fromFile = path54.join(controlDir, "_components", fork);
|
|
91777
|
+
const toFile = path54.join(variantDir, "_components", fork);
|
|
91731
91778
|
const text2 = await readFile41(fromFile, "utf8");
|
|
91732
|
-
await mkdir16(
|
|
91779
|
+
await mkdir16(path54.dirname(toFile), { recursive: true });
|
|
91733
91780
|
await writeFile24(
|
|
91734
91781
|
toFile,
|
|
91735
91782
|
repointFile(text2, {
|
|
91736
|
-
fromDir:
|
|
91737
|
-
toDir:
|
|
91783
|
+
fromDir: path54.dirname(fromFile),
|
|
91784
|
+
toDir: path54.dirname(toFile),
|
|
91738
91785
|
controlDir,
|
|
91739
91786
|
variantDir,
|
|
91740
91787
|
forkedTargets
|
|
@@ -91743,7 +91790,7 @@ async function writeVariant(opts) {
|
|
|
91743
91790
|
);
|
|
91744
91791
|
written.push(`src/pages/${variantSlug2}/_components/${fork}`);
|
|
91745
91792
|
}
|
|
91746
|
-
const controlDefinitionPath =
|
|
91793
|
+
const controlDefinitionPath = path54.join(controlDir, "_definition.md");
|
|
91747
91794
|
if (await exists2(controlDefinitionPath)) {
|
|
91748
91795
|
const definition = buildVariantDefinition(await readFile41(controlDefinitionPath, "utf8"), {
|
|
91749
91796
|
internalId: randomUUID3().replace(/-/g, "").slice(0, 8),
|
|
@@ -91753,11 +91800,11 @@ async function writeVariant(opts) {
|
|
|
91753
91800
|
...opts.because ? { because: opts.because } : {},
|
|
91754
91801
|
...opts.change ? { change: opts.change } : {}
|
|
91755
91802
|
});
|
|
91756
|
-
await writeFile24(
|
|
91803
|
+
await writeFile24(path54.join(variantDir, "_definition.md"), definition, "utf8");
|
|
91757
91804
|
written.push(`src/pages/${variantSlug2}/_definition.md`);
|
|
91758
91805
|
}
|
|
91759
|
-
await mkdir16(
|
|
91760
|
-
await writeFile24(
|
|
91806
|
+
await mkdir16(path54.join(variantDir, "_images"), { recursive: true });
|
|
91807
|
+
await writeFile24(path54.join(variantDir, "_images", ".gitkeep"), "", "utf8");
|
|
91761
91808
|
return written;
|
|
91762
91809
|
}
|
|
91763
91810
|
var variantCommand = defineCommand206({
|
|
@@ -94463,7 +94510,7 @@ Full guide: __tooling__/docs/tools/baker/scheduled-agents.md`
|
|
|
94463
94510
|
|
|
94464
94511
|
// src/commands/scheduled-agents/templates.ts
|
|
94465
94512
|
import { readFile as readFile42 } from "fs/promises";
|
|
94466
|
-
import
|
|
94513
|
+
import path55 from "path";
|
|
94467
94514
|
import { defineCommand as defineCommand234 } from "citty";
|
|
94468
94515
|
registerSchema({
|
|
94469
94516
|
command: "scheduled-agents.templates",
|
|
@@ -94570,7 +94617,7 @@ Full guide: __tooling__/docs/tools/baker/scheduled-agents.md`
|
|
|
94570
94617
|
}
|
|
94571
94618
|
if (save.length > 0) {
|
|
94572
94619
|
const briefFile = flag("brief-file");
|
|
94573
|
-
const brief2 = briefFile.length > 0 ? await readFile42(
|
|
94620
|
+
const brief2 = briefFile.length > 0 ? await readFile42(path55.resolve(briefFile), "utf8") : flag("brief");
|
|
94574
94621
|
if (brief2.trim().length === 0) {
|
|
94575
94622
|
failValidation4("--brief-file (preferred) or --brief is required: the brief is the recipe.");
|
|
94576
94623
|
}
|
|
@@ -95210,7 +95257,7 @@ function parseImageRefs(spec) {
|
|
|
95210
95257
|
}
|
|
95211
95258
|
var defaultDeps = {
|
|
95212
95259
|
ingest: (url) => apiPost("/api/images/ingest", { url, source: "uploaded" }),
|
|
95213
|
-
upload: (
|
|
95260
|
+
upload: (path58) => uploadLocalImage({ file: path58, contentType: detectImageContentType(path58), source: "uploaded" })
|
|
95214
95261
|
};
|
|
95215
95262
|
async function resolveLibraryImageIds(spec, limit, deps = defaultDeps) {
|
|
95216
95263
|
const refs = parseImageRefs(spec);
|
|
@@ -95230,10 +95277,10 @@ async function resolveLibraryImageIds(spec, limit, deps = defaultDeps) {
|
|
|
95230
95277
|
}
|
|
95231
95278
|
return { imageIds, added };
|
|
95232
95279
|
}
|
|
95233
|
-
function uploadFailure(
|
|
95280
|
+
function uploadFailure(path58) {
|
|
95234
95281
|
return (error) => {
|
|
95235
95282
|
if (error instanceof ApiError) throw error;
|
|
95236
|
-
throw new ApiError("VALIDATION_ERROR", `Could not read "${
|
|
95283
|
+
throw new ApiError("VALIDATION_ERROR", `Could not read "${path58}" as an image.`);
|
|
95237
95284
|
};
|
|
95238
95285
|
}
|
|
95239
95286
|
|
|
@@ -96333,10 +96380,10 @@ async function stageOp4(op) {
|
|
|
96333
96380
|
handleError8(err);
|
|
96334
96381
|
}
|
|
96335
96382
|
}
|
|
96336
|
-
async function draftAction3(
|
|
96383
|
+
async function draftAction3(path58, body, chat) {
|
|
96337
96384
|
const chatId = resolveChatId(chat);
|
|
96338
96385
|
try {
|
|
96339
|
-
const { data, hints: hints2 } = splitHints(await apiPost(
|
|
96386
|
+
const { data, hints: hints2 } = splitHints(await apiPost(path58, { chatId, ...body }));
|
|
96340
96387
|
writeJsonEnvelope({ ok: true, data, ...hints2.length > 0 ? { hints: hints2 } : {} });
|
|
96341
96388
|
return data;
|
|
96342
96389
|
} catch (err) {
|
|
@@ -96928,7 +96975,7 @@ Full guide: __tooling__/docs/tools/baker/tags.md`
|
|
|
96928
96975
|
});
|
|
96929
96976
|
|
|
96930
96977
|
// src/commands/testimonials/index.ts
|
|
96931
|
-
import { defineCommand as
|
|
96978
|
+
import { defineCommand as defineCommand263 } from "citty";
|
|
96932
96979
|
|
|
96933
96980
|
// src/commands/testimonials/get.ts
|
|
96934
96981
|
import { defineCommand as defineCommand254 } from "citty";
|
|
@@ -96992,7 +97039,7 @@ function resolveEmptyReason({
|
|
|
96992
97039
|
}
|
|
96993
97040
|
return sourceCount === 0 ? "no_corpus_connected" : "corpus_empty";
|
|
96994
97041
|
}
|
|
96995
|
-
var NO_CORPUS_EXIT =
|
|
97042
|
+
var NO_CORPUS_EXIT = "Testimonials are ingested from the client's public review pages \u2014 an agent cannot write one \u2014 so no rewording will find quotes. If the user named the client's own review page (Google Maps, Trustpilot, Yelp, Tripadvisor, G2, Capterra, Amazon, App Store, Google Play), add it with `baker testimonials sources add <link>` \u2014 its reviews arrive over the next minutes, not in this turn. Stop searching and source proof another way: a result or case study the client already published, a named-customer logo (`baker images logo`), or a founder claim attributed as a claim. Otherwise ship without a testimonial block and file the gap: `baker actions create --name \"Collect customer quotes for <page>\" --priority medium --tags <slug>`. Never invent, paraphrase-into-existence, or pad with unrelated praise.";
|
|
96996
97043
|
function emptyReasonDetail(reason, sourceCount, activeFilters) {
|
|
96997
97044
|
if (reason === "filtered_out") {
|
|
96998
97045
|
return `No rows matched, and ${activeFilters.join(", ")} narrowed this read. The corpus was not checked \u2014 drop every filter to see whether the library itself is empty.`;
|
|
@@ -97084,9 +97131,9 @@ registerSchema({
|
|
|
97084
97131
|
args: {
|
|
97085
97132
|
source: {
|
|
97086
97133
|
type: "string",
|
|
97087
|
-
description:
|
|
97134
|
+
description: `Filter by source: ${testimonialSourceTypeSchema.options.join("|")}`,
|
|
97088
97135
|
required: false,
|
|
97089
|
-
enum: [
|
|
97136
|
+
enum: [...testimonialSourceTypeSchema.options]
|
|
97090
97137
|
},
|
|
97091
97138
|
"rating-min": { type: "number", description: "Minimum star rating (1-5)", required: false },
|
|
97092
97139
|
"rating-max": { type: "number", description: "Maximum star rating (1-5)", required: false },
|
|
@@ -97139,7 +97186,11 @@ var listCommand22 = defineCommand255({
|
|
|
97139
97186
|
description: "List testimonials with optional filters. Example: baker testimonials list --source google --sentiment positive"
|
|
97140
97187
|
},
|
|
97141
97188
|
args: {
|
|
97142
|
-
source: {
|
|
97189
|
+
source: {
|
|
97190
|
+
type: "string",
|
|
97191
|
+
description: `Filter by source: ${testimonialSourceTypeSchema.options.join("|")}`,
|
|
97192
|
+
required: false
|
|
97193
|
+
},
|
|
97143
97194
|
"rating-min": { type: "string", description: "Minimum star rating (1-5)", required: false },
|
|
97144
97195
|
"rating-max": { type: "string", description: "Maximum star rating (1-5)", required: false },
|
|
97145
97196
|
status: { type: "string", description: "Filter by status: pending|processing|ready|error", required: false },
|
|
@@ -97222,9 +97273,9 @@ registerSchema({
|
|
|
97222
97273
|
limit: { type: "number", description: "Maximum results to return", required: false, default: 10 },
|
|
97223
97274
|
source: {
|
|
97224
97275
|
type: "string",
|
|
97225
|
-
description:
|
|
97276
|
+
description: `Filter by source: ${testimonialSourceTypeSchema.options.join("|")}`,
|
|
97226
97277
|
required: false,
|
|
97227
|
-
enum: [
|
|
97278
|
+
enum: [...testimonialSourceTypeSchema.options]
|
|
97228
97279
|
},
|
|
97229
97280
|
"rating-min": { type: "number", description: "Minimum star rating (1-5)", required: false },
|
|
97230
97281
|
"rating-max": { type: "number", description: "Maximum star rating (1-5)", required: false },
|
|
@@ -97280,7 +97331,11 @@ var searchCommand3 = defineCommand256({
|
|
|
97280
97331
|
args: {
|
|
97281
97332
|
query: { type: "positional", description: "Search query text", required: false },
|
|
97282
97333
|
limit: { type: "string", description: "Max results (default 10)", required: false },
|
|
97283
|
-
source: {
|
|
97334
|
+
source: {
|
|
97335
|
+
type: "string",
|
|
97336
|
+
description: `Filter by source: ${testimonialSourceTypeSchema.options.join("|")}`,
|
|
97337
|
+
required: false
|
|
97338
|
+
},
|
|
97284
97339
|
"rating-min": { type: "string", description: "Minimum star rating (1-5)", required: false },
|
|
97285
97340
|
"rating-max": { type: "string", description: "Maximum star rating (1-5)", required: false },
|
|
97286
97341
|
status: { type: "string", description: "Filter by status: pending|processing|ready|error", required: false },
|
|
@@ -97332,14 +97387,276 @@ var searchCommand3 = defineCommand256({
|
|
|
97332
97387
|
}
|
|
97333
97388
|
});
|
|
97334
97389
|
|
|
97390
|
+
// src/commands/testimonials/sources/index.ts
|
|
97391
|
+
import { defineCommand as defineCommand262 } from "citty";
|
|
97392
|
+
|
|
97393
|
+
// src/commands/testimonials/sources/add.ts
|
|
97394
|
+
import { defineCommand as defineCommand257 } from "citty";
|
|
97395
|
+
|
|
97396
|
+
// src/commands/testimonials/sources/shared.ts
|
|
97397
|
+
function reportError3(err) {
|
|
97398
|
+
if (err instanceof ApiError) {
|
|
97399
|
+
writeJson({ ok: false, error: { code: err.code, message: err.message } });
|
|
97400
|
+
process.exit(1);
|
|
97401
|
+
}
|
|
97402
|
+
writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
|
|
97403
|
+
process.exit(1);
|
|
97404
|
+
}
|
|
97405
|
+
function reportInvalid(issue) {
|
|
97406
|
+
writeJson({
|
|
97407
|
+
ok: false,
|
|
97408
|
+
error: {
|
|
97409
|
+
code: "VALIDATION_ERROR",
|
|
97410
|
+
message: issue ? `${issue.path.map(String).join(".") || "input"}: ${issue.message}` : "Invalid request"
|
|
97411
|
+
}
|
|
97412
|
+
});
|
|
97413
|
+
process.exit(1);
|
|
97414
|
+
}
|
|
97415
|
+
function compactSource2(source) {
|
|
97416
|
+
return {
|
|
97417
|
+
id: source.id,
|
|
97418
|
+
platform: source.platform,
|
|
97419
|
+
label: source.label,
|
|
97420
|
+
...source.pageUrl ? { url: source.pageUrl } : {},
|
|
97421
|
+
status: source.status,
|
|
97422
|
+
reviews: source.reviews,
|
|
97423
|
+
autoSync: source.refreshInterval,
|
|
97424
|
+
...source.lastSyncedAt ? { lastSyncedAt: new Date(source.lastSyncedAt).toISOString() } : {},
|
|
97425
|
+
...source.error ? { error: source.error } : {}
|
|
97426
|
+
};
|
|
97427
|
+
}
|
|
97428
|
+
|
|
97429
|
+
// src/commands/testimonials/sources/add.ts
|
|
97430
|
+
var SITES = testimonialSourceTypeSchema.options.join("|");
|
|
97431
|
+
registerSchema({
|
|
97432
|
+
command: "testimonials.sources.add",
|
|
97433
|
+
description: "Add a review page as a testimonial source \u2014 Google Maps, Trustpilot, Yelp, Tripadvisor, G2, Capterra, Amazon, App Store or Google Play. Pass the page's link (it names its own site), or a business name for Google Maps. Its reviews (up to 700) are imported, tagged and made searchable in the background over the next minutes. Each imported review costs a little, so add only the client's own listings the user asked for. Applies immediately and shows on the chat as an already-applied change. Adding a listing that is already a source is a no-op that starts a fresh import.",
|
|
97434
|
+
args: {
|
|
97435
|
+
input: {
|
|
97436
|
+
type: "string",
|
|
97437
|
+
description: "The review page's link, or a business name (Google Maps only)",
|
|
97438
|
+
required: true
|
|
97439
|
+
},
|
|
97440
|
+
platform: {
|
|
97441
|
+
type: "string",
|
|
97442
|
+
description: `Only to force a site: ${SITES}. A bare domain with trustpilot is that company's Trustpilot page.`,
|
|
97443
|
+
required: false
|
|
97444
|
+
},
|
|
97445
|
+
every: {
|
|
97446
|
+
type: "string",
|
|
97447
|
+
description: `Auto-sync cadence: ${testimonialSourceRefreshIntervalSchema.options.join("|")} (default never)`,
|
|
97448
|
+
required: false
|
|
97449
|
+
}
|
|
97450
|
+
}
|
|
97451
|
+
});
|
|
97452
|
+
function addSourceHints(input, { created, source }) {
|
|
97453
|
+
const hints2 = [
|
|
97454
|
+
created ? `Added ${source.label} on ${source.platformLabel}. Its reviews are importing in the background \u2014 they become searchable with \`baker testimonials search\` as each one is analysed, usually within a few minutes. Don't wait on them in this turn; check with \`baker testimonials sources list\`.` : `${source.label} on ${source.platformLabel} was already a source; a fresh import was started if one wasn't running.`
|
|
97455
|
+
];
|
|
97456
|
+
if (created && source.platform === "google" && !/^https?:\/\/|\.[a-z]{2,}\//i.test(input.trim())) {
|
|
97457
|
+
hints2.push(
|
|
97458
|
+
`Matched the name to ${source.label} on Google Maps (${source.pageUrl ?? "no link"}). If that is not the client's business, run \`baker testimonials sources remove ${source.id}\` at once and add the listing's Google Maps link instead.`
|
|
97459
|
+
);
|
|
97460
|
+
}
|
|
97461
|
+
if (source.refreshInterval === "never") {
|
|
97462
|
+
hints2.push(
|
|
97463
|
+
`Auto-sync is off. If the user wants new reviews to keep arriving: \`baker testimonials sources schedule ${source.id} --every monthly\`.`
|
|
97464
|
+
);
|
|
97465
|
+
}
|
|
97466
|
+
return hints2;
|
|
97467
|
+
}
|
|
97468
|
+
var addCommand4 = defineCommand257({
|
|
97469
|
+
meta: {
|
|
97470
|
+
name: "add",
|
|
97471
|
+
description: `Add a review page as a testimonial source. Start here with the page's link; for Google Maps a business name also works.
|
|
97472
|
+
|
|
97473
|
+
Examples:
|
|
97474
|
+
baker testimonials sources add https://www.yelp.com/biz/acme-bakery-madrid
|
|
97475
|
+
baker testimonials sources add https://www.g2.com/products/acme --every monthly
|
|
97476
|
+
baker testimonials sources add "Acme Bakery Madrid" # Google Maps, found by name
|
|
97477
|
+
baker testimonials sources add acme.com --platform trustpilot`
|
|
97478
|
+
},
|
|
97479
|
+
args: {
|
|
97480
|
+
input: { type: "positional", description: "Review page link, or a business name for Google Maps", required: true },
|
|
97481
|
+
platform: { type: "string", description: `Force a site: ${SITES}`, required: false },
|
|
97482
|
+
every: { type: "string", description: "Auto-sync: never|daily|weekly|monthly", required: false }
|
|
97483
|
+
},
|
|
97484
|
+
run: async ({ args: args8 }) => {
|
|
97485
|
+
const parsed = testimonialSourcesAddRequestSchema.safeParse({
|
|
97486
|
+
input: String(args8.input ?? ""),
|
|
97487
|
+
platform: args8.platform ? String(args8.platform).toLowerCase().replace(/[\s-]/g, "_") : void 0,
|
|
97488
|
+
every: args8.every ? String(args8.every).toLowerCase() : void 0
|
|
97489
|
+
});
|
|
97490
|
+
if (!parsed.success) reportInvalid(parsed.error.issues[0]);
|
|
97491
|
+
try {
|
|
97492
|
+
const data = await apiPost("/api/testimonials/sources/add", parsed.data, {
|
|
97493
|
+
timeoutMs: 12e4
|
|
97494
|
+
});
|
|
97495
|
+
const hints2 = addSourceHints(parsed.data.input, data);
|
|
97496
|
+
writeJson({ ok: true, data: { created: data.created, source: compactSource2(data.source) }, hints: hints2 });
|
|
97497
|
+
} catch (err) {
|
|
97498
|
+
reportError3(err);
|
|
97499
|
+
}
|
|
97500
|
+
}
|
|
97501
|
+
});
|
|
97502
|
+
|
|
97503
|
+
// src/commands/testimonials/sources/list.ts
|
|
97504
|
+
import { defineCommand as defineCommand258 } from "citty";
|
|
97505
|
+
registerSchema({
|
|
97506
|
+
command: "testimonials.sources.list",
|
|
97507
|
+
description: "List the review pages feeding the testimonials library: each one's id, site, import status and how many reviews it has brought in.",
|
|
97508
|
+
args: {}
|
|
97509
|
+
});
|
|
97510
|
+
function listSourceHints(sources) {
|
|
97511
|
+
if (sources.length === 0) {
|
|
97512
|
+
return [
|
|
97513
|
+
"No review sources yet. If the client has a public review page (Google Maps, Trustpilot, Yelp, Tripadvisor, G2, Capterra, Amazon, App Store, Google Play), add it with `baker testimonials sources add <link>`."
|
|
97514
|
+
];
|
|
97515
|
+
}
|
|
97516
|
+
const hints2 = sources.filter((source) => source.status === "error").map(
|
|
97517
|
+
(source) => `${source.label} on ${source.platformLabel} did not import: ${source.error ?? "the last import failed"} Retry once with \`baker testimonials sources sync ${source.id}\`; if it fails again, tell the user in plain words and carry on with the other sources.`
|
|
97518
|
+
);
|
|
97519
|
+
if (sources.some((source) => source.status === "importing")) {
|
|
97520
|
+
hints2.push("Some sources are still importing \u2014 their review counts will grow over the next minutes.");
|
|
97521
|
+
}
|
|
97522
|
+
return hints2;
|
|
97523
|
+
}
|
|
97524
|
+
var listCommand23 = defineCommand258({
|
|
97525
|
+
meta: {
|
|
97526
|
+
name: "list",
|
|
97527
|
+
description: "List testimonial sources (id, site, import status, reviews imported).\n\nExample: baker testimonials sources list"
|
|
97528
|
+
},
|
|
97529
|
+
args: {},
|
|
97530
|
+
run: async () => {
|
|
97531
|
+
try {
|
|
97532
|
+
const sources = await apiGet("/api/testimonials/sources/list");
|
|
97533
|
+
const hints2 = listSourceHints(sources);
|
|
97534
|
+
writeJson({ ok: true, data: sources.map(compactSource2), hints: hints2.length > 0 ? hints2 : void 0 });
|
|
97535
|
+
} catch (err) {
|
|
97536
|
+
reportError3(err);
|
|
97537
|
+
}
|
|
97538
|
+
}
|
|
97539
|
+
});
|
|
97540
|
+
|
|
97541
|
+
// src/commands/testimonials/sources/remove.ts
|
|
97542
|
+
import { defineCommand as defineCommand259 } from "citty";
|
|
97543
|
+
registerSchema({
|
|
97544
|
+
command: "testimonials.sources.remove",
|
|
97545
|
+
description: "Remove a review source AND every testimonial it imported (and their pictures). Applies immediately and cannot be undone \u2014 only when the user asked for it.",
|
|
97546
|
+
args: { id: { type: "string", description: "Source id from `testimonials sources list`", required: true } }
|
|
97547
|
+
});
|
|
97548
|
+
var removeCommand8 = defineCommand259({
|
|
97549
|
+
meta: {
|
|
97550
|
+
name: "remove",
|
|
97551
|
+
description: "Remove a review source and all its testimonials (cannot be undone).\n\nExample: baker testimonials sources remove <source-id>"
|
|
97552
|
+
},
|
|
97553
|
+
args: { id: { type: "positional", description: "Source id from `testimonials sources list`", required: true } },
|
|
97554
|
+
run: async ({ args: args8 }) => {
|
|
97555
|
+
const parsed = testimonialSourcesRemoveRequestSchema.safeParse({ id: String(args8.id ?? "") });
|
|
97556
|
+
if (!parsed.success) reportInvalid(parsed.error.issues[0]);
|
|
97557
|
+
try {
|
|
97558
|
+
const data = await apiPost("/api/testimonials/sources/remove", parsed.data);
|
|
97559
|
+
writeJson({ ok: true, data });
|
|
97560
|
+
} catch (err) {
|
|
97561
|
+
reportError3(err);
|
|
97562
|
+
}
|
|
97563
|
+
}
|
|
97564
|
+
});
|
|
97565
|
+
|
|
97566
|
+
// src/commands/testimonials/sources/schedule.ts
|
|
97567
|
+
import { defineCommand as defineCommand260 } from "citty";
|
|
97568
|
+
var INTERVALS = testimonialSourceRefreshIntervalSchema.options.join("|");
|
|
97569
|
+
registerSchema({
|
|
97570
|
+
command: "testimonials.sources.schedule",
|
|
97571
|
+
description: "Set how often a review source imports its new reviews on its own.",
|
|
97572
|
+
args: {
|
|
97573
|
+
id: { type: "string", description: "Source id from `testimonials sources list`", required: true },
|
|
97574
|
+
every: { type: "string", description: `Auto-sync cadence: ${INTERVALS}`, required: true }
|
|
97575
|
+
}
|
|
97576
|
+
});
|
|
97577
|
+
var scheduleCommand2 = defineCommand260({
|
|
97578
|
+
meta: {
|
|
97579
|
+
name: "schedule",
|
|
97580
|
+
description: "Set a review source's auto-sync cadence.\n\nExample: baker testimonials sources schedule <source-id> --every monthly"
|
|
97581
|
+
},
|
|
97582
|
+
args: {
|
|
97583
|
+
id: { type: "positional", description: "Source id from `testimonials sources list`", required: true },
|
|
97584
|
+
every: { type: "string", description: INTERVALS, required: true }
|
|
97585
|
+
},
|
|
97586
|
+
run: async ({ args: args8 }) => {
|
|
97587
|
+
const parsed = testimonialSourcesScheduleRequestSchema.safeParse({
|
|
97588
|
+
id: String(args8.id ?? ""),
|
|
97589
|
+
every: String(args8.every ?? "").toLowerCase()
|
|
97590
|
+
});
|
|
97591
|
+
if (!parsed.success) reportInvalid(parsed.error.issues[0]);
|
|
97592
|
+
try {
|
|
97593
|
+
const data = await apiPost("/api/testimonials/sources/schedule", parsed.data);
|
|
97594
|
+
writeJson({ ok: true, data: { id: data.id, autoSync: parsed.data.every } });
|
|
97595
|
+
} catch (err) {
|
|
97596
|
+
reportError3(err);
|
|
97597
|
+
}
|
|
97598
|
+
}
|
|
97599
|
+
});
|
|
97600
|
+
|
|
97601
|
+
// src/commands/testimonials/sources/sync.ts
|
|
97602
|
+
import { defineCommand as defineCommand261 } from "citty";
|
|
97603
|
+
registerSchema({
|
|
97604
|
+
command: "testimonials.sources.sync",
|
|
97605
|
+
description: "Import a review source's new reviews now. Only reviews newer than the last import are read where the site allows it.",
|
|
97606
|
+
args: { id: { type: "string", description: "Source id from `testimonials sources list`", required: true } }
|
|
97607
|
+
});
|
|
97608
|
+
var syncCommand2 = defineCommand261({
|
|
97609
|
+
meta: {
|
|
97610
|
+
name: "sync",
|
|
97611
|
+
description: "Import a review source's new reviews now.\n\nExample: baker testimonials sources sync <source-id>"
|
|
97612
|
+
},
|
|
97613
|
+
args: { id: { type: "positional", description: "Source id from `testimonials sources list`", required: true } },
|
|
97614
|
+
run: async ({ args: args8 }) => {
|
|
97615
|
+
const parsed = testimonialSourcesSyncRequestSchema.safeParse({ id: String(args8.id ?? "") });
|
|
97616
|
+
if (!parsed.success) reportInvalid(parsed.error.issues[0]);
|
|
97617
|
+
try {
|
|
97618
|
+
const data = await apiPost("/api/testimonials/sources/sync", parsed.data);
|
|
97619
|
+
writeJson({
|
|
97620
|
+
ok: true,
|
|
97621
|
+
data,
|
|
97622
|
+
hints: data.started ? void 0 : ["An import was already running for this source; nothing new was started."]
|
|
97623
|
+
});
|
|
97624
|
+
} catch (err) {
|
|
97625
|
+
reportError3(err);
|
|
97626
|
+
}
|
|
97627
|
+
}
|
|
97628
|
+
});
|
|
97629
|
+
|
|
97630
|
+
// src/commands/testimonials/sources/index.ts
|
|
97631
|
+
var sourcesCommand2 = defineCommand262({
|
|
97632
|
+
meta: {
|
|
97633
|
+
name: "sources",
|
|
97634
|
+
description: `The review pages the testimonials come from: Google Maps, Trustpilot, Yelp, Tripadvisor, G2, Capterra, Amazon, App Store, Google Play. Subcommands: add, list, sync, schedule, remove.
|
|
97635
|
+
|
|
97636
|
+
Examples:
|
|
97637
|
+
baker testimonials sources add https://www.trustpilot.com/review/acme.com
|
|
97638
|
+
baker testimonials sources list
|
|
97639
|
+
baker testimonials sources sync <source-id>
|
|
97640
|
+
baker testimonials sources schedule <source-id> --every monthly
|
|
97641
|
+
baker testimonials sources remove <source-id>`
|
|
97642
|
+
},
|
|
97643
|
+
subCommands: {
|
|
97644
|
+
add: addCommand4,
|
|
97645
|
+
list: listCommand23,
|
|
97646
|
+
sync: syncCommand2,
|
|
97647
|
+
schedule: scheduleCommand2,
|
|
97648
|
+
remove: removeCommand8
|
|
97649
|
+
}
|
|
97650
|
+
});
|
|
97651
|
+
|
|
97335
97652
|
// src/commands/testimonials/tags.ts
|
|
97336
97653
|
var tagsCommand5 = makeTagsCommand("testimonials", "testimonial", "/api/testimonials/tags");
|
|
97337
97654
|
|
|
97338
97655
|
// src/commands/testimonials/index.ts
|
|
97339
|
-
var testimonialsCommand =
|
|
97656
|
+
var testimonialsCommand = defineCommand263({
|
|
97340
97657
|
meta: {
|
|
97341
97658
|
name: "testimonials",
|
|
97342
|
-
description: `Find and browse testimonials in Baker. Subcommands: search, get, list, tags.
|
|
97659
|
+
description: `Find and browse testimonials in Baker, and manage the review pages they come from. Subcommands: search, get, list, tags, sources.
|
|
97343
97660
|
|
|
97344
97661
|
Examples:
|
|
97345
97662
|
baker testimonials search "great customer service" --limit 5
|
|
@@ -97347,21 +97664,23 @@ Examples:
|
|
|
97347
97664
|
baker testimonials get <testimonial-id>
|
|
97348
97665
|
baker testimonials list --source google --sentiment positive
|
|
97349
97666
|
baker testimonials tags
|
|
97667
|
+
baker testimonials sources add https://www.yelp.com/biz/acme-bakery-madrid
|
|
97350
97668
|
Full guide: __tooling__/docs/tools/baker/testimonials.md`
|
|
97351
97669
|
},
|
|
97352
97670
|
subCommands: {
|
|
97353
97671
|
get: getCommand6,
|
|
97354
97672
|
search: searchCommand3,
|
|
97355
97673
|
list: listCommand22,
|
|
97356
|
-
tags: tagsCommand5
|
|
97674
|
+
tags: tagsCommand5,
|
|
97675
|
+
sources: sourcesCommand2
|
|
97357
97676
|
}
|
|
97358
97677
|
});
|
|
97359
97678
|
|
|
97360
97679
|
// src/commands/videos/index.ts
|
|
97361
|
-
import { defineCommand as
|
|
97680
|
+
import { defineCommand as defineCommand272 } from "citty";
|
|
97362
97681
|
|
|
97363
97682
|
// src/commands/videos/delete.ts
|
|
97364
|
-
import { defineCommand as
|
|
97683
|
+
import { defineCommand as defineCommand264 } from "citty";
|
|
97365
97684
|
registerSchema({
|
|
97366
97685
|
command: "videos.delete",
|
|
97367
97686
|
description: "Delete a video by ID",
|
|
@@ -97375,7 +97694,7 @@ registerSchema({
|
|
|
97375
97694
|
}
|
|
97376
97695
|
}
|
|
97377
97696
|
});
|
|
97378
|
-
var deleteCommand4 =
|
|
97697
|
+
var deleteCommand4 = defineCommand264({
|
|
97379
97698
|
meta: {
|
|
97380
97699
|
name: "delete",
|
|
97381
97700
|
description: "Delete a video by ID. Use --dry-run to preview. Example: baker videos delete j571abc123 --dry-run"
|
|
@@ -97416,7 +97735,7 @@ var deleteCommand4 = defineCommand258({
|
|
|
97416
97735
|
});
|
|
97417
97736
|
|
|
97418
97737
|
// src/commands/videos/describe.ts
|
|
97419
|
-
import { defineCommand as
|
|
97738
|
+
import { defineCommand as defineCommand265 } from "citty";
|
|
97420
97739
|
var DESCRIPTION_HELP2 = "What the clip actually shows, in the words someone would search for it by. This is what `baker videos search` retrieves on.";
|
|
97421
97740
|
registerSchema({
|
|
97422
97741
|
command: "videos.describe",
|
|
@@ -97433,7 +97752,7 @@ registerSchema({
|
|
|
97433
97752
|
full: { type: "boolean", description: "Return the whole library row, not just what changed", required: false }
|
|
97434
97753
|
}
|
|
97435
97754
|
});
|
|
97436
|
-
var describeCommand2 =
|
|
97755
|
+
var describeCommand2 = defineCommand265({
|
|
97437
97756
|
meta: {
|
|
97438
97757
|
name: "describe",
|
|
97439
97758
|
description: `Correct what the library says a video is. Only the fields you pass change; the rest keep their current values.
|
|
@@ -97494,8 +97813,8 @@ Example: baker videos describe j571abc123 --description "Customer explaining how
|
|
|
97494
97813
|
import { constants } from "fs";
|
|
97495
97814
|
import { copyFile as copyFile2, mkdir as mkdir17, mkdtemp as mkdtemp3, rm as rm10 } from "fs/promises";
|
|
97496
97815
|
import { tmpdir as tmpdir4 } from "os";
|
|
97497
|
-
import
|
|
97498
|
-
import { defineCommand as
|
|
97816
|
+
import path56 from "path";
|
|
97817
|
+
import { defineCommand as defineCommand266 } from "citty";
|
|
97499
97818
|
|
|
97500
97819
|
// src/commands/videos/videoPlatforms.ts
|
|
97501
97820
|
var PLATFORM_DOMAINS = {
|
|
@@ -97633,7 +97952,7 @@ function positiveInt(value2) {
|
|
|
97633
97952
|
const parsed = typeof value2 === "string" ? Number.parseInt(value2, 10) : Number.NaN;
|
|
97634
97953
|
return Number.isInteger(parsed) && parsed > 0 ? parsed : void 0;
|
|
97635
97954
|
}
|
|
97636
|
-
var fetchCommand2 =
|
|
97955
|
+
var fetchCommand2 = defineCommand266({
|
|
97637
97956
|
meta: {
|
|
97638
97957
|
name: "fetch",
|
|
97639
97958
|
description: "Download a video page to a local .mp4 without adding it to the library. Same downloader as `ingest` (proxy fallback, duration check).\n\nExample: baker videos fetch https://www.youtube.com/watch?v=abc123 --out ./clips"
|
|
@@ -97662,8 +97981,8 @@ var fetchCommand2 = defineCommand260({
|
|
|
97662
97981
|
}
|
|
97663
97982
|
});
|
|
97664
97983
|
async function fetchVideo(args8) {
|
|
97665
|
-
const outDir =
|
|
97666
|
-
const workDir = await mkdtemp3(
|
|
97984
|
+
const outDir = path56.resolve(args8.out);
|
|
97985
|
+
const workDir = await mkdtemp3(path56.join(tmpdir4(), "videos-fetch-"));
|
|
97667
97986
|
try {
|
|
97668
97987
|
await mkdir17(outDir, { recursive: true });
|
|
97669
97988
|
const vimeoCookie = captureVimeoCookie();
|
|
@@ -97708,7 +98027,7 @@ function fileStem(info) {
|
|
|
97708
98027
|
}
|
|
97709
98028
|
async function placeInto(outDir, source, stem) {
|
|
97710
98029
|
for (let n = 1; ; n++) {
|
|
97711
|
-
const target2 =
|
|
98030
|
+
const target2 = path56.join(outDir, `${stem}${n === 1 ? "" : `-${n}`}${path56.extname(source)}`);
|
|
97712
98031
|
try {
|
|
97713
98032
|
await copyFile2(source, target2, constants.COPYFILE_EXCL);
|
|
97714
98033
|
return target2;
|
|
@@ -97719,7 +98038,7 @@ async function placeInto(outDir, source, stem) {
|
|
|
97719
98038
|
}
|
|
97720
98039
|
|
|
97721
98040
|
// src/commands/videos/get.ts
|
|
97722
|
-
import { defineCommand as
|
|
98041
|
+
import { defineCommand as defineCommand267 } from "citty";
|
|
97723
98042
|
registerSchema({
|
|
97724
98043
|
command: "videos.get",
|
|
97725
98044
|
description: "Get a single video by ID",
|
|
@@ -97727,7 +98046,7 @@ registerSchema({
|
|
|
97727
98046
|
id: { type: "string", description: "Video ID", required: true }
|
|
97728
98047
|
}
|
|
97729
98048
|
});
|
|
97730
|
-
var getCommand7 =
|
|
98049
|
+
var getCommand7 = defineCommand267({
|
|
97731
98050
|
meta: { name: "get", description: "Get a single video by ID. Example: baker videos get j571abc123" },
|
|
97732
98051
|
args: {
|
|
97733
98052
|
id: { type: "positional", description: "Video ID", required: false },
|
|
@@ -97764,7 +98083,7 @@ var getCommand7 = defineCommand261({
|
|
|
97764
98083
|
});
|
|
97765
98084
|
|
|
97766
98085
|
// src/commands/videos/group.ts
|
|
97767
|
-
import { defineCommand as
|
|
98086
|
+
import { defineCommand as defineCommand268 } from "citty";
|
|
97768
98087
|
registerSchema({
|
|
97769
98088
|
command: "videos.group",
|
|
97770
98089
|
description: "List every clip and image that arrived in the same set as this video (carousel slides, one page)",
|
|
@@ -97773,7 +98092,7 @@ registerSchema({
|
|
|
97773
98092
|
"group-key": { type: "string", description: "The set key directly, when you already have it", required: false }
|
|
97774
98093
|
}
|
|
97775
98094
|
});
|
|
97776
|
-
var groupCommand2 =
|
|
98095
|
+
var groupCommand2 = defineCommand268({
|
|
97777
98096
|
meta: {
|
|
97778
98097
|
name: "group",
|
|
97779
98098
|
description: "List every asset that arrived in the same set as this clip \u2014 the other slides of the Instagram post it came from, stills included. A carousel is authored to be read in order, so a clip pulled out of one is usually missing half its meaning. Example: baker videos group <videoId>"
|
|
@@ -97795,8 +98114,8 @@ var groupCommand2 = defineCommand262({
|
|
|
97795
98114
|
// src/commands/videos/ingest.ts
|
|
97796
98115
|
import { mkdtemp as mkdtemp4, rm as rm11, stat as stat12 } from "fs/promises";
|
|
97797
98116
|
import { tmpdir as tmpdir5 } from "os";
|
|
97798
|
-
import
|
|
97799
|
-
import { defineCommand as
|
|
98117
|
+
import path57 from "path";
|
|
98118
|
+
import { defineCommand as defineCommand269 } from "citty";
|
|
97800
98119
|
|
|
97801
98120
|
// src/lib/streamUpload.ts
|
|
97802
98121
|
import { createHash as createHash3 } from "crypto";
|
|
@@ -97849,7 +98168,7 @@ registerSchema({
|
|
|
97849
98168
|
"dry-run": { type: "boolean", description: "Preview the operation without executing", required: false }
|
|
97850
98169
|
}
|
|
97851
98170
|
});
|
|
97852
|
-
var ingestCommand2 =
|
|
98171
|
+
var ingestCommand2 = defineCommand269({
|
|
97853
98172
|
meta: {
|
|
97854
98173
|
name: "ingest",
|
|
97855
98174
|
description: "Add a video to the library from a URL. A direct file URL is handed straight to Baker, which fetches it. A page URL (YouTube, TikTok, Vimeo, Instagram) is downloaded here first, then uploaded \u2014 and a direct URL that Baker cannot fetch falls back to that same path automatically.\n\nExample: baker videos ingest https://www.youtube.com/watch?v=abc123"
|
|
@@ -98035,7 +98354,7 @@ function ingestUrl(args8) {
|
|
|
98035
98354
|
}
|
|
98036
98355
|
async function downloadThenIngest(args8, country) {
|
|
98037
98356
|
const vimeoCookie = captureVimeoCookie();
|
|
98038
|
-
const workDir = await mkdtemp4(
|
|
98357
|
+
const workDir = await mkdtemp4(path57.join(tmpdir5(), "videos-ingest-"));
|
|
98039
98358
|
try {
|
|
98040
98359
|
const probe = await probeYtDlp({ url: args8.url, country, vimeoCookie, cookieDir: workDir });
|
|
98041
98360
|
if (isAudioOnly(probe.info)) {
|
|
@@ -98111,7 +98430,7 @@ async function uploadToAssetStore(filePath, sizeBytes) {
|
|
|
98111
98430
|
}
|
|
98112
98431
|
|
|
98113
98432
|
// src/commands/videos/search.ts
|
|
98114
|
-
import { defineCommand as
|
|
98433
|
+
import { defineCommand as defineCommand270 } from "citty";
|
|
98115
98434
|
registerSchema({
|
|
98116
98435
|
command: "videos.search",
|
|
98117
98436
|
description: "Search videos by text query. Only returns ready videos.",
|
|
@@ -98121,7 +98440,7 @@ registerSchema({
|
|
|
98121
98440
|
tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
|
|
98122
98441
|
}
|
|
98123
98442
|
});
|
|
98124
|
-
var searchCommand4 =
|
|
98443
|
+
var searchCommand4 = defineCommand270({
|
|
98125
98444
|
meta: {
|
|
98126
98445
|
name: "search",
|
|
98127
98446
|
description: "Semantic search videos by text query. Uses hybrid BM25 + vector + reranking. Example: baker videos search 'product demo' --tags tutorial"
|
|
@@ -98173,7 +98492,7 @@ var tagsCommand6 = makeTagsCommand("videos", "video", "/api/videos/tags");
|
|
|
98173
98492
|
// src/commands/videos/upload.ts
|
|
98174
98493
|
import { stat as stat13 } from "fs/promises";
|
|
98175
98494
|
import { basename as basename4 } from "path";
|
|
98176
|
-
import { defineCommand as
|
|
98495
|
+
import { defineCommand as defineCommand271 } from "citty";
|
|
98177
98496
|
registerSchema({
|
|
98178
98497
|
command: "videos.upload",
|
|
98179
98498
|
description: "Upload a video to Baker \u2014 a local file (via Mux direct upload) or a remote http(s) URL.",
|
|
@@ -98200,7 +98519,7 @@ registerSchema({
|
|
|
98200
98519
|
function isRemoteUrl3(value2) {
|
|
98201
98520
|
return /^https?:\/\//i.test(value2);
|
|
98202
98521
|
}
|
|
98203
|
-
var uploadCommand2 =
|
|
98522
|
+
var uploadCommand2 = defineCommand271({
|
|
98204
98523
|
meta: {
|
|
98205
98524
|
name: "upload",
|
|
98206
98525
|
description: "Upload a video to Baker \u2014 accepts a local file path OR a remote http(s) URL.\n\nLocal: auto-detects content type and uploads via Mux direct upload.\nRemote: hands off to `videos ingest` (direct fetch, or download-then-upload for a YouTube/TikTok/Vimeo page).\n\nExamples:\n baker videos upload ./demo.mp4\n baker videos upload https://www.youtube.com/watch?v=abc123"
|
|
@@ -98269,7 +98588,7 @@ var uploadCommand2 = defineCommand265({
|
|
|
98269
98588
|
});
|
|
98270
98589
|
|
|
98271
98590
|
// src/commands/videos/index.ts
|
|
98272
|
-
var videosCommand =
|
|
98591
|
+
var videosCommand = defineCommand272({
|
|
98273
98592
|
meta: {
|
|
98274
98593
|
name: "videos",
|
|
98275
98594
|
description: `Find and manage videos in Baker. Subcommands: search, get, upload, ingest, fetch, describe, delete, tags.
|
|
@@ -98300,10 +98619,10 @@ Full guide: __tooling__/docs/tools/baker/videos.md`
|
|
|
98300
98619
|
});
|
|
98301
98620
|
|
|
98302
98621
|
// src/commands/winning-ads/index.ts
|
|
98303
|
-
import { defineCommand as
|
|
98622
|
+
import { defineCommand as defineCommand283 } from "citty";
|
|
98304
98623
|
|
|
98305
98624
|
// src/commands/winning-ads/advertisers.ts
|
|
98306
|
-
import { defineCommand as
|
|
98625
|
+
import { defineCommand as defineCommand273 } from "citty";
|
|
98307
98626
|
|
|
98308
98627
|
// src/commands/winning-ads/shared.ts
|
|
98309
98628
|
function splitList4(value2) {
|
|
@@ -98312,7 +98631,7 @@ function splitList4(value2) {
|
|
|
98312
98631
|
}
|
|
98313
98632
|
return value2.split(",").map((v) => v.trim()).filter(Boolean);
|
|
98314
98633
|
}
|
|
98315
|
-
function
|
|
98634
|
+
function reportError4(err) {
|
|
98316
98635
|
if (err instanceof ApiError) {
|
|
98317
98636
|
writeJson({ ok: false, error: { code: err.code, message: err.message } });
|
|
98318
98637
|
process.exit(1);
|
|
@@ -98356,7 +98675,7 @@ function advertiserNormalizer(record, full) {
|
|
|
98356
98675
|
last_synced_at: record.last_synced_at ?? null
|
|
98357
98676
|
};
|
|
98358
98677
|
}
|
|
98359
|
-
var advertisersCommand2 =
|
|
98678
|
+
var advertisersCommand2 = defineCommand273({
|
|
98360
98679
|
meta: {
|
|
98361
98680
|
name: "advertisers",
|
|
98362
98681
|
description: 'List corpus advertisers by name or domain. Find your own advertiser for --exclude-advertiser, or a competitor for --advertiser-id / winners. Example: baker winning-ads advertisers "Deel" --output md'
|
|
@@ -98408,13 +98727,13 @@ var advertisersCommand2 = defineCommand267({
|
|
|
98408
98727
|
advertiserNormalizer
|
|
98409
98728
|
);
|
|
98410
98729
|
} catch (err) {
|
|
98411
|
-
|
|
98730
|
+
reportError4(err);
|
|
98412
98731
|
}
|
|
98413
98732
|
}
|
|
98414
98733
|
});
|
|
98415
98734
|
|
|
98416
98735
|
// src/commands/winning-ads/content.ts
|
|
98417
|
-
import { defineCommand as
|
|
98736
|
+
import { defineCommand as defineCommand274 } from "citty";
|
|
98418
98737
|
registerSchema({
|
|
98419
98738
|
command: "winning-ads.content",
|
|
98420
98739
|
description: "Read what's INSIDE one winning ad: the spoken transcript, the on-screen text, and the ad copy. Use this after `search`/`winners`/`feed` return a shortlist \u2014 pass an ad_id to understand a reference before reproducing it. Static and carousel ads return the text drawn into the image with the job each piece does (headline, benefit, cta\u2026), the card it sits on, and their format_pattern. Add --full for how it is built (composition, colours, CTA, markers), how it persuades (awareness, mechanism, pains, desires, proof, objections), what it offers (offer type, price, guarantee, urgency), plus speech, pacing and soundtrack for video.",
|
|
@@ -98427,7 +98746,7 @@ registerSchema({
|
|
|
98427
98746
|
}
|
|
98428
98747
|
}
|
|
98429
98748
|
});
|
|
98430
|
-
var contentCommand =
|
|
98749
|
+
var contentCommand = defineCommand274({
|
|
98431
98750
|
meta: {
|
|
98432
98751
|
name: "content",
|
|
98433
98752
|
description: "Read the transcript + on-screen text + copy of one winning ad; --full adds its build, persuasion and offer. Example: baker winning-ads content adg_123 --platform meta --full --output md"
|
|
@@ -98470,13 +98789,13 @@ var contentCommand = defineCommand268({
|
|
|
98470
98789
|
adContentNormalizer
|
|
98471
98790
|
);
|
|
98472
98791
|
} catch (err) {
|
|
98473
|
-
|
|
98792
|
+
reportError4(err);
|
|
98474
98793
|
}
|
|
98475
98794
|
}
|
|
98476
98795
|
});
|
|
98477
98796
|
|
|
98478
98797
|
// src/commands/winning-ads/feed.ts
|
|
98479
|
-
import { defineCommand as
|
|
98798
|
+
import { defineCommand as defineCommand275 } from "citty";
|
|
98480
98799
|
function buildFeedParams(input) {
|
|
98481
98800
|
const params = {};
|
|
98482
98801
|
const advertiser = splitList4(input.advertiser);
|
|
@@ -98528,7 +98847,7 @@ registerSchema({
|
|
|
98528
98847
|
format: { type: "string", description: "Comma-separated formats to include (e.g. static,video)", required: false }
|
|
98529
98848
|
}
|
|
98530
98849
|
});
|
|
98531
|
-
var feedCommand2 =
|
|
98850
|
+
var feedCommand2 = defineCommand275({
|
|
98532
98851
|
meta: {
|
|
98533
98852
|
name: "feed",
|
|
98534
98853
|
description: "Winners across every brand you follow (browse, then trim per advertiser). Example: baker winning-ads feed --per-advertiser 5 --output md"
|
|
@@ -98607,13 +98926,13 @@ var feedCommand2 = defineCommand269({
|
|
|
98607
98926
|
`);
|
|
98608
98927
|
}
|
|
98609
98928
|
} catch (err) {
|
|
98610
|
-
|
|
98929
|
+
reportError4(err);
|
|
98611
98930
|
}
|
|
98612
98931
|
}
|
|
98613
98932
|
});
|
|
98614
98933
|
|
|
98615
98934
|
// src/commands/winning-ads/follow.ts
|
|
98616
|
-
import { defineCommand as
|
|
98935
|
+
import { defineCommand as defineCommand276 } from "citty";
|
|
98617
98936
|
var PLATFORMS = adLibraryPlatformSchema.options;
|
|
98618
98937
|
registerSchema({
|
|
98619
98938
|
command: "winning-ads.follow",
|
|
@@ -98628,7 +98947,7 @@ registerSchema({
|
|
|
98628
98947
|
label: { type: "string", description: "Optional display label (defaults to the resolved name)", required: false }
|
|
98629
98948
|
}
|
|
98630
98949
|
});
|
|
98631
|
-
var followCommand =
|
|
98950
|
+
var followCommand = defineCommand276({
|
|
98632
98951
|
meta: {
|
|
98633
98952
|
name: "follow",
|
|
98634
98953
|
description: 'Follow a brand to track ALL its ads \u2014 every platform and country. --platform is how we read your input, not a limit. A domain tracks every platform we can resolve. Example: baker winning-ads follow "deel.com" --platform meta'
|
|
@@ -98669,13 +98988,13 @@ var followCommand = defineCommand270({
|
|
|
98669
98988
|
}
|
|
98670
98989
|
writeJson({ ok: true, data, hints: hints2 });
|
|
98671
98990
|
} catch (err) {
|
|
98672
|
-
|
|
98991
|
+
reportError4(err);
|
|
98673
98992
|
}
|
|
98674
98993
|
}
|
|
98675
98994
|
});
|
|
98676
98995
|
|
|
98677
98996
|
// src/commands/winning-ads/follow-competitors.ts
|
|
98678
|
-
import { defineCommand as
|
|
98997
|
+
import { defineCommand as defineCommand277 } from "citty";
|
|
98679
98998
|
var PLATFORMS2 = adLibraryPlatformSchema.options;
|
|
98680
98999
|
var BATCH_TIMEOUT_MS = 3e5;
|
|
98681
99000
|
function buildFollowBatchBody(input) {
|
|
@@ -98708,7 +99027,7 @@ registerSchema({
|
|
|
98708
99027
|
}
|
|
98709
99028
|
}
|
|
98710
99029
|
});
|
|
98711
|
-
var followCompetitorsCommand =
|
|
99030
|
+
var followCompetitorsCommand = defineCommand277({
|
|
98712
99031
|
meta: {
|
|
98713
99032
|
name: "follow-competitors",
|
|
98714
99033
|
description: 'Follow many brands at once by domain \u2014 add every competitor in one call. Example: baker winning-ads follow-competitors "deel.com,notion.so,hubspot.com"'
|
|
@@ -98777,13 +99096,13 @@ var followCompetitorsCommand = defineCommand271({
|
|
|
98777
99096
|
}
|
|
98778
99097
|
writeJson({ ok: true, data, hints: hints2.length > 0 ? hints2 : void 0 });
|
|
98779
99098
|
} catch (err) {
|
|
98780
|
-
|
|
99099
|
+
reportError4(err);
|
|
98781
99100
|
}
|
|
98782
99101
|
}
|
|
98783
99102
|
});
|
|
98784
99103
|
|
|
98785
99104
|
// src/commands/winning-ads/following.ts
|
|
98786
|
-
import { defineCommand as
|
|
99105
|
+
import { defineCommand as defineCommand278 } from "citty";
|
|
98787
99106
|
registerSchema({
|
|
98788
99107
|
command: "winning-ads.following",
|
|
98789
99108
|
description: "List the brands you follow in your ad-dna library, with each one's status (ready vs still adding) and cached ad counts. A brand still adding has counts that are a lie in progress; one with `discovery_failed` has counts that are short because we couldn't finish looking, which is not the same as it running no ads.",
|
|
@@ -98837,7 +99156,7 @@ function followingNormalizer(record, full) {
|
|
|
98837
99156
|
platforms: Array.isArray(record.platforms) ? record.platforms : []
|
|
98838
99157
|
};
|
|
98839
99158
|
}
|
|
98840
|
-
var followingCommand =
|
|
99159
|
+
var followingCommand = defineCommand278({
|
|
98841
99160
|
meta: {
|
|
98842
99161
|
name: "following",
|
|
98843
99162
|
description: "List brands you follow, with status (ready / adding\u2026) and cached counts. A brand's counts are only final once it is ready. Example: baker winning-ads following --output md"
|
|
@@ -98867,13 +99186,13 @@ var followingCommand = defineCommand272({
|
|
|
98867
99186
|
followingNormalizer
|
|
98868
99187
|
);
|
|
98869
99188
|
} catch (err) {
|
|
98870
|
-
|
|
99189
|
+
reportError4(err);
|
|
98871
99190
|
}
|
|
98872
99191
|
}
|
|
98873
99192
|
});
|
|
98874
99193
|
|
|
98875
99194
|
// src/commands/winning-ads/search.ts
|
|
98876
|
-
import { defineCommand as
|
|
99195
|
+
import { defineCommand as defineCommand279 } from "citty";
|
|
98877
99196
|
registerSchema({
|
|
98878
99197
|
command: "winning-ads.search",
|
|
98879
99198
|
description: "Search the ad-dna corpus of scored winning ads, the company's followed brands first. Returns a lean shortlist (advertiser, summary, scores, days_active/active/winner_category as proof, media_url, and visual/container/mechanism when known) to pick a reference to reproduce. Each search is a paid reranker + judge call: one strong search, at most one adjusted retry. A value outside a closed list (--platform, --format, --winner-category, --awareness, --format-pattern, --sort) is refused with error.fix.validValues.",
|
|
@@ -99059,7 +99378,7 @@ function reportSearchError(err) {
|
|
|
99059
99378
|
writeJson({ ok: false, error: { code: err.code, message: err.message, fix } });
|
|
99060
99379
|
process.exit(1);
|
|
99061
99380
|
}
|
|
99062
|
-
|
|
99381
|
+
reportError4(err);
|
|
99063
99382
|
}
|
|
99064
99383
|
var FLAG_FOR_FIELD = {
|
|
99065
99384
|
limit: "--limit",
|
|
@@ -99073,8 +99392,8 @@ var FLAG_FOR_FIELD = {
|
|
|
99073
99392
|
first_seen_after: "--first-seen-after",
|
|
99074
99393
|
first_seen_before: "--first-seen-before"
|
|
99075
99394
|
};
|
|
99076
|
-
function flagFor(
|
|
99077
|
-
const field = String(
|
|
99395
|
+
function flagFor(path58) {
|
|
99396
|
+
const field = String(path58[0] === "hard_filters" ? path58[1] : path58[0]);
|
|
99078
99397
|
return FLAG_FOR_FIELD[field] ?? field;
|
|
99079
99398
|
}
|
|
99080
99399
|
function schemaRejection(body) {
|
|
@@ -99151,7 +99470,7 @@ function writeSearchResult(data, opts) {
|
|
|
99151
99470
|
writeOutput({ ok: true, data: rawResults, ...withHints2 }, opts.output, opts.fields, opts.full, winningAdNormalizer);
|
|
99152
99471
|
}
|
|
99153
99472
|
var SEARCH_TIMEOUT_MS = 12e4;
|
|
99154
|
-
var searchCommand5 =
|
|
99473
|
+
var searchCommand5 = defineCommand279({
|
|
99155
99474
|
meta: {
|
|
99156
99475
|
name: "search",
|
|
99157
99476
|
description: "Search winning reference ads, the company's followed brands first. Start here: baker winning-ads search 'B2B SaaS before/after AI automation' --platform meta --format static --exclude-advertiser adv_123 --output md. A set of references for N concepts in one call: add --diverse --limit N. The best proven ad in one container from any category: --format-pattern comparison_table (no query needed; add --sort longest_running to order by staying power). Each search is a paid reranker + judge call: one strong search, at most one adjusted retry."
|
|
@@ -99277,7 +99596,7 @@ var searchCommand5 = defineCommand273({
|
|
|
99277
99596
|
});
|
|
99278
99597
|
|
|
99279
99598
|
// src/commands/winning-ads/seeds.ts
|
|
99280
|
-
import { defineCommand as
|
|
99599
|
+
import { defineCommand as defineCommand280 } from "citty";
|
|
99281
99600
|
function leanRow(r) {
|
|
99282
99601
|
return {
|
|
99283
99602
|
key: r.key,
|
|
@@ -99305,7 +99624,7 @@ function makeSeedCommand(opts) {
|
|
|
99305
99624
|
limit: { type: "number", description: "Max keys 1-100 (default 20)", required: false, default: 20 }
|
|
99306
99625
|
}
|
|
99307
99626
|
});
|
|
99308
|
-
return
|
|
99627
|
+
return defineCommand280({
|
|
99309
99628
|
meta: { name: opts.name, description: opts.description },
|
|
99310
99629
|
args: {
|
|
99311
99630
|
platform: { type: "string", description: "Single platform to segment on", required: false },
|
|
@@ -99332,7 +99651,7 @@ function makeSeedCommand(opts) {
|
|
|
99332
99651
|
}
|
|
99333
99652
|
writeOutput({ ok: true, data: projected }, output);
|
|
99334
99653
|
} catch (err) {
|
|
99335
|
-
|
|
99654
|
+
reportError4(err);
|
|
99336
99655
|
}
|
|
99337
99656
|
}
|
|
99338
99657
|
});
|
|
@@ -99354,7 +99673,7 @@ var formatsCommand = makeSeedCommand({
|
|
|
99354
99673
|
});
|
|
99355
99674
|
|
|
99356
99675
|
// src/commands/winning-ads/unfollow.ts
|
|
99357
|
-
import { defineCommand as
|
|
99676
|
+
import { defineCommand as defineCommand281 } from "citty";
|
|
99358
99677
|
registerSchema({
|
|
99359
99678
|
command: "winning-ads.unfollow",
|
|
99360
99679
|
description: "Stop following a brand \u2014 removes it from your ad-dna library by advertiser id.",
|
|
@@ -99362,7 +99681,7 @@ registerSchema({
|
|
|
99362
99681
|
advertiser: { type: "string", description: "Advertiser id to unfollow", required: true }
|
|
99363
99682
|
}
|
|
99364
99683
|
});
|
|
99365
|
-
var unfollowCommand =
|
|
99684
|
+
var unfollowCommand = defineCommand281({
|
|
99366
99685
|
meta: {
|
|
99367
99686
|
name: "unfollow",
|
|
99368
99687
|
description: "Stop following a brand by advertiser id. Example: baker winning-ads unfollow adv_123"
|
|
@@ -99377,13 +99696,13 @@ var unfollowCommand = defineCommand275({
|
|
|
99377
99696
|
});
|
|
99378
99697
|
writeJson({ ok: true, data });
|
|
99379
99698
|
} catch (err) {
|
|
99380
|
-
|
|
99699
|
+
reportError4(err);
|
|
99381
99700
|
}
|
|
99382
99701
|
}
|
|
99383
99702
|
});
|
|
99384
99703
|
|
|
99385
99704
|
// src/commands/winning-ads/winners.ts
|
|
99386
|
-
import { defineCommand as
|
|
99705
|
+
import { defineCommand as defineCommand282 } from "citty";
|
|
99387
99706
|
registerSchema({
|
|
99388
99707
|
command: "winning-ads.winners",
|
|
99389
99708
|
description: "Top winning ads for one advertiser id (from `advertisers` or `following`). Returns lean winner cards; add --full for DNA + longevity.",
|
|
@@ -99393,7 +99712,7 @@ registerSchema({
|
|
|
99393
99712
|
platform: { type: "string", description: "Filter to a single platform: meta|linkedin|tiktok", required: false }
|
|
99394
99713
|
}
|
|
99395
99714
|
});
|
|
99396
|
-
var winnersCommand =
|
|
99715
|
+
var winnersCommand = defineCommand282({
|
|
99397
99716
|
meta: {
|
|
99398
99717
|
name: "winners",
|
|
99399
99718
|
description: "Top winning ads for a specific advertiser id. Example: baker winning-ads winners adv_123 --top 15 --output md"
|
|
@@ -99437,13 +99756,13 @@ var winnersCommand = defineCommand276({
|
|
|
99437
99756
|
winningAdNormalizer
|
|
99438
99757
|
);
|
|
99439
99758
|
} catch (err) {
|
|
99440
|
-
|
|
99759
|
+
reportError4(err);
|
|
99441
99760
|
}
|
|
99442
99761
|
}
|
|
99443
99762
|
});
|
|
99444
99763
|
|
|
99445
99764
|
// src/commands/winning-ads/index.ts
|
|
99446
|
-
var winningAdsCommand =
|
|
99765
|
+
var winningAdsCommand = defineCommand283({
|
|
99447
99766
|
meta: {
|
|
99448
99767
|
name: "winning-ads",
|
|
99449
99768
|
description: `Search the ad-dna corpus of scored "winning" ads for reference creatives to reproduce, and manage the brands your library tracks. Proxied through the Baker backend (BAKER_API_KEY) \u2014 no separate token needed.
|
|
@@ -99511,7 +99830,7 @@ function getCliVersion() {
|
|
|
99511
99830
|
}
|
|
99512
99831
|
|
|
99513
99832
|
// src/cli.ts
|
|
99514
|
-
var main =
|
|
99833
|
+
var main = defineCommand284({
|
|
99515
99834
|
meta: {
|
|
99516
99835
|
name: "baker",
|
|
99517
99836
|
version: getCliVersion(),
|