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.25.0",
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: "AGPL-3.0",
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-BXMLJbPI.mjs
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-et1s5gL3.mjs
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-Cw7oGqTM.mjs
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 === "" ? [] : dM(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
+ 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 (dM(e)) return [e];
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) || dM(e), "Must be a valid UUID or a variable with {{ }} syntax"))).catch([]), Pj = Ed({
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 = Rj({
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 Rj({
62518
+ return Bj({
62518
62519
  recordFilter: e,
62519
62520
  fieldMetadataItem: r,
62520
62521
  filterValueDependencies: n
62521
62522
  });
62522
62523
  }
62523
- }, Lj = ({ fieldMetadataItem: e, filterValueDependencies: t }) => {
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
- }, Rj = ({ recordFilter: e, fieldMetadataItem: t, filterValueDependencies: n }) => {
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 = $j(e.value), r = eM({
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 = rM(e), i = k(r) && typeof r == "object" ? r : null;
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 = rM({
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: Uj(r, "DAY").toInstant().toString() } }, { [t.name]: { lt: Wj(r, "DAY").toInstant().toString() } }] };
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 = Lj({
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(/[^0-9]/g, "");
62802
- if (!(0, xe.isNonEmptyString)(n)) return;
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
- }, zj = ({ filterValueDependencies: e, filters: t, fieldMetadataItemById: n, recordFilterGroups: r, currentRecordFilterGroupId: i }) => {
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) => Ij({
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) => zj({
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
- }, Bj = (e, t, n) => {
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
- }, Vj = Zf.enum([
62878
+ }, Uj = Zf.enum([
62878
62879
  vp.MONDAY,
62879
62880
  vp.SATURDAY,
62880
62881
  vp.SUNDAY
62881
- ]), Hj = (e) => {
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
- }, Uj = (e, t, n) => {
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) ? Hj(n) : 1, r = (e.dayOfWeek - t + 7) % 7;
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
- }, Wj = (e, t, n) => {
62928
+ }, Kj = (e, t, n) => {
62928
62929
  switch (t) {
62929
- case "DAY": return Uj(e, "DAY").add({ days: 1 });
62930
- case "WEEK": return Uj(e, "WEEK", n).add({ weeks: 1 });
62931
- case "MONTH": return Uj(e, "MONTH", n).add({ months: 1 });
62932
- case "QUARTER": return Uj(e, "QUARTER", n).add({ months: 3 });
62933
- case "YEAR": return Uj(e, "YEAR", n).add({ years: 1 });
62934
- case "SECOND": return Uj(e, "SECOND").add({ seconds: 1 });
62935
- case "MINUTE": return Uj(e, "MINUTE").add({ minutes: 1 });
62936
- case "HOUR": return Uj(e, "HOUR").add({ hours: 1 });
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
- }, Gj = Zf.union([Zf.coerce.number().int().positive(), Zf.literal("undefined")]).transform((e) => e === "undefined" ? void 0 : e), Kj = Zf.enum([
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
- ]), qj = Zf.enum([
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
- ]), Jj = Zf.object({
62953
- direction: Kj,
62954
- amount: Gj.nullish(),
62955
- unit: qj,
62953
+ ]), Xj = Zf.object({
62954
+ direction: Jj,
62955
+ amount: qj.nullish(),
62956
+ unit: Yj,
62956
62957
  timezone: Zf.string().nullish(),
62957
- firstDayOfTheWeek: Vj.nullish()
62958
- }).refine((e) => !(e.amount === void 0 && e.direction !== "THIS"), { error: "Amount cannot be 'undefined' unless direction is 'THIS'" }), Yj = /((?:THIS)|(?:PAST)|(?:NEXT))_(\d*)_(DAY|MONTH|YEAR|WEEK|QUARTER|HOUR|MINUTE|SECOND)(?:(?:;;([^;;]*);;)?(?:(MONDAY|SUNDAY|SATURDAY);;)?)?/, Xj = Zf.string().transform((e, t) => {
62959
- let n = new RegExp(Yj).exec(e);
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 Jj.parse({
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
- }), Zj = (e, t, n) => {
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
- }, Qj = (e, t) => {
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 = Wj(t, i, a), o = Bj(n, i, r);
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 = Uj(t, i, a), o = Zj(n, i, r);
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 = Uj(t, i, a), r = Wj(t, i, a), o = n?.toPlainDate().toString(), s = r?.toPlainDate().toString();
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
- }, $j = (e) => {
63012
+ }, tM = (e) => {
63012
63013
  if (!(0, xe.isNonEmptyString)(e)) return null;
63013
- let t = Xj.safeParse(e);
63014
+ let t = Qj.safeParse(e);
63014
63015
  if (!t.success) return null;
63015
63016
  let n = t.data;
63016
- return Qj(n, cp(n.timezone) ? _D.Now.zonedDateTimeISO(n.timezone) : _D.Now.zonedDateTimeISO());
63017
- }, eM = (e) => e.value ? e.operand === Y.IS_RELATIVE ? $j(e.value) : e.value : null, tM = (e, t) => {
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 = Wj(t, i, a);
63023
+ let n = Kj(t, i, a);
63023
63024
  return {
63024
63025
  ...e,
63025
63026
  start: n,
63026
- end: Bj(n, i, r)
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 = Uj(t, i, a);
63032
+ let n = Gj(t, i, a);
63032
63033
  return {
63033
63034
  ...e,
63034
- start: Zj(n, i, r),
63035
+ start: $j(n, i, r),
63035
63036
  end: n
63036
63037
  };
63037
63038
  }
63038
63039
  case "THIS": return {
63039
63040
  ...e,
63040
- start: Uj(t, i, a),
63041
- end: Wj(t, i, a)
63041
+ start: Gj(t, i, a),
63042
+ end: Kj(t, i, a)
63042
63043
  };
63043
63044
  }
63044
- }, nM = (e) => {
63045
+ }, iM = (e) => {
63045
63046
  if (!(0, xe.isNonEmptyString)(e)) return null;
63046
- let t = Xj.safeParse(e);
63047
+ let t = Qj.safeParse(e);
63047
63048
  if (t.success) {
63048
63049
  let e = t.data;
63049
- return tM(e, (cp(e.timezone) ? _D.Now.zonedDateTimeISO(e.timezone) : _D.Now.zonedDateTimeISO()).round({ smallestUnit: "second" }));
63050
+ return rM(e, (cp(e.timezone) ? _D.Now.zonedDateTimeISO(e.timezone) : _D.Now.zonedDateTimeISO()).round({ smallestUnit: "second" }));
63050
63051
  } else return null;
63051
- }, rM = (e) => e.value ? e.operand === Y.IS_RELATIVE ? nM(e.value) : e.value : null;
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 iM = (e) => {
63054
+ var oM = (e) => {
63054
63055
  try {
63055
63056
  return new URL(e);
63056
63057
  } catch {
63057
63058
  return null;
63058
63059
  }
63059
- }, aM = (e) => e === void 0 || typeof e != "object" || !e ? e : Array.isArray(e) ? e.map((e) => aM(e)).filter((e) => !(0, xe.isUndefined)(e)) : Object.entries(e).reduce((e, [t, n]) => {
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 = aM(n);
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
- }, {}), oM = {
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
- oM.UNDERLINE, oM.BOLD, oM.ITALIC, oM.STRIKE, oM.LINK;
63084
- var sM = (e) => {
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
- }, cM = (e, t) => {
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 = sM(e.trim()), r = n.replace("https://", "").replace("http://", "").replace("HTTPS://", "").replace("HTTP://", "");
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 cM(new URL(n).hostname) ? n : (t.addIssue({
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 lM = (e) => {
63110
- let t = iM(e);
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
- }, uM = (e) => {
63113
+ }, fM = (e) => {
63113
63114
  let t = e.trim();
63114
- return t === "" ? t : lM(sM(t));
63115
+ return t === "" ? t : dM(lM(t));
63115
63116
  };
63116
63117
  nu({ pattern: wn }).max(255);
63117
- var dM = (e) => /^{{[^{}]+}}$/.test(e), fM = /* @__PURE__ */ new Map();
63118
+ var pM = (e) => /^{{[^{}]+}}$/.test(e), mM = /* @__PURE__ */ new Map();
63118
63119
  for (let e of Ak()) {
63119
- let t = jk(e), n = fM.get(t);
63120
- n ? n.push(e) : fM.set(t, [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 pM = (e) => typeof e == "string", mM = RegExp("\\{\\{([^{}]+)\\}\\}", "g"), hM = (e, t) => k(e) ? pM(e) ? vM(e, t) : Array.isArray(e) ? gM(e, t) : typeof e == "object" && e ? _M(e, t) : e : e, gM = (e, t) => {
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] = hM(e[r], t);
63126
+ for (let r = 0; r < e.length; ++r) n[r] = _M(e[r], t);
63126
63127
  return n;
63127
- }, _M = (e, t) => Object.entries(e).reduce((e, [n, r]) => {
63128
- let i = hM(n, t);
63129
- return e[typeof i == "string" ? i : String(i)] = hM(r, t), e;
63130
- }, {}), vM = (e, t) => {
63131
- let n = e.match(mM);
63132
- return !n || n.length === 0 ? e : n.length === 1 && n[0] === e ? uj(e, t) : e.replace(mM, (e, n) => {
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 yM = {
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
- }, bM = () => {
63143
+ }, SM = () => {
63143
63144
  try {
63144
63145
  return d("docker --version", { stdio: "ignore" }), !0;
63145
63146
  } catch {
63146
63147
  return !1;
63147
63148
  }
63148
- }, xM = () => [
63149
+ }, CM = () => [
63149
63150
  " Docker is required but not installed.",
63150
63151
  "",
63151
- ` Install Docker: ${yM[process.platform] ?? yM.linux}`,
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"), SM = process.env.INIT_CWD || process.cwd(), CM = "twentycrm/twenty-app-dev:latest", wM = class {
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 && !bM() && (console.log(e.yellow("\n" + xM() + "\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
+ !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(SM, e.directory) : i.join(SM, u(t)),
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", CM], { stdio: "ignore" });
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 ? uM(i) : null;
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
- }, TM = 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
+ }, 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 wM().execute({
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
- TM.exitOverride();
63385
+ DM.exitOverride();
63385
63386
  try {
63386
- TM.parse();
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.CANVAS,
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.25.0",
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": "AGPL-3.0",
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.25.0",
37
+ "twenty-sdk": "2.27.0",
38
38
  "uuid": "^13.0.2"
39
39
  },
40
40
  "devDependencies": {