@tekki-forge/compiler 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +4 -2
  2. package/dist/compile.d.ts +17 -0
  3. package/dist/compile.js +691 -0
  4. package/dist/compile.js.map +1 -0
  5. package/dist/dashboard.d.ts +7 -0
  6. package/dist/dashboard.js +103 -0
  7. package/dist/dashboard.js.map +1 -0
  8. package/dist/features.d.ts +13 -0
  9. package/dist/features.js +247 -0
  10. package/dist/features.js.map +1 -0
  11. package/dist/files.d.ts +34 -0
  12. package/dist/files.js +32 -0
  13. package/dist/files.js.map +1 -0
  14. package/dist/i18n.d.ts +24 -0
  15. package/dist/i18n.js +168 -0
  16. package/dist/i18n.js.map +1 -0
  17. package/dist/index.d.ts +11 -0
  18. package/dist/index.js +12 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/indexes.d.ts +13 -0
  21. package/dist/indexes.js +71 -0
  22. package/dist/indexes.js.map +1 -0
  23. package/dist/ir.d.ts +413 -0
  24. package/dist/ir.js +27 -0
  25. package/dist/ir.js.map +1 -0
  26. package/dist/landing.d.ts +5 -0
  27. package/dist/landing.js +73 -0
  28. package/dist/landing.js.map +1 -0
  29. package/dist/load.d.ts +12 -0
  30. package/dist/load.js +38 -0
  31. package/dist/load.js.map +1 -0
  32. package/dist/naming.d.ts +11 -0
  33. package/dist/naming.js +58 -0
  34. package/dist/naming.js.map +1 -0
  35. package/dist/notifications.d.ts +5 -0
  36. package/dist/notifications.js +80 -0
  37. package/dist/notifications.js.map +1 -0
  38. package/dist/rules.d.ts +4 -0
  39. package/dist/rules.js +43 -0
  40. package/dist/rules.js.map +1 -0
  41. package/dist/theme.d.ts +69 -0
  42. package/dist/theme.js +257 -0
  43. package/dist/theme.js.map +1 -0
  44. package/dist/ui.d.ts +83 -0
  45. package/dist/ui.js +102 -0
  46. package/dist/ui.js.map +1 -0
  47. package/package.json +41 -3
