create-twenty-app 2.16.0 → 2.18.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.cjs +3 -3
- package/dist/cli.mjs +25 -74
- package/dist/constants/template/README.md +3 -0
- package/dist/constants/template/github/workflows/ci.yml +9 -0
- package/dist/constants/template/gitignore +6 -1
- package/dist/constants/template/package.json +7 -3
- package/dist/constants/template/src/__tests__/application-config.test.ts +14 -0
- package/dist/constants/template/src/front-components/main-page.tsx +3 -3
- package/dist/constants/template/tsconfig.json +2 -2
- package/dist/constants/template/vitest.unit.config.ts +14 -0
- package/package.json +3 -4
- package/src/constants/template/README.md +3 -0
- package/src/constants/template/package.json +7 -3
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.18.0",
|
|
34
34
|
description: "Command-line interface to create Twenty application",
|
|
35
35
|
main: "dist/cli.cjs",
|
|
36
36
|
bin: "dist/cli.cjs",
|
|
@@ -77,8 +77,7 @@ var b = Object.create, x = Object.defineProperty, S = Object.getOwnPropertyDescr
|
|
|
77
77
|
"twenty-shared": "workspace:*",
|
|
78
78
|
typescript: "^5.9.3",
|
|
79
79
|
vite: "^8.0.0",
|
|
80
|
-
"vite-plugin-dts": "^4.5.4"
|
|
81
|
-
"vite-tsconfig-paths": "^4.2.1"
|
|
80
|
+
"vite-plugin-dts": "^4.5.4"
|
|
82
81
|
},
|
|
83
82
|
engines: {
|
|
84
83
|
node: "^24.5.0",
|
|
@@ -12835,7 +12834,7 @@ function cp(e) {
|
|
|
12835
12834
|
return e != null;
|
|
12836
12835
|
}
|
|
12837
12836
|
//#endregion
|
|
12838
|
-
//#region ../twenty-shared/dist/types-
|
|
12837
|
+
//#region ../twenty-shared/dist/types-BXUwA2lR.mjs
|
|
12839
12838
|
var J = /* @__PURE__ */ function(e) {
|
|
12840
12839
|
return e.ACTOR = "ACTOR", e.ADDRESS = "ADDRESS", e.ARRAY = "ARRAY", e.BOOLEAN = "BOOLEAN", e.CURRENCY = "CURRENCY", e.DATE = "DATE", e.DATE_TIME = "DATE_TIME", e.EMAILS = "EMAILS", e.FILES = "FILES", e.FULL_NAME = "FULL_NAME", e.LINKS = "LINKS", e.MORPH_RELATION = "MORPH_RELATION", e.MULTI_SELECT = "MULTI_SELECT", e.NUMBER = "NUMBER", e.NUMERIC = "NUMERIC", e.PHONES = "PHONES", e.POSITION = "POSITION", e.RATING = "RATING", e.RAW_JSON = "RAW_JSON", e.RELATION = "RELATION", e.RICH_TEXT = "RICH_TEXT", e.SELECT = "SELECT", e.TEXT = "TEXT", e.TS_VECTOR = "TS_VECTOR", e.UUID = "UUID", e;
|
|
12841
12840
|
}({}), lp = /* @__PURE__ */ function(e) {
|
|
@@ -13048,7 +13047,7 @@ Ed({
|
|
|
13048
13047
|
[J.EMAILS, pp],
|
|
13049
13048
|
[J.PHONES, gp],
|
|
13050
13049
|
[J.RICH_TEXT, _p]
|
|
13051
|
-
]);
|
|
13050
|
+
]), J.RELATION, J.MORPH_RELATION, J.FILES, J.TS_VECTOR;
|
|
13052
13051
|
var vp = /* @__PURE__ */ function(e) {
|
|
13053
13052
|
return e.MONDAY = "MONDAY", e.SUNDAY = "SUNDAY", e.SATURDAY = "SATURDAY", e;
|
|
13054
13053
|
}({}), yp = /* @__PURE__ */ function(e) {
|
|
@@ -13431,7 +13430,7 @@ var vp = /* @__PURE__ */ function(e) {
|
|
|
13431
13430
|
J.RAW_JSON
|
|
13432
13431
|
]), yp.DAY, yp.WEEK, yp.MONTH, yp.QUARTER, yp.YEAR, J.TEXT, J.FULL_NAME, J.UUID;
|
|
13433
13432
|
//#endregion
|
|
13434
|
-
//#region ../twenty-shared/dist/constants-
|
|
13433
|
+
//#region ../twenty-shared/dist/constants-B2IqfB2Y.mjs
|
|
13435
13434
|
var wp = [
|
|
13436
13435
|
"RATING_1",
|
|
13437
13436
|
"RATING_2",
|
|
@@ -60649,7 +60648,7 @@ function kk() {
|
|
|
60649
60648
|
return ak(Tk, arguments);
|
|
60650
60649
|
}
|
|
60651
60650
|
//#endregion
|
|
60652
|
-
//#region ../twenty-shared/dist/utils-
|
|
60651
|
+
//#region ../twenty-shared/dist/utils-CbWrtiaZ.mjs
|
|
60653
60652
|
var Ak = /* @__PURE__ */ ne(aO(), 1);
|
|
60654
60653
|
oO(), QO(), rk(), J.TEXT, J.FULL_NAME, J.EMAILS, J.ADDRESS, J.LINKS, J.PHONES, J.RICH_TEXT, J.UUID;
|
|
60655
60654
|
var jk = (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);
|
|
@@ -62854,36 +62853,20 @@ var wj = (e, t, n) => Object.values(Sp[e]).includes(t) && t === n, Tj = $l().tra
|
|
|
62854
62853
|
switch (n) {
|
|
62855
62854
|
case "NEXT": {
|
|
62856
62855
|
if (!cp(r)) throw Error("Amount is required");
|
|
62857
|
-
|
|
62858
|
-
let n = Mj(Fj(t, "QUARTER", a), "QUARTER", 1), i = Mj(n, "QUARTER", r), o = n.toPlainDate().toString(), s = i.toPlainDate().toString();
|
|
62859
|
-
return {
|
|
62860
|
-
...e,
|
|
62861
|
-
start: o,
|
|
62862
|
-
end: s
|
|
62863
|
-
};
|
|
62864
|
-
}
|
|
62865
|
-
let n = t.startOfDay().add({ days: 1 }), o = Mj(n, i, r), s = n.toPlainDate().toString(), c = o?.toPlainDate().toString();
|
|
62856
|
+
let n = Ij(t, i, a), o = Mj(n, i, r);
|
|
62866
62857
|
return {
|
|
62867
62858
|
...e,
|
|
62868
|
-
start:
|
|
62869
|
-
end:
|
|
62859
|
+
start: n.toPlainDate().toString(),
|
|
62860
|
+
end: o.toPlainDate().toString()
|
|
62870
62861
|
};
|
|
62871
62862
|
}
|
|
62872
62863
|
case "PAST": {
|
|
62873
62864
|
if (!cp(r)) throw Error("Amount is required");
|
|
62874
|
-
|
|
62875
|
-
let n = Fj(t, "QUARTER", a), i = Uj(n, "QUARTER", r).toPlainDate().toString(), o = n.toPlainDate().toString();
|
|
62876
|
-
return {
|
|
62877
|
-
...e,
|
|
62878
|
-
start: i,
|
|
62879
|
-
end: o
|
|
62880
|
-
};
|
|
62881
|
-
}
|
|
62882
|
-
let n = t.startOfDay(), o = Uj(n, i, r)?.toPlainDate().toString(), s = n.toPlainDate().toString();
|
|
62865
|
+
let n = Fj(t, i, a), o = Uj(n, i, r);
|
|
62883
62866
|
return {
|
|
62884
62867
|
...e,
|
|
62885
|
-
start: o,
|
|
62886
|
-
end:
|
|
62868
|
+
start: o.toPlainDate().toString(),
|
|
62869
|
+
end: n.toPlainDate().toString()
|
|
62887
62870
|
};
|
|
62888
62871
|
}
|
|
62889
62872
|
case "THIS": {
|
|
@@ -62902,58 +62885,26 @@ var wj = (e, t, n) => Object.values(Sp[e]).includes(t) && t === n, Tj = $l().tra
|
|
|
62902
62885
|
let n = t.data;
|
|
62903
62886
|
return Wj(n, cp(n.timezone) ? gD.Now.zonedDateTimeISO(n.timezone) : gD.Now.zonedDateTimeISO());
|
|
62904
62887
|
}, Kj = (e) => e.value ? e.operand === Y.IS_RELATIVE ? Gj(e.value) : e.value : null, qj = (e, t) => {
|
|
62905
|
-
let { direction: n, amount: r, unit: i, firstDayOfTheWeek: a } = e
|
|
62906
|
-
"SECOND",
|
|
62907
|
-
"MINUTE",
|
|
62908
|
-
"HOUR"
|
|
62909
|
-
].includes(i);
|
|
62888
|
+
let { direction: n, amount: r, unit: i, firstDayOfTheWeek: a } = e;
|
|
62910
62889
|
switch (n) {
|
|
62911
|
-
case "NEXT":
|
|
62890
|
+
case "NEXT": {
|
|
62912
62891
|
if (!k(r)) throw Error("Amount is required");
|
|
62913
|
-
|
|
62914
|
-
|
|
62915
|
-
return {
|
|
62916
|
-
...e,
|
|
62917
|
-
start: n,
|
|
62918
|
-
end: Mj(n, i, r)
|
|
62919
|
-
};
|
|
62920
|
-
}
|
|
62921
|
-
if (o) return {
|
|
62892
|
+
let n = Ij(t, i, a);
|
|
62893
|
+
return {
|
|
62922
62894
|
...e,
|
|
62923
|
-
start:
|
|
62924
|
-
end: Mj(
|
|
62895
|
+
start: n,
|
|
62896
|
+
end: Mj(n, i, r)
|
|
62925
62897
|
};
|
|
62926
|
-
|
|
62927
|
-
|
|
62928
|
-
return {
|
|
62929
|
-
...e,
|
|
62930
|
-
start: n,
|
|
62931
|
-
end: Mj(n, i, r)
|
|
62932
|
-
};
|
|
62933
|
-
}
|
|
62934
|
-
case "PAST":
|
|
62898
|
+
}
|
|
62899
|
+
case "PAST": {
|
|
62935
62900
|
if (!k(r)) throw Error("Amount is required");
|
|
62936
|
-
|
|
62937
|
-
|
|
62938
|
-
return {
|
|
62939
|
-
...e,
|
|
62940
|
-
start: Uj(n, i, r),
|
|
62941
|
-
end: n
|
|
62942
|
-
};
|
|
62943
|
-
}
|
|
62944
|
-
if (o) return {
|
|
62901
|
+
let n = Fj(t, i, a);
|
|
62902
|
+
return {
|
|
62945
62903
|
...e,
|
|
62946
|
-
start: Uj(
|
|
62947
|
-
end:
|
|
62904
|
+
start: Uj(n, i, r),
|
|
62905
|
+
end: n
|
|
62948
62906
|
};
|
|
62949
|
-
|
|
62950
|
-
let n = t.startOfDay();
|
|
62951
|
-
return {
|
|
62952
|
-
...e,
|
|
62953
|
-
start: Uj(n, i, r),
|
|
62954
|
-
end: n
|
|
62955
|
-
};
|
|
62956
|
-
}
|
|
62907
|
+
}
|
|
62957
62908
|
case "THIS": return {
|
|
62958
62909
|
...e,
|
|
62959
62910
|
start: Fj(t, i, a),
|
|
@@ -13,6 +13,9 @@ Run `yarn twenty help` to list all available commands.
|
|
|
13
13
|
- `yarn twenty dev` - Start the development server and sync your app
|
|
14
14
|
- `yarn twenty docker:status` - Check the local Twenty server status
|
|
15
15
|
- `yarn twenty docker:start` - Start the local Twenty server
|
|
16
|
+
- `yarn lint` - Lint the project with oxlint
|
|
17
|
+
- `yarn typecheck` - Type-check the project
|
|
18
|
+
- `yarn test:unit` - Run unit tests
|
|
16
19
|
- `yarn test` - Run integration tests
|
|
17
20
|
|
|
18
21
|
## Learn More
|
|
@@ -41,6 +41,15 @@ jobs:
|
|
|
41
41
|
- name: Install dependencies
|
|
42
42
|
run: yarn install --immutable
|
|
43
43
|
|
|
44
|
+
- name: Lint
|
|
45
|
+
run: yarn lint
|
|
46
|
+
|
|
47
|
+
- name: Typecheck
|
|
48
|
+
run: yarn typecheck
|
|
49
|
+
|
|
50
|
+
- name: Unit tests
|
|
51
|
+
run: yarn test:unit
|
|
52
|
+
|
|
44
53
|
- name: Run integration tests
|
|
45
54
|
run: yarn test
|
|
46
55
|
env:
|
|
@@ -8,25 +8,29 @@
|
|
|
8
8
|
"yarn": ">=4.0.2"
|
|
9
9
|
},
|
|
10
10
|
"keywords": [],
|
|
11
|
-
"packageManager": "yarn@4.
|
|
11
|
+
"packageManager": "yarn@4.13.0",
|
|
12
12
|
"scripts": {
|
|
13
13
|
"twenty": "twenty",
|
|
14
14
|
"lint": "oxlint -c .oxlintrc.json .",
|
|
15
15
|
"lint:fix": "oxlint --fix -c .oxlintrc.json .",
|
|
16
|
+
"typecheck": "tsgo --noEmit -p tsconfig.spec.json",
|
|
16
17
|
"test": "vitest run",
|
|
17
|
-
"test:watch": "vitest"
|
|
18
|
+
"test:watch": "vitest",
|
|
19
|
+
"test:unit": "vitest run --config vitest.unit.config.ts"
|
|
18
20
|
},
|
|
19
21
|
"dependencies": {},
|
|
20
22
|
"devDependencies": {
|
|
21
23
|
"@types/node": "^24.7.2",
|
|
22
24
|
"@types/react": "^19.0.0",
|
|
25
|
+
"@typescript/native-preview": "^7.0.0-dev.20260116.1",
|
|
23
26
|
"oxlint": "^0.16.0",
|
|
24
27
|
"react": "^19.0.0",
|
|
25
28
|
"react-dom": "^19.0.0",
|
|
26
29
|
"twenty-client-sdk": "TO-BE-GENERATED",
|
|
27
30
|
"twenty-sdk": "TO-BE-GENERATED",
|
|
31
|
+
"twenty-ui": "1.0.0-alpha.1",
|
|
28
32
|
"typescript": "^5.9.3",
|
|
29
33
|
"vite-tsconfig-paths": "^4.2.1",
|
|
30
|
-
"vitest": "^
|
|
34
|
+
"vitest": "^4.0.0"
|
|
31
35
|
}
|
|
32
36
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
APP_DESCRIPTION,
|
|
3
|
+
APP_DISPLAY_NAME,
|
|
4
|
+
APPLICATION_UNIVERSAL_IDENTIFIER,
|
|
5
|
+
} from 'src/constants/universal-identifiers';
|
|
6
|
+
import { describe, expect, it } from 'vitest';
|
|
7
|
+
|
|
8
|
+
describe('application identifiers', () => {
|
|
9
|
+
it('should expose the application metadata constants', () => {
|
|
10
|
+
expect(APP_DISPLAY_NAME).toBeTruthy();
|
|
11
|
+
expect(typeof APP_DESCRIPTION).toBe('string');
|
|
12
|
+
expect(APPLICATION_UNIVERSAL_IDENTIFIER).toBeTruthy();
|
|
13
|
+
});
|
|
14
|
+
});
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { defineFrontComponent } from 'twenty-sdk/define';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Avatar } from 'twenty-ui/data-display';
|
|
2
4
|
import {
|
|
3
|
-
Avatar,
|
|
4
5
|
IconBox,
|
|
5
6
|
IconHierarchy,
|
|
6
7
|
IconLayout,
|
|
7
8
|
IconSettingsAutomation,
|
|
8
|
-
} from 'twenty-
|
|
9
|
-
import { useState } from 'react';
|
|
9
|
+
} from 'twenty-ui/icon';
|
|
10
10
|
|
|
11
11
|
import {
|
|
12
12
|
APP_DISPLAY_NAME,
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"outDir": "./dist",
|
|
7
7
|
"rootDir": ".",
|
|
8
8
|
"jsx": "react-jsx",
|
|
9
|
-
"moduleResolution": "
|
|
9
|
+
"moduleResolution": "bundler",
|
|
10
10
|
"allowSyntheticDefaultImports": true,
|
|
11
11
|
"emitDecoratorMetadata": true,
|
|
12
12
|
"experimentalDecorators": true,
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"alwaysStrict": true,
|
|
17
17
|
"noImplicitAny": true,
|
|
18
18
|
"strictBindCallApply": false,
|
|
19
|
-
"target": "
|
|
19
|
+
"target": "es2020",
|
|
20
20
|
"module": "esnext",
|
|
21
21
|
"lib": ["es2020", "dom"],
|
|
22
22
|
"skipLibCheck": true,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import tsconfigPaths from 'vite-tsconfig-paths';
|
|
2
|
+
import { defineConfig } from 'vitest/config';
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
plugins: [
|
|
6
|
+
tsconfigPaths({
|
|
7
|
+
projects: ['tsconfig.spec.json'],
|
|
8
|
+
ignoreConfigErrors: true,
|
|
9
|
+
}),
|
|
10
|
+
],
|
|
11
|
+
test: {
|
|
12
|
+
include: ['src/**/*.test.ts'],
|
|
13
|
+
},
|
|
14
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-twenty-app",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.18.0",
|
|
4
4
|
"description": "Command-line interface to create Twenty application",
|
|
5
5
|
"main": "dist/cli.cjs",
|
|
6
6
|
"bin": "dist/cli.cjs",
|
|
@@ -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.18.0",
|
|
38
38
|
"uuid": "^13.0.2"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
@@ -51,8 +51,7 @@
|
|
|
51
51
|
"twenty-shared": "0.0.0",
|
|
52
52
|
"typescript": "^5.9.3",
|
|
53
53
|
"vite": "^8.0.0",
|
|
54
|
-
"vite-plugin-dts": "^4.5.4"
|
|
55
|
-
"vite-tsconfig-paths": "^4.2.1"
|
|
54
|
+
"vite-plugin-dts": "^4.5.4"
|
|
56
55
|
},
|
|
57
56
|
"engines": {
|
|
58
57
|
"node": "^24.5.0",
|
|
@@ -13,6 +13,9 @@ Run `yarn twenty help` to list all available commands.
|
|
|
13
13
|
- `yarn twenty dev` - Start the development server and sync your app
|
|
14
14
|
- `yarn twenty docker:status` - Check the local Twenty server status
|
|
15
15
|
- `yarn twenty docker:start` - Start the local Twenty server
|
|
16
|
+
- `yarn lint` - Lint the project with oxlint
|
|
17
|
+
- `yarn typecheck` - Type-check the project
|
|
18
|
+
- `yarn test:unit` - Run unit tests
|
|
16
19
|
- `yarn test` - Run integration tests
|
|
17
20
|
|
|
18
21
|
## Learn More
|
|
@@ -8,25 +8,29 @@
|
|
|
8
8
|
"yarn": ">=4.0.2"
|
|
9
9
|
},
|
|
10
10
|
"keywords": [],
|
|
11
|
-
"packageManager": "yarn@4.
|
|
11
|
+
"packageManager": "yarn@4.13.0",
|
|
12
12
|
"scripts": {
|
|
13
13
|
"twenty": "twenty",
|
|
14
14
|
"lint": "oxlint -c .oxlintrc.json .",
|
|
15
15
|
"lint:fix": "oxlint --fix -c .oxlintrc.json .",
|
|
16
|
+
"typecheck": "tsgo --noEmit -p tsconfig.spec.json",
|
|
16
17
|
"test": "vitest run",
|
|
17
|
-
"test:watch": "vitest"
|
|
18
|
+
"test:watch": "vitest",
|
|
19
|
+
"test:unit": "vitest run --config vitest.unit.config.ts"
|
|
18
20
|
},
|
|
19
21
|
"dependencies": {},
|
|
20
22
|
"devDependencies": {
|
|
21
23
|
"@types/node": "^24.7.2",
|
|
22
24
|
"@types/react": "^19.0.0",
|
|
25
|
+
"@typescript/native-preview": "^7.0.0-dev.20260116.1",
|
|
23
26
|
"oxlint": "^0.16.0",
|
|
24
27
|
"react": "^19.0.0",
|
|
25
28
|
"react-dom": "^19.0.0",
|
|
26
29
|
"twenty-client-sdk": "TO-BE-GENERATED",
|
|
27
30
|
"twenty-sdk": "TO-BE-GENERATED",
|
|
31
|
+
"twenty-ui": "1.0.0-alpha.1",
|
|
28
32
|
"typescript": "^5.9.3",
|
|
29
33
|
"vite-tsconfig-paths": "^4.2.1",
|
|
30
|
-
"vitest": "^
|
|
34
|
+
"vitest": "^4.0.0"
|
|
31
35
|
}
|
|
32
36
|
}
|