create-twenty-app 2.25.0 → 2.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs
CHANGED
|
@@ -30,7 +30,7 @@ var b = Object.create, x = Object.defineProperty, S = Object.getOwnPropertyDescr
|
|
|
30
30
|
enumerable: !0
|
|
31
31
|
}) : n, e)), re = {
|
|
32
32
|
name: "create-twenty-app",
|
|
33
|
-
version: "2.
|
|
33
|
+
version: "2.27.0",
|
|
34
34
|
description: "Command-line interface to create Twenty application",
|
|
35
35
|
main: "dist/cli.cjs",
|
|
36
36
|
bin: "dist/cli.cjs",
|
|
@@ -52,7 +52,7 @@ var b = Object.create, x = Object.defineProperty, S = Object.getOwnPropertyDescr
|
|
|
52
52
|
import: "./dist/cli.mjs",
|
|
53
53
|
require: "./dist/cli.cjs"
|
|
54
54
|
} },
|
|
55
|
-
license: "
|
|
55
|
+
license: "MIT",
|
|
56
56
|
dependencies: {
|
|
57
57
|
chalk: "^5.3.0",
|
|
58
58
|
commander: "^12.0.0",
|
|
@@ -12836,7 +12836,7 @@ function cp(e) {
|
|
|
12836
12836
|
return e != null;
|
|
12837
12837
|
}
|
|
12838
12838
|
//#endregion
|
|
12839
|
-
//#region ../twenty-shared/dist/types-
|
|
12839
|
+
//#region ../twenty-shared/dist/types-Cw_53d6H.mjs
|
|
12840
12840
|
var lp = /* @__PURE__ */ function(e) {
|
|
12841
12841
|
return e.EMAIL = "EMAIL", e.CALENDAR = "CALENDAR", e.WORKFLOW = "WORKFLOW", e.AGENT = "AGENT", e.API = "API", e.IMPORT = "IMPORT", e.MANUAL = "MANUAL", e.SYSTEM = "SYSTEM", e.WEBHOOK = "WEBHOOK", e.APPLICATION = "APPLICATION", e;
|
|
12842
12842
|
}({}), up = {
|
|
@@ -13287,6 +13287,7 @@ var vp = /* @__PURE__ */ function(e) {
|
|
|
13287
13287
|
DEVELOPERS_EXTEND_APPS_LAYOUT_OVERVIEW: "/developers/extend/apps/layout/overview",
|
|
13288
13288
|
DEVELOPERS_EXTEND_APPS_LAYOUT_PAGE_LAYOUTS: "/developers/extend/apps/layout/page-layouts",
|
|
13289
13289
|
DEVELOPERS_EXTEND_APPS_LAYOUT_VIEWS: "/developers/extend/apps/layout/views",
|
|
13290
|
+
DEVELOPERS_EXTEND_APPS_LOGIC_BACKGROUND_JOBS: "/developers/extend/apps/logic/background-jobs",
|
|
13290
13291
|
DEVELOPERS_EXTEND_APPS_LOGIC_CONNECTIONS: "/developers/extend/apps/logic/connections",
|
|
13291
13292
|
DEVELOPERS_EXTEND_APPS_LOGIC_KEY_VALUE_STORE: "/developers/extend/apps/logic/key-value-store",
|
|
13292
13293
|
DEVELOPERS_EXTEND_APPS_LOGIC_LOGIC_FUNCTIONS: "/developers/extend/apps/logic/logic-functions",
|
|
@@ -13436,14 +13437,14 @@ var vp = /* @__PURE__ */ function(e) {
|
|
|
13436
13437
|
A.RAW_JSON,
|
|
13437
13438
|
A.FILES,
|
|
13438
13439
|
A.POSITION
|
|
13439
|
-
]), new Set([
|
|
13440
|
+
]), A.ACTOR, A.ADDRESS, A.ARRAY, A.BOOLEAN, A.CURRENCY, A.DATE, A.DATE_TIME, A.EMAILS, A.FILES, A.FULL_NAME, A.LINKS, A.MORPH_RELATION, A.MULTI_SELECT, A.NUMBER, A.NUMERIC, A.PHONES, A.POSITION, A.RATING, A.RAW_JSON, A.RELATION, A.RICH_TEXT, A.SELECT, A.TEXT, A.TS_VECTOR, A.UUID, new Set([
|
|
13440
13441
|
A.TS_VECTOR,
|
|
13441
13442
|
A.ARRAY,
|
|
13442
13443
|
A.MULTI_SELECT,
|
|
13443
13444
|
A.RAW_JSON
|
|
13444
13445
|
]), yp.DAY, yp.WEEK, yp.MONTH, yp.QUARTER, yp.YEAR, A.FILES, A.LINKS, A.TEXT, A.FULL_NAME, A.UUID;
|
|
13445
13446
|
//#endregion
|
|
13446
|
-
//#region ../twenty-shared/dist/constants-
|
|
13447
|
+
//#region ../twenty-shared/dist/constants-Cjh8QmJf.mjs
|
|
13447
13448
|
var Tp = [
|
|
13448
13449
|
"RATING_1",
|
|
13449
13450
|
"RATING_2",
|
|
@@ -60754,7 +60755,7 @@ function jk() {
|
|
|
60754
60755
|
}
|
|
60755
60756
|
bD();
|
|
60756
60757
|
//#endregion
|
|
60757
|
-
//#region ../twenty-shared/dist/utils-
|
|
60758
|
+
//#region ../twenty-shared/dist/utils-ClVhjZ_j.mjs
|
|
60758
60759
|
var Mk = /* @__PURE__ */ ne(sO(), 1);
|
|
60759
60760
|
cO(), ek(), ak(), A.TEXT, A.FULL_NAME, A.EMAILS, A.ADDRESS, A.LINKS, A.PHONES, A.RICH_TEXT, A.UUID;
|
|
60760
60761
|
var Nk = (e) => /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e);
|
|
@@ -62469,10 +62470,10 @@ var kj = [Y.IS_EMPTY, Y.IS_NOT_EMPTY], Aj = [Y.IS, Y.IS_NOT];
|
|
|
62469
62470
|
Y.IS_NOT,
|
|
62470
62471
|
...kj
|
|
62471
62472
|
], Y.IS, Y.IS_NOT, Y.IS_EMPTY, Y.IS_NOT_EMPTY;
|
|
62472
|
-
var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().transform((e) => e === "" ? [] :
|
|
62473
|
+
var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().transform((e) => e === "" ? [] : pM(e) ? [e] : JSON.parse(e)).refine((e) => Array.isArray(e) && e.every((e) => typeof e == "string"), { error: "Expected an array of strings" }), Nj = zf((e) => {
|
|
62473
62474
|
try {
|
|
62474
62475
|
if (typeof e == "string") {
|
|
62475
|
-
if (
|
|
62476
|
+
if (pM(e)) return [e];
|
|
62476
62477
|
try {
|
|
62477
62478
|
let t = JSON.parse(e);
|
|
62478
62479
|
return Array.isArray(t) ? t : [t];
|
|
@@ -62484,7 +62485,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62484
62485
|
} catch {
|
|
62485
62486
|
return [];
|
|
62486
62487
|
}
|
|
62487
|
-
}, Cd($l().refine((e) => Nk(e) ||
|
|
62488
|
+
}, Cd($l().refine((e) => Nk(e) || pM(e), "Must be a valid UUID or a variable with {{ }} syntax"))).catch([]), Pj = Ed({
|
|
62488
62489
|
isCurrentWorkspaceMemberSelected: q().optional(),
|
|
62489
62490
|
isCurrentRecordSelected: q().optional(),
|
|
62490
62491
|
selectedRecordIds: Cd($l())
|
|
@@ -62497,13 +62498,13 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62497
62498
|
message: e.message
|
|
62498
62499
|
}), Se;
|
|
62499
62500
|
}
|
|
62500
|
-
}).pipe(Pj), Ij = ({ recordFilter: e, fieldMetadataItemById: t, filterValueDependencies: n }) => {
|
|
62501
|
+
}).pipe(Pj), Ij = /(?!^)\+|[^0-9+]/g, Lj = /[0-9]/, Rj = ({ recordFilter: e, fieldMetadataItemById: t, filterValueDependencies: n }) => {
|
|
62501
62502
|
let r = t.get(e.fieldMetadataId);
|
|
62502
62503
|
if (k(r) && Sj(e)) {
|
|
62503
62504
|
if (r.type === A.RELATION && k(e.relationTargetFieldMetadataId)) {
|
|
62504
62505
|
let i = t.get(e.relationTargetFieldMetadataId);
|
|
62505
62506
|
if (!k(i)) return;
|
|
62506
|
-
let a =
|
|
62507
|
+
let a = Bj({
|
|
62507
62508
|
recordFilter: {
|
|
62508
62509
|
...e,
|
|
62509
62510
|
fieldMetadataId: i.id,
|
|
@@ -62514,13 +62515,13 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62514
62515
|
});
|
|
62515
62516
|
return k(a) ? { [r.name]: a } : void 0;
|
|
62516
62517
|
}
|
|
62517
|
-
return
|
|
62518
|
+
return Bj({
|
|
62518
62519
|
recordFilter: e,
|
|
62519
62520
|
fieldMetadataItem: r,
|
|
62520
62521
|
filterValueDependencies: n
|
|
62521
62522
|
});
|
|
62522
62523
|
}
|
|
62523
|
-
},
|
|
62524
|
+
}, zj = ({ fieldMetadataItem: e, filterValueDependencies: t }) => {
|
|
62524
62525
|
if (e.type !== A.MORPH_RELATION) return fj({ name: e.name });
|
|
62525
62526
|
let n = e.morphRelations?.find((e) => e.targetObjectMetadata.nameSingular === t.currentRecord?.objectMetadataNameSingular);
|
|
62526
62527
|
if (k(n)) return pj({
|
|
@@ -62529,7 +62530,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62529
62530
|
targetObjectMetadataNameSingular: n.targetObjectMetadata.nameSingular,
|
|
62530
62531
|
targetObjectMetadataNamePlural: n.targetObjectMetadata.namePlural
|
|
62531
62532
|
});
|
|
62532
|
-
},
|
|
62533
|
+
}, Bj = ({ recordFilter: e, fieldMetadataItem: t, filterValueDependencies: n }) => {
|
|
62533
62534
|
if (gj({
|
|
62534
62535
|
recordFilterOperand: e.operand,
|
|
62535
62536
|
correspondingFieldMetadataItem: t
|
|
@@ -62561,7 +62562,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62561
62562
|
}
|
|
62562
62563
|
case "DATE":
|
|
62563
62564
|
if (e.operand === Y.IS_RELATIVE) {
|
|
62564
|
-
let n =
|
|
62565
|
+
let n = tM(e.value), r = nM({
|
|
62565
62566
|
value: "PAST_1_DAY",
|
|
62566
62567
|
operand: Y.IS_RELATIVE
|
|
62567
62568
|
});
|
|
@@ -62587,9 +62588,9 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62587
62588
|
throw Error(`Unknown operand ${e.operand} for ${a} filter`);
|
|
62588
62589
|
case "DATE_TIME":
|
|
62589
62590
|
if (e.operand === Y.IS_RELATIVE) {
|
|
62590
|
-
let r =
|
|
62591
|
+
let r = aM(e), i = k(r) && typeof r == "object" ? r : null;
|
|
62591
62592
|
if (!k(i)) throw Error(`Cannot parse relative date filter : "${e.value}"`);
|
|
62592
|
-
let a =
|
|
62593
|
+
let a = aM({
|
|
62593
62594
|
value: `PAST_1_DAY;;${n.timeZone}`,
|
|
62594
62595
|
operand: Y.IS_RELATIVE
|
|
62595
62596
|
});
|
|
@@ -62602,7 +62603,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62602
62603
|
switch (e.operand) {
|
|
62603
62604
|
case Y.IS_IN_PAST: return { [t.name]: { lt: r.toInstant().round("minute").toString() } };
|
|
62604
62605
|
case Y.IS_IN_FUTURE: return { [t.name]: { gt: r.toInstant().round("minute").toString() } };
|
|
62605
|
-
case Y.IS_TODAY: return { and: [{ [t.name]: { gte:
|
|
62606
|
+
case Y.IS_TODAY: return { and: [{ [t.name]: { gte: Gj(r, "DAY").toInstant().toString() } }, { [t.name]: { lt: Kj(r, "DAY").toInstant().toString() } }] };
|
|
62606
62607
|
}
|
|
62607
62608
|
} else {
|
|
62608
62609
|
if (!(0, xe.isNonEmptyString)(e.value)) throw Error("Date filter is empty");
|
|
@@ -62648,7 +62649,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62648
62649
|
...i ? [n.currentRecord?.id] : []
|
|
62649
62650
|
].filter(k);
|
|
62650
62651
|
if (s.length === 0) return;
|
|
62651
|
-
let c =
|
|
62652
|
+
let c = zj({
|
|
62652
62653
|
fieldMetadataItem: t,
|
|
62653
62654
|
filterValueDependencies: n
|
|
62654
62655
|
});
|
|
@@ -62798,8 +62799,8 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62798
62799
|
});
|
|
62799
62800
|
case "PHONES": {
|
|
62800
62801
|
if (!i) {
|
|
62801
|
-
let n = e.value.replace(
|
|
62802
|
-
if (!
|
|
62802
|
+
let n = e.value.trim().replace(Ij, "");
|
|
62803
|
+
if (!Lj.test(n)) return;
|
|
62803
62804
|
switch (e.operand) {
|
|
62804
62805
|
case Y.CONTAINS: return { or: [
|
|
62805
62806
|
{ [t.name]: { primaryPhoneNumber: { ilike: `%${n}%` } } },
|
|
@@ -62845,14 +62846,14 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62845
62846
|
}
|
|
62846
62847
|
default: throw Error("Unknown filter type");
|
|
62847
62848
|
}
|
|
62848
|
-
},
|
|
62849
|
+
}, Vj = ({ filterValueDependencies: e, filters: t, fieldMetadataItemById: n, recordFilterGroups: r, currentRecordFilterGroupId: i }) => {
|
|
62849
62850
|
let a = r.find((e) => e.id === i);
|
|
62850
62851
|
if (!k(a)) return;
|
|
62851
|
-
let o = t.filter((e) => e.recordFilterGroupId === i).map((t) =>
|
|
62852
|
+
let o = t.filter((e) => e.recordFilterGroupId === i).map((t) => Rj({
|
|
62852
62853
|
filterValueDependencies: e,
|
|
62853
62854
|
recordFilter: t,
|
|
62854
62855
|
fieldMetadataItemById: n
|
|
62855
|
-
})).filter(k), s = r.filter((e) => e.parentRecordFilterGroupId === i).map((i) =>
|
|
62856
|
+
})).filter(k), s = r.filter((e) => e.parentRecordFilterGroupId === i).map((i) => Vj({
|
|
62856
62857
|
filterValueDependencies: e,
|
|
62857
62858
|
filters: t,
|
|
62858
62859
|
fieldMetadataItemById: n,
|
|
@@ -62862,7 +62863,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62862
62863
|
if (a.logicalOperator === bp.AND) return { and: [...o, ...s] };
|
|
62863
62864
|
if (a.logicalOperator === bp.OR) return { or: [...o, ...s] };
|
|
62864
62865
|
throw Error(`Unknown logical operator ${a.logicalOperator}`);
|
|
62865
|
-
},
|
|
62866
|
+
}, Hj = (e, t, n) => {
|
|
62866
62867
|
switch (t) {
|
|
62867
62868
|
case "DAY": return e.add({ days: n });
|
|
62868
62869
|
case "WEEK": return e.add({ weeks: n });
|
|
@@ -62874,22 +62875,22 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62874
62875
|
case "HOUR": return e.add({ hours: n });
|
|
62875
62876
|
default: return Pk(t);
|
|
62876
62877
|
}
|
|
62877
|
-
},
|
|
62878
|
+
}, Uj = Zf.enum([
|
|
62878
62879
|
vp.MONDAY,
|
|
62879
62880
|
vp.SATURDAY,
|
|
62880
62881
|
vp.SUNDAY
|
|
62881
|
-
]),
|
|
62882
|
+
]), Wj = (e) => {
|
|
62882
62883
|
switch (e) {
|
|
62883
62884
|
case vp.MONDAY: return 1;
|
|
62884
62885
|
case vp.SATURDAY: return 6;
|
|
62885
62886
|
case vp.SUNDAY: return 7;
|
|
62886
62887
|
default: return Pk(e);
|
|
62887
62888
|
}
|
|
62888
|
-
},
|
|
62889
|
+
}, Gj = (e, t, n) => {
|
|
62889
62890
|
switch (t) {
|
|
62890
62891
|
case "DAY": return e.startOfDay();
|
|
62891
62892
|
case "WEEK": {
|
|
62892
|
-
let t = k(n) ?
|
|
62893
|
+
let t = k(n) ? Wj(n) : 1, r = (e.dayOfWeek - t + 7) % 7;
|
|
62893
62894
|
return e.startOfDay().subtract({ days: r });
|
|
62894
62895
|
}
|
|
62895
62896
|
case "QUARTER": {
|
|
@@ -62924,23 +62925,23 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62924
62925
|
});
|
|
62925
62926
|
default: return Pk(t);
|
|
62926
62927
|
}
|
|
62927
|
-
},
|
|
62928
|
+
}, Kj = (e, t, n) => {
|
|
62928
62929
|
switch (t) {
|
|
62929
|
-
case "DAY": return
|
|
62930
|
-
case "WEEK": return
|
|
62931
|
-
case "MONTH": return
|
|
62932
|
-
case "QUARTER": return
|
|
62933
|
-
case "YEAR": return
|
|
62934
|
-
case "SECOND": return
|
|
62935
|
-
case "MINUTE": return
|
|
62936
|
-
case "HOUR": return
|
|
62930
|
+
case "DAY": return Gj(e, "DAY").add({ days: 1 });
|
|
62931
|
+
case "WEEK": return Gj(e, "WEEK", n).add({ weeks: 1 });
|
|
62932
|
+
case "MONTH": return Gj(e, "MONTH", n).add({ months: 1 });
|
|
62933
|
+
case "QUARTER": return Gj(e, "QUARTER", n).add({ months: 3 });
|
|
62934
|
+
case "YEAR": return Gj(e, "YEAR", n).add({ years: 1 });
|
|
62935
|
+
case "SECOND": return Gj(e, "SECOND").add({ seconds: 1 });
|
|
62936
|
+
case "MINUTE": return Gj(e, "MINUTE").add({ minutes: 1 });
|
|
62937
|
+
case "HOUR": return Gj(e, "HOUR").add({ hours: 1 });
|
|
62937
62938
|
default: return Pk(t);
|
|
62938
62939
|
}
|
|
62939
|
-
},
|
|
62940
|
+
}, qj = Zf.union([Zf.coerce.number().int().positive(), Zf.literal("undefined")]).transform((e) => e === "undefined" ? void 0 : e), Jj = Zf.enum([
|
|
62940
62941
|
"NEXT",
|
|
62941
62942
|
"THIS",
|
|
62942
62943
|
"PAST"
|
|
62943
|
-
]),
|
|
62944
|
+
]), Yj = Zf.enum([
|
|
62944
62945
|
"SECOND",
|
|
62945
62946
|
"MINUTE",
|
|
62946
62947
|
"HOUR",
|
|
@@ -62949,24 +62950,24 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62949
62950
|
"MONTH",
|
|
62950
62951
|
"QUARTER",
|
|
62951
62952
|
"YEAR"
|
|
62952
|
-
]),
|
|
62953
|
-
direction:
|
|
62954
|
-
amount:
|
|
62955
|
-
unit:
|
|
62953
|
+
]), Xj = Zf.object({
|
|
62954
|
+
direction: Jj,
|
|
62955
|
+
amount: qj.nullish(),
|
|
62956
|
+
unit: Yj,
|
|
62956
62957
|
timezone: Zf.string().nullish(),
|
|
62957
|
-
firstDayOfTheWeek:
|
|
62958
|
-
}).refine((e) => !(e.amount === void 0 && e.direction !== "THIS"), { error: "Amount cannot be 'undefined' unless direction is 'THIS'" }),
|
|
62959
|
-
let n = new RegExp(
|
|
62958
|
+
firstDayOfTheWeek: Uj.nullish()
|
|
62959
|
+
}).refine((e) => !(e.amount === void 0 && e.direction !== "THIS"), { error: "Amount cannot be 'undefined' unless direction is 'THIS'" }), Zj = /((?:THIS)|(?:PAST)|(?:NEXT))_(\d*)_(DAY|MONTH|YEAR|WEEK|QUARTER|HOUR|MINUTE|SECOND)(?:(?:;;([^;;]*);;)?(?:(MONDAY|SUNDAY|SATURDAY);;)?)?/, Qj = Zf.string().transform((e, t) => {
|
|
62960
|
+
let n = new RegExp(Zj).exec(e);
|
|
62960
62961
|
if (!(0, xe.isNonEmptyArray)(n)) return t.addIssue(`Cannot parse stringified inline relative date filter, value : "${e}"`), Zf.NEVER;
|
|
62961
62962
|
let [r, i, a, o, s, c] = n;
|
|
62962
|
-
return
|
|
62963
|
+
return Xj.parse({
|
|
62963
62964
|
direction: i,
|
|
62964
62965
|
amount: a,
|
|
62965
62966
|
unit: o,
|
|
62966
62967
|
timezone: s,
|
|
62967
62968
|
firstDayOfTheWeek: c
|
|
62968
62969
|
});
|
|
62969
|
-
}),
|
|
62970
|
+
}), $j = (e, t, n) => {
|
|
62970
62971
|
switch (t) {
|
|
62971
62972
|
case "DAY": return e.subtract({ days: n });
|
|
62972
62973
|
case "WEEK": return e.subtract({ weeks: n });
|
|
@@ -62978,12 +62979,12 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62978
62979
|
case "HOUR": return e.subtract({ hours: n });
|
|
62979
62980
|
default: return Pk(t);
|
|
62980
62981
|
}
|
|
62981
|
-
},
|
|
62982
|
+
}, eM = (e, t) => {
|
|
62982
62983
|
let { direction: n, amount: r, unit: i, firstDayOfTheWeek: a } = e;
|
|
62983
62984
|
switch (n) {
|
|
62984
62985
|
case "NEXT": {
|
|
62985
62986
|
if (!cp(r)) throw Error("Amount is required");
|
|
62986
|
-
let n =
|
|
62987
|
+
let n = Kj(t, i, a), o = Hj(n, i, r);
|
|
62987
62988
|
return {
|
|
62988
62989
|
...e,
|
|
62989
62990
|
start: n.toPlainDate().toString(),
|
|
@@ -62992,7 +62993,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
62992
62993
|
}
|
|
62993
62994
|
case "PAST": {
|
|
62994
62995
|
if (!cp(r)) throw Error("Amount is required");
|
|
62995
|
-
let n =
|
|
62996
|
+
let n = Gj(t, i, a), o = $j(n, i, r);
|
|
62996
62997
|
return {
|
|
62997
62998
|
...e,
|
|
62998
62999
|
start: o.toPlainDate().toString(),
|
|
@@ -63000,7 +63001,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
63000
63001
|
};
|
|
63001
63002
|
}
|
|
63002
63003
|
case "THIS": {
|
|
63003
|
-
let n =
|
|
63004
|
+
let n = Gj(t, i, a), r = Kj(t, i, a), o = n?.toPlainDate().toString(), s = r?.toPlainDate().toString();
|
|
63004
63005
|
return {
|
|
63005
63006
|
...e,
|
|
63006
63007
|
start: o,
|
|
@@ -63008,62 +63009,62 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
|
|
|
63008
63009
|
};
|
|
63009
63010
|
}
|
|
63010
63011
|
}
|
|
63011
|
-
},
|
|
63012
|
+
}, tM = (e) => {
|
|
63012
63013
|
if (!(0, xe.isNonEmptyString)(e)) return null;
|
|
63013
|
-
let t =
|
|
63014
|
+
let t = Qj.safeParse(e);
|
|
63014
63015
|
if (!t.success) return null;
|
|
63015
63016
|
let n = t.data;
|
|
63016
|
-
return
|
|
63017
|
-
},
|
|
63017
|
+
return eM(n, cp(n.timezone) ? _D.Now.zonedDateTimeISO(n.timezone) : _D.Now.zonedDateTimeISO());
|
|
63018
|
+
}, nM = (e) => e.value ? e.operand === Y.IS_RELATIVE ? tM(e.value) : e.value : null, rM = (e, t) => {
|
|
63018
63019
|
let { direction: n, amount: r, unit: i, firstDayOfTheWeek: a } = e;
|
|
63019
63020
|
switch (n) {
|
|
63020
63021
|
case "NEXT": {
|
|
63021
63022
|
if (!k(r)) throw Error("Amount is required");
|
|
63022
|
-
let n =
|
|
63023
|
+
let n = Kj(t, i, a);
|
|
63023
63024
|
return {
|
|
63024
63025
|
...e,
|
|
63025
63026
|
start: n,
|
|
63026
|
-
end:
|
|
63027
|
+
end: Hj(n, i, r)
|
|
63027
63028
|
};
|
|
63028
63029
|
}
|
|
63029
63030
|
case "PAST": {
|
|
63030
63031
|
if (!k(r)) throw Error("Amount is required");
|
|
63031
|
-
let n =
|
|
63032
|
+
let n = Gj(t, i, a);
|
|
63032
63033
|
return {
|
|
63033
63034
|
...e,
|
|
63034
|
-
start:
|
|
63035
|
+
start: $j(n, i, r),
|
|
63035
63036
|
end: n
|
|
63036
63037
|
};
|
|
63037
63038
|
}
|
|
63038
63039
|
case "THIS": return {
|
|
63039
63040
|
...e,
|
|
63040
|
-
start:
|
|
63041
|
-
end:
|
|
63041
|
+
start: Gj(t, i, a),
|
|
63042
|
+
end: Kj(t, i, a)
|
|
63042
63043
|
};
|
|
63043
63044
|
}
|
|
63044
|
-
},
|
|
63045
|
+
}, iM = (e) => {
|
|
63045
63046
|
if (!(0, xe.isNonEmptyString)(e)) return null;
|
|
63046
|
-
let t =
|
|
63047
|
+
let t = Qj.safeParse(e);
|
|
63047
63048
|
if (t.success) {
|
|
63048
63049
|
let e = t.data;
|
|
63049
|
-
return
|
|
63050
|
+
return rM(e, (cp(e.timezone) ? _D.Now.zonedDateTimeISO(e.timezone) : _D.Now.zonedDateTimeISO()).round({ smallestUnit: "second" }));
|
|
63050
63051
|
} else return null;
|
|
63051
|
-
},
|
|
63052
|
+
}, aM = (e) => e.value ? e.operand === Y.IS_RELATIVE ? iM(e.value) : e.value : null;
|
|
63052
63053
|
xp.Is, Y.IS, xp.IsNotNull, Y.IS_NOT_NULL, xp.IsNot, Y.IS_NOT, xp.LessThanOrEqual, Y.LESS_THAN_OR_EQUAL, xp.GreaterThanOrEqual, Y.GREATER_THAN_OR_EQUAL, xp.IsBefore, Y.IS_BEFORE, xp.IsAfter, Y.IS_AFTER, xp.Contains, Y.CONTAINS, xp.DoesNotContain, Y.DOES_NOT_CONTAIN, xp.IsEmpty, Y.IS_EMPTY, xp.IsNotEmpty, Y.IS_NOT_EMPTY, xp.IsRelative, Y.IS_RELATIVE, xp.IsInPast, Y.IS_IN_PAST, xp.IsInFuture, Y.IS_IN_FUTURE, xp.IsToday, Y.IS_TODAY, Y.IS, Y.IS, Y.IS_NOT_NULL, Y.IS_NOT_NULL, Y.IS_NOT, Y.IS_NOT, Y.LESS_THAN_OR_EQUAL, Y.LESS_THAN_OR_EQUAL, Y.GREATER_THAN_OR_EQUAL, Y.GREATER_THAN_OR_EQUAL, Y.IS_BEFORE, Y.IS_BEFORE, Y.IS_AFTER, Y.IS_AFTER, Y.CONTAINS, Y.CONTAINS, Y.DOES_NOT_CONTAIN, Y.DOES_NOT_CONTAIN, Y.IS_EMPTY, Y.IS_EMPTY, Y.IS_NOT_EMPTY, Y.IS_NOT_EMPTY, Y.IS_RELATIVE, Y.IS_RELATIVE, Y.IS_IN_PAST, Y.IS_IN_PAST, Y.IS_IN_FUTURE, Y.IS_IN_FUTURE, Y.IS_TODAY, Y.IS_TODAY, Y.VECTOR_SEARCH, Y.VECTOR_SEARCH;
|
|
63053
|
-
var
|
|
63054
|
+
var oM = (e) => {
|
|
63054
63055
|
try {
|
|
63055
63056
|
return new URL(e);
|
|
63056
63057
|
} catch {
|
|
63057
63058
|
return null;
|
|
63058
63059
|
}
|
|
63059
|
-
},
|
|
63060
|
+
}, sM = (e) => e === void 0 || typeof e != "object" || !e ? e : Array.isArray(e) ? e.map((e) => sM(e)).filter((e) => !(0, xe.isUndefined)(e)) : Object.entries(e).reduce((e, [t, n]) => {
|
|
63060
63061
|
if ((0, xe.isUndefined)(n)) return e;
|
|
63061
63062
|
if (n === null || n instanceof Date) return {
|
|
63062
63063
|
...e,
|
|
63063
63064
|
[t]: n
|
|
63064
63065
|
};
|
|
63065
63066
|
if (typeof n == "object") {
|
|
63066
|
-
let r =
|
|
63067
|
+
let r = sM(n);
|
|
63067
63068
|
return !(0, xe.isUndefined)(r) && Object.keys(r).length > 0 ? {
|
|
63068
63069
|
...e,
|
|
63069
63070
|
[t]: r
|
|
@@ -63073,29 +63074,29 @@ var iM = (e) => {
|
|
|
63073
63074
|
...e,
|
|
63074
63075
|
[t]: n
|
|
63075
63076
|
};
|
|
63076
|
-
}, {}),
|
|
63077
|
+
}, {}), cM = {
|
|
63077
63078
|
BOLD: "bold",
|
|
63078
63079
|
ITALIC: "italic",
|
|
63079
63080
|
UNDERLINE: "underline",
|
|
63080
63081
|
STRIKE: "strike",
|
|
63081
63082
|
LINK: "link"
|
|
63082
63083
|
};
|
|
63083
|
-
|
|
63084
|
-
var
|
|
63084
|
+
cM.UNDERLINE, cM.BOLD, cM.ITALIC, cM.STRIKE, cM.LINK;
|
|
63085
|
+
var lM = (e) => {
|
|
63085
63086
|
let t = e.trim();
|
|
63086
63087
|
return t.startsWith("http://") || t.startsWith("https://") || t.startsWith("HTTPS://") || t.startsWith("HTTP://") ? t : `https://${t}`;
|
|
63087
|
-
},
|
|
63088
|
+
}, uM = (e, t) => {
|
|
63088
63089
|
let n = t?.allowIp ?? !0, r = t?.allowLocalhost ?? !0, i = /^(((?!-))(xn--|_)?[a-z0-9-]{0,61}[a-z0-9]{1,1}\.){1,10}(xn--)?([a-z0-9][a-z0-9-]{0,60}|[a-z0-9-]{1,30}\.[a-z]{2,})$/.test(e), a = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(e), o = e === "localhost" || e === "127.0.0.1";
|
|
63089
63090
|
return o && !r || a && !n ? !1 : i || o || a;
|
|
63090
63091
|
};
|
|
63091
63092
|
$l().transform((e, t) => {
|
|
63092
|
-
let n =
|
|
63093
|
+
let n = lM(e.trim()), r = n.replace("https://", "").replace("http://", "").replace("HTTPS://", "").replace("HTTP://", "");
|
|
63093
63094
|
if (/^\d+(?:\/[a-zA-Z]*)?$/.test(r)) return t.addIssue({
|
|
63094
63095
|
code: "custom",
|
|
63095
63096
|
message: "domain is not a valid url"
|
|
63096
63097
|
}), Se;
|
|
63097
63098
|
try {
|
|
63098
|
-
return
|
|
63099
|
+
return uM(new URL(n).hostname) ? n : (t.addIssue({
|
|
63099
63100
|
code: "custom",
|
|
63100
63101
|
message: "domain is not a valid url"
|
|
63101
63102
|
}), Se);
|
|
@@ -63106,61 +63107,61 @@ $l().transform((e, t) => {
|
|
|
63106
63107
|
}), Se;
|
|
63107
63108
|
}
|
|
63108
63109
|
});
|
|
63109
|
-
var
|
|
63110
|
-
let t =
|
|
63110
|
+
var dM = (e) => {
|
|
63111
|
+
let t = oM(e);
|
|
63111
63112
|
return k(t) ? (t.origin + t.pathname + t.search + t.hash).replace(/\/$/, "") : e;
|
|
63112
|
-
},
|
|
63113
|
+
}, fM = (e) => {
|
|
63113
63114
|
let t = e.trim();
|
|
63114
|
-
return t === "" ? t : lM(
|
|
63115
|
+
return t === "" ? t : dM(lM(t));
|
|
63115
63116
|
};
|
|
63116
63117
|
nu({ pattern: wn }).max(255);
|
|
63117
|
-
var
|
|
63118
|
+
var pM = (e) => /^{{[^{}]+}}$/.test(e), mM = /* @__PURE__ */ new Map();
|
|
63118
63119
|
for (let e of Ak()) {
|
|
63119
|
-
let t = jk(e), n =
|
|
63120
|
-
n ? n.push(e) :
|
|
63120
|
+
let t = jk(e), n = mM.get(t);
|
|
63121
|
+
n ? n.push(e) : mM.set(t, [e]);
|
|
63121
63122
|
}
|
|
63122
63123
|
new Set(Ak());
|
|
63123
|
-
var
|
|
63124
|
+
var hM = (e) => typeof e == "string", gM = RegExp("\\{\\{([^{}]+)\\}\\}", "g"), _M = (e, t) => k(e) ? hM(e) ? bM(e, t) : Array.isArray(e) ? vM(e, t) : typeof e == "object" && e ? yM(e, t) : e : e, vM = (e, t) => {
|
|
63124
63125
|
let n = e;
|
|
63125
|
-
for (let r = 0; r < e.length; ++r) n[r] =
|
|
63126
|
+
for (let r = 0; r < e.length; ++r) n[r] = _M(e[r], t);
|
|
63126
63127
|
return n;
|
|
63127
|
-
},
|
|
63128
|
-
let i =
|
|
63129
|
-
return e[typeof i == "string" ? i : String(i)] =
|
|
63130
|
-
}, {}),
|
|
63131
|
-
let n = e.match(
|
|
63132
|
-
return !n || n.length === 0 ? e : n.length === 1 && n[0] === e ? uj(e, t) : e.replace(
|
|
63128
|
+
}, yM = (e, t) => Object.entries(e).reduce((e, [n, r]) => {
|
|
63129
|
+
let i = _M(n, t);
|
|
63130
|
+
return e[typeof i == "string" ? i : String(i)] = _M(r, t), e;
|
|
63131
|
+
}, {}), bM = (e, t) => {
|
|
63132
|
+
let n = e.match(gM);
|
|
63133
|
+
return !n || n.length === 0 ? e : n.length === 1 && n[0] === e ? uj(e, t) : e.replace(gM, (e, n) => {
|
|
63133
63134
|
let r = uj(e, t);
|
|
63134
63135
|
return typeof r == "object" && r ? JSON.stringify(r) : r;
|
|
63135
63136
|
});
|
|
63136
63137
|
};
|
|
63137
63138
|
Sp.TABLE, Sp.TABLE, Sp.KANBAN, Sp.KANBAN, Sp.CALENDAR, Sp.CALENDAR, Sp.FIELDS_WIDGET, Sp.FIELDS_WIDGET, Sp.TABLE_WIDGET, Sp.TABLE, Sp.KANBAN_WIDGET, Sp.KANBAN, Sp.CALENDAR_WIDGET, Sp.CALENDAR, Sp.FIELDS_WIDGET, Sp.TABLE_WIDGET, Sp.KANBAN_WIDGET, Sp.CALENDAR_WIDGET;
|
|
63138
|
-
var
|
|
63139
|
+
var xM = {
|
|
63139
63140
|
darwin: "https://docs.docker.com/desktop/setup/install/mac-install/",
|
|
63140
63141
|
win32: "https://docs.docker.com/desktop/setup/install/windows-install/",
|
|
63141
63142
|
linux: "https://docs.docker.com/engine/install/"
|
|
63142
|
-
},
|
|
63143
|
+
}, SM = () => {
|
|
63143
63144
|
try {
|
|
63144
63145
|
return d("docker --version", { stdio: "ignore" }), !0;
|
|
63145
63146
|
} catch {
|
|
63146
63147
|
return !1;
|
|
63147
63148
|
}
|
|
63148
|
-
},
|
|
63149
|
+
}, CM = () => [
|
|
63149
63150
|
" Docker is required but not installed.",
|
|
63150
63151
|
"",
|
|
63151
|
-
` Install Docker: ${
|
|
63152
|
+
` Install Docker: ${xM[process.platform] ?? xM.linux}`,
|
|
63152
63153
|
"",
|
|
63153
63154
|
" Then run this command again.",
|
|
63154
63155
|
"",
|
|
63155
63156
|
" Alternatively, connect to an existing Twenty instance:",
|
|
63156
63157
|
" npx create-twenty-app@latest my-twenty-app --url <your-instance-url>"
|
|
63157
|
-
].join("\n"),
|
|
63158
|
+
].join("\n"), wM = process.env.INIT_CWD || process.cwd(), TM = "twentycrm/twenty-app-dev:latest", EM = class {
|
|
63158
63159
|
constructor() {
|
|
63159
63160
|
this.stepCounter = 0, this.totalSteps = 0;
|
|
63160
63161
|
}
|
|
63161
63162
|
async execute(t = {}) {
|
|
63162
63163
|
let { appName: n, appDisplayName: i, appDirectory: a, appDescription: o } = this.getAppInfos(t), s = t.serverUrl ?? h, c = s !== h;
|
|
63163
|
-
!c && !
|
|
63164
|
+
!c && !SM() && (console.log(e.yellow("\n" + CM() + "\n")), process.exit(1)), c && t.authenticationMethod === "apiKey" && console.log(e.yellow("API key authentication is only supported on a local Docker instance. Ignoring and switching to OAuth authentication."));
|
|
63164
63165
|
let l = c ? "oauth" : t.authenticationMethod ?? "apiKey";
|
|
63165
63166
|
try {
|
|
63166
63167
|
await this.validateDirectory(a), this.totalSteps = this.computeTotalSteps({ skipLocalInstance: c }), this.stepCounter = 0;
|
|
@@ -63205,7 +63206,7 @@ var yM = {
|
|
|
63205
63206
|
return {
|
|
63206
63207
|
appName: t,
|
|
63207
63208
|
appDisplayName: n,
|
|
63208
|
-
appDirectory: e.directory ? i.join(
|
|
63209
|
+
appDirectory: e.directory ? i.join(wM, e.directory) : i.join(wM, u(t)),
|
|
63209
63210
|
appDescription: r
|
|
63210
63211
|
};
|
|
63211
63212
|
}
|
|
@@ -63223,7 +63224,7 @@ var yM = {
|
|
|
63223
63224
|
}
|
|
63224
63225
|
pullImageInBackground() {
|
|
63225
63226
|
return new Promise((e) => {
|
|
63226
|
-
let t = f("docker", ["pull",
|
|
63227
|
+
let t = f("docker", ["pull", TM], { stdio: "ignore" });
|
|
63227
63228
|
t.on("close", (t) => e(t === 0)), t.on("error", () => e(!1));
|
|
63228
63229
|
});
|
|
63229
63230
|
}
|
|
@@ -63258,7 +63259,7 @@ var yM = {
|
|
|
63258
63259
|
let r = (await n.json()).data?.currentWorkspace?.workspaceUrls;
|
|
63259
63260
|
if (!r) return null;
|
|
63260
63261
|
let i = r.customUrl ?? r.subdomainUrl;
|
|
63261
|
-
return i ?
|
|
63262
|
+
return i ? fM(i) : null;
|
|
63262
63263
|
}
|
|
63263
63264
|
async readMainPageLayoutUniversalIdentifier(e) {
|
|
63264
63265
|
let t = i.join(e, "src", "constants", "universal-identifiers.ts");
|
|
@@ -63369,10 +63370,10 @@ var yM = {
|
|
|
63369
63370
|
let o = 1;
|
|
63370
63371
|
console.log(e.white(` ${o}. Navigate to your project`)), console.log(e.cyan(` cd ${i}\n`)), o++, r || (console.log(e.white(` ${o}. Connect to a Twenty instance`)), console.log(e.cyan(" yarn twenty remote:add --url <your-instance-url>\n")), o++), console.log(e.white(` ${o}. Start developing`)), console.log(e.cyan(" yarn twenty dev\n")), o++, console.log(e.white(` ${o}. Open your twenty instance`)), console.log(e.cyan(` ${n}\n`)), console.log(e.gray(" Documentation: https://docs.twenty.com/developers/extend/apps/getting-started/quick-start"));
|
|
63371
63372
|
}
|
|
63372
|
-
},
|
|
63373
|
+
}, DM = new t(re.name).description("CLI tool to initialize a new Twenty application").version(re.version, "-v, --version", "Output the current version of create-twenty-app.").argument("[directory]").option("-n, --name <name>", "Application name").option("-d, --display-name <displayName>", "Application display name").option("--description <description>", "Application description").option("--url <url>", "Twenty server URL (default: http://localhost:2020)").option("--api-url <apiUrl>", "[deprecated: use --url]").option("--authentication-method <method>", "Authentication method: oauth or apiKey (default: apiKey for local, oauth for remote)").helpOption("-h, --help", "Display this help message.").action(async (t, n) => {
|
|
63373
63374
|
t && !/^[a-z0-9-]+$/.test(t) && (console.error(e.red(`Invalid directory "${t}". Must contain only lowercase letters, numbers, and hyphens`)), process.exit(1)), n?.name !== void 0 && n.name.trim().length === 0 && (console.error(e.red("Error: --name cannot be empty.")), process.exit(1)), n?.authenticationMethod && !["oauth", "apiKey"].includes(n.authenticationMethod) && (console.error(e.red("Error: --authentication-method must be \"oauth\" or \"apiKey\".")), process.exit(1)), n?.apiUrl && console.warn(e.yellow("Warning: --api-url is deprecated. Use --url instead."));
|
|
63374
63375
|
let r = (n?.url ?? n?.apiUrl)?.replace(/\/+$/, "");
|
|
63375
|
-
await new
|
|
63376
|
+
await new EM().execute({
|
|
63376
63377
|
directory: t,
|
|
63377
63378
|
name: n?.name,
|
|
63378
63379
|
displayName: n?.displayName,
|
|
@@ -63381,9 +63382,9 @@ var yM = {
|
|
|
63381
63382
|
authenticationMethod: n?.authenticationMethod
|
|
63382
63383
|
});
|
|
63383
63384
|
});
|
|
63384
|
-
|
|
63385
|
+
DM.exitOverride();
|
|
63385
63386
|
try {
|
|
63386
|
-
|
|
63387
|
+
DM.parse();
|
|
63387
63388
|
} catch (t) {
|
|
63388
63389
|
t instanceof n && process.exit(t.exitCode), t instanceof Error && (console.error(e.red("Error:"), t.message), process.exit(1));
|
|
63389
63390
|
}
|
|
@@ -43,7 +43,6 @@
|
|
|
43
43
|
|
|
44
44
|
## Common Pitfalls
|
|
45
45
|
|
|
46
|
-
- Creating an object without an index view associated. Unless this is a technical object, user will need to visualize it.
|
|
47
46
|
- Creating a view without a navigationMenuItem associated. This will make the view available on the left sidebar.
|
|
48
47
|
- Creating a front-end component that has a scroll instead of being responsive to its fixed widget height and width, unless it is specifically meant to be used in a canvas tab.
|
|
49
48
|
|
|
@@ -18,7 +18,7 @@ export default definePageLayout({
|
|
|
18
18
|
title: 'Overview',
|
|
19
19
|
position: 0,
|
|
20
20
|
icon: 'IconApps',
|
|
21
|
-
layoutMode: PageLayoutTabLayoutMode.
|
|
21
|
+
layoutMode: PageLayoutTabLayoutMode.VERTICAL_LIST,
|
|
22
22
|
widgets: [
|
|
23
23
|
{
|
|
24
24
|
universalIdentifier: MAIN_PAGE_WIDGET_UNIVERSAL_IDENTIFIER,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-twenty-app",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.27.0",
|
|
4
4
|
"description": "Command-line interface to create Twenty application",
|
|
5
5
|
"main": "dist/cli.cjs",
|
|
6
6
|
"bin": "dist/cli.cjs",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"require": "./dist/cli.cjs"
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
|
-
"license": "
|
|
29
|
+
"license": "MIT",
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"chalk": "^5.3.0",
|
|
32
32
|
"commander": "^12.0.0",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"lodash.camelcase": "^4.3.0",
|
|
35
35
|
"lodash.kebabcase": "^4.1.1",
|
|
36
36
|
"lodash.startcase": "^4.4.0",
|
|
37
|
-
"twenty-sdk": "2.
|
|
37
|
+
"twenty-sdk": "2.27.0",
|
|
38
38
|
"uuid": "^13.0.2"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|