package/dist/ui.js ADDED
@@ -0,0 +1,102 @@
1
+ const CELL = {
2
+ location: "location",
3
+ file: "file",
4
+ image: "image",
5
+ enum: "badge",
6
+ boolean: "boolean",
7
+ money: "money",
8
+ percentage: "percentage",
9
+ date: "date",
10
+ datetime: "datetime",
11
+ relation: "relation",
12
+ color: "color",
13
+ email: "email",
14
+ url: "url",
15
+ decimal: "number",
16
+ integer: "number",
17
+ };
18
+ /** Path segment used to look up records of a relation target. */
19
+ export function lookupPath(ir, entity) {
20
+ if (entity === "User")
21
+ return "users/lookup";
22
+ if (entity === "Team")
23
+ return "teams/lookup";
24
+ const target = ir.entities.find((e) => e.name === entity);
25
+ return `${target?.path ?? entity.toLowerCase()}/lookup`;
26
+ }
27
+ export function deriveResources(ir) {
28
+ return ir.entities.map((e) => {
29
+ const byName = new Map(e.fields.map((f) => [f.name, f]));
30
+ const columns = e.list.columns.map((key) => {
31
+ const f = byName.get(key);
32
+ if (!f)
33
+ return { key, label: key === "createdAt" ? "Created" : key === "updatedAt" ? "Updated" : key, kind: "system", sortable: true, cell: "datetime" };
34
+ const cell = f.relation?.type === "many-to-many" ? "relation-list" : (CELL[f.kind] ?? "text");
35
+ return { key, label: f.label, kind: f.kind, sortable: f.sortable, cell };
36
+ });
37
+ const filters = e.fields
38
+ .filter((f) => f.filterable && !f.hidden)
39
+ .map((f) => {
40
+ if (f.kind === "enum")
41
+ return { key: f.name, label: f.label, type: "select", options: f.enumValues };
42
+ if (f.kind === "boolean")
43
+ return { key: f.name, label: f.label, type: "boolean" };
44
+ if (f.relation)
45
+ return { key: f.name, label: f.label, type: "relation", relationPath: lookupPath(ir, f.relation.entity) };
46
+ if (["integer", "decimal", "money", "percentage", "date", "datetime"].includes(f.kind))
47
+ return { key: f.name, label: f.label, type: "range" };
48
+ return { key: f.name, label: f.label, type: "select", options: [] };
49
+ })
50
+ .filter((f) => f.type !== "select" || (f.options?.length ?? 0) > 0);
51
+ const formFields = e.fields
52
+ .filter((f) => !f.hidden && !f.readonly && !f.computed)
53
+ .map((f) => ({
54
+ name: f.name,
55
+ apiName: f.apiName,
56
+ label: f.label,
57
+ component: f.relation?.type === "many-to-many" && f.widget === "relation-select" ? "relation-multi" : f.widget,
58
+ required: f.required && !f.relation?.owner,
59
+ ...(f.description ? { description: f.description } : {}),
60
+ ...(f.placeholder ? { placeholder: f.placeholder } : {}),
61
+ ...(f.enumValues ? { options: f.enumValues } : {}),
62
+ ...(f.relation ? { relation: { entity: f.relation.entity, lookupPath: lookupPath(ir, f.relation.entity), many: f.relation.type === "many-to-many" } } : {}),
63
+ ...(f.file ? { file: f.file } : {}),
64
+ ...(f.currency ? { currency: f.currency } : {}),
65
+ validation: f.validation,
66
+ ...(f.default?.kind === "value" ? { defaultValue: f.default.value } : {}),
67
+ }));
68
+ const searchFields = e.fields.filter((f) => f.searchable).map((f) => f.label.toLowerCase());
69
+ return {
70
+ name: e.name,
71
+ path: e.path,
72
+ label: e.label,
73
+ pluralLabel: e.pluralLabel,
74
+ icon: e.icon,
75
+ nav: e.nav,
76
+ display: e.display,
77
+ searchable: searchFields.length > 0,
78
+ searchPlaceholder: `Search ${e.pluralLabel.toLowerCase()}…`,
79
+ list: {
80
+ columns,
81
+ filters,
82
+ defaultSort: `${e.list.defaultSort.direction === "desc" ? "-" : ""}${e.list.defaultSort.field}`,
83
+ pageSize: e.list.pageSize,
84
+ },
85
+ form: { fields: formFields },
86
+ detail: {
87
+ fields: e.fields.filter((f) => !f.hidden).map((f) => f.name),
88
+ related: e.inverseRelations.map((r) => ({
89
+ name: r.name,
90
+ label: r.label,
91
+ resourcePath: ir.entities.find((x) => x.name === r.entity).path,
92
+ filterKey: r.field,
93
+ })),
94
+ },
95
+ features: e.features,
96
+ actions: e.actions,
97
+ ...(e.workflow ? { workflow: e.workflow } : {}),
98
+ views: e.views,
99
+ };
100
+ });
101
+ }
102
+ //# sourceMappingURL=ui.js.map
package/dist/ui.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,44 @@
1
1
  {
2
2
  "name": "@tekki-forge/compiler",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.0",
4
+ "description": "Forge schema compiler: config -> validated, normalized IR",
5
+ "keywords": [
6
+ "code-generator",
7
+ "forge",
8
+ "full-stack",
9
+ "tekki-forge"
10
+ ],
11
+ "author": "Mahy KANE",
12
+ "license": "MIT",
13
+ "type": "module",
14
+ "main": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "default": "./dist/index.js"
20
+ },
21
+ "./i18n": {
22
+ "types": "./dist/i18n.d.ts",
23
+ "default": "./dist/i18n.js"
24
+ }
25
+ },
26
+ "files": [
27
+ "dist"
28
+ ],
29
+ "engines": {
30
+ "node": ">=22"
31
+ },
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "dependencies": {
36
+ "jiti": "^2.7.0",
37
+ "@tekki-forge/core": "^0.1.0",
38
+ "@tekki-forge/expression": "^0.1.0"
39
+ },
40
+ "scripts": {
41
+ "build": "tsc -p tsconfig.json",
42
+ "typecheck": "tsc -p tsconfig.json --noEmit"
43
+ }
6
44
  }