@eide/foir-cli 0.1.34 → 0.1.36

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 (221) hide show
  1. package/dist/cli.js +7469 -81
  2. package/dist/config/types.d.ts +7 -6
  3. package/dist/config/types.js +6 -14
  4. package/dist/generated-CPsQ9jfu.d.ts +195 -0
  5. package/dist/lib/extension-helpers.d.ts +10 -7
  6. package/dist/lib/extension-helpers.js +15 -85
  7. package/dist/lib/hook-helpers.d.ts +9 -6
  8. package/dist/lib/hook-helpers.js +12 -105
  9. package/dist/lib/seed-helpers.d.ts +10 -8
  10. package/dist/lib/seed-helpers.js +18 -124
  11. package/package.json +9 -7
  12. package/dist/auth/credentials.d.ts +0 -31
  13. package/dist/auth/credentials.d.ts.map +0 -1
  14. package/dist/auth/credentials.js +0 -139
  15. package/dist/cli.d.ts +0 -3
  16. package/dist/cli.d.ts.map +0 -1
  17. package/dist/codegen/fetch-customer-profile-schema.d.ts +0 -12
  18. package/dist/codegen/fetch-customer-profile-schema.d.ts.map +0 -1
  19. package/dist/codegen/fetch-customer-profile-schema.js +0 -21
  20. package/dist/codegen/fetch-models.d.ts +0 -58
  21. package/dist/codegen/fetch-models.d.ts.map +0 -1
  22. package/dist/codegen/fetch-models.js +0 -96
  23. package/dist/codegen/field-mapping.d.ts +0 -34
  24. package/dist/codegen/field-mapping.d.ts.map +0 -1
  25. package/dist/codegen/field-mapping.js +0 -250
  26. package/dist/codegen/generators/config.d.ts +0 -5
  27. package/dist/codegen/generators/config.d.ts.map +0 -1
  28. package/dist/codegen/generators/config.js +0 -82
  29. package/dist/codegen/generators/customer-profile-documents.d.ts +0 -5
  30. package/dist/codegen/generators/customer-profile-documents.d.ts.map +0 -1
  31. package/dist/codegen/generators/customer-profile-documents.js +0 -42
  32. package/dist/codegen/generators/customer-profile-hooks.d.ts +0 -5
  33. package/dist/codegen/generators/customer-profile-hooks.d.ts.map +0 -1
  34. package/dist/codegen/generators/customer-profile-hooks.js +0 -78
  35. package/dist/codegen/generators/customer-profile-loaders.d.ts +0 -5
  36. package/dist/codegen/generators/customer-profile-loaders.d.ts.map +0 -1
  37. package/dist/codegen/generators/customer-profile-loaders.js +0 -67
  38. package/dist/codegen/generators/customer-profile-operations.d.ts +0 -5
  39. package/dist/codegen/generators/customer-profile-operations.d.ts.map +0 -1
  40. package/dist/codegen/generators/customer-profile-operations.js +0 -126
  41. package/dist/codegen/generators/customer-profile-types.d.ts +0 -6
  42. package/dist/codegen/generators/customer-profile-types.d.ts.map +0 -1
  43. package/dist/codegen/generators/customer-profile-types.js +0 -45
  44. package/dist/codegen/generators/documents.d.ts +0 -12
  45. package/dist/codegen/generators/documents.d.ts.map +0 -1
  46. package/dist/codegen/generators/documents.js +0 -178
  47. package/dist/codegen/generators/field-types.d.ts +0 -5
  48. package/dist/codegen/generators/field-types.d.ts.map +0 -1
  49. package/dist/codegen/generators/field-types.js +0 -346
  50. package/dist/codegen/generators/model-index.d.ts +0 -6
  51. package/dist/codegen/generators/model-index.d.ts.map +0 -1
  52. package/dist/codegen/generators/model-index.js +0 -26
  53. package/dist/codegen/generators/model-types.d.ts +0 -12
  54. package/dist/codegen/generators/model-types.d.ts.map +0 -1
  55. package/dist/codegen/generators/model-types.js +0 -176
  56. package/dist/codegen/generators/public-schema-content.d.ts +0 -14
  57. package/dist/codegen/generators/public-schema-content.d.ts.map +0 -1
  58. package/dist/codegen/generators/public-schema-content.js +0 -22
  59. package/dist/codegen/generators/react-hooks-index.d.ts +0 -6
  60. package/dist/codegen/generators/react-hooks-index.d.ts.map +0 -1
  61. package/dist/codegen/generators/react-hooks-index.js +0 -20
  62. package/dist/codegen/generators/react-hooks.d.ts +0 -7
  63. package/dist/codegen/generators/react-hooks.d.ts.map +0 -1
  64. package/dist/codegen/generators/react-hooks.js +0 -139
  65. package/dist/codegen/generators/remix-loaders-index.d.ts +0 -6
  66. package/dist/codegen/generators/remix-loaders-index.d.ts.map +0 -1
  67. package/dist/codegen/generators/remix-loaders-index.js +0 -20
  68. package/dist/codegen/generators/remix-loaders.d.ts +0 -7
  69. package/dist/codegen/generators/remix-loaders.d.ts.map +0 -1
  70. package/dist/codegen/generators/remix-loaders.js +0 -107
  71. package/dist/codegen/generators/static-documents.d.ts +0 -14
  72. package/dist/codegen/generators/static-documents.d.ts.map +0 -1
  73. package/dist/codegen/generators/static-documents.js +0 -771
  74. package/dist/codegen/generators/swift-customer-profile.d.ts +0 -9
  75. package/dist/codegen/generators/swift-customer-profile.d.ts.map +0 -1
  76. package/dist/codegen/generators/swift-customer-profile.js +0 -152
  77. package/dist/codegen/generators/swift-field-types.d.ts +0 -5
  78. package/dist/codegen/generators/swift-field-types.d.ts.map +0 -1
  79. package/dist/codegen/generators/swift-field-types.js +0 -151
  80. package/dist/codegen/generators/swift-model-keys.d.ts +0 -6
  81. package/dist/codegen/generators/swift-model-keys.d.ts.map +0 -1
  82. package/dist/codegen/generators/swift-model-keys.js +0 -25
  83. package/dist/codegen/generators/swift-types.d.ts +0 -13
  84. package/dist/codegen/generators/swift-types.d.ts.map +0 -1
  85. package/dist/codegen/generators/swift-types.js +0 -188
  86. package/dist/codegen/generators/typed-operations-common.d.ts +0 -6
  87. package/dist/codegen/generators/typed-operations-common.d.ts.map +0 -1
  88. package/dist/codegen/generators/typed-operations-common.js +0 -84
  89. package/dist/codegen/generators/typed-operations-index.d.ts +0 -6
  90. package/dist/codegen/generators/typed-operations-index.d.ts.map +0 -1
  91. package/dist/codegen/generators/typed-operations-index.js +0 -22
  92. package/dist/codegen/generators/typed-operations.d.ts +0 -11
  93. package/dist/codegen/generators/typed-operations.d.ts.map +0 -1
  94. package/dist/codegen/generators/typed-operations.js +0 -263
  95. package/dist/codegen/swift-field-mapping.d.ts +0 -30
  96. package/dist/codegen/swift-field-mapping.d.ts.map +0 -1
  97. package/dist/codegen/swift-field-mapping.js +0 -150
  98. package/dist/codegen/write-files.d.ts +0 -15
  99. package/dist/codegen/write-files.d.ts.map +0 -1
  100. package/dist/codegen/write-files.js +0 -36
  101. package/dist/commands/api-keys.d.ts +0 -4
  102. package/dist/commands/api-keys.d.ts.map +0 -1
  103. package/dist/commands/api-keys.js +0 -129
  104. package/dist/commands/auth-config.d.ts +0 -4
  105. package/dist/commands/auth-config.d.ts.map +0 -1
  106. package/dist/commands/auth-config.js +0 -38
  107. package/dist/commands/auth-providers.d.ts +0 -4
  108. package/dist/commands/auth-providers.d.ts.map +0 -1
  109. package/dist/commands/auth-providers.js +0 -207
  110. package/dist/commands/context.d.ts +0 -4
  111. package/dist/commands/context.d.ts.map +0 -1
  112. package/dist/commands/context.js +0 -91
  113. package/dist/commands/create-extension.d.ts +0 -4
  114. package/dist/commands/create-extension.d.ts.map +0 -1
  115. package/dist/commands/create-extension.js +0 -60
  116. package/dist/commands/customer-profiles.d.ts +0 -4
  117. package/dist/commands/customer-profiles.d.ts.map +0 -1
  118. package/dist/commands/customer-profiles.js +0 -99
  119. package/dist/commands/customers.d.ts +0 -4
  120. package/dist/commands/customers.d.ts.map +0 -1
  121. package/dist/commands/customers.js +0 -126
  122. package/dist/commands/embeddings.d.ts +0 -4
  123. package/dist/commands/embeddings.d.ts.map +0 -1
  124. package/dist/commands/embeddings.js +0 -145
  125. package/dist/commands/experiments.d.ts +0 -4
  126. package/dist/commands/experiments.d.ts.map +0 -1
  127. package/dist/commands/experiments.js +0 -196
  128. package/dist/commands/extensions.d.ts +0 -4
  129. package/dist/commands/extensions.d.ts.map +0 -1
  130. package/dist/commands/extensions.js +0 -210
  131. package/dist/commands/files.d.ts +0 -4
  132. package/dist/commands/files.d.ts.map +0 -1
  133. package/dist/commands/files.js +0 -143
  134. package/dist/commands/hooks.d.ts +0 -4
  135. package/dist/commands/hooks.d.ts.map +0 -1
  136. package/dist/commands/hooks.js +0 -228
  137. package/dist/commands/locales.d.ts +0 -4
  138. package/dist/commands/locales.d.ts.map +0 -1
  139. package/dist/commands/locales.js +0 -140
  140. package/dist/commands/login.d.ts +0 -4
  141. package/dist/commands/login.d.ts.map +0 -1
  142. package/dist/commands/login.js +0 -124
  143. package/dist/commands/logout.d.ts +0 -4
  144. package/dist/commands/logout.d.ts.map +0 -1
  145. package/dist/commands/logout.js +0 -16
  146. package/dist/commands/media.d.ts +0 -4
  147. package/dist/commands/media.d.ts.map +0 -1
  148. package/dist/commands/media.js +0 -44
  149. package/dist/commands/models.d.ts +0 -4
  150. package/dist/commands/models.d.ts.map +0 -1
  151. package/dist/commands/models.js +0 -153
  152. package/dist/commands/notes.d.ts +0 -4
  153. package/dist/commands/notes.d.ts.map +0 -1
  154. package/dist/commands/notes.js +0 -132
  155. package/dist/commands/notifications.d.ts +0 -4
  156. package/dist/commands/notifications.d.ts.map +0 -1
  157. package/dist/commands/notifications.js +0 -73
  158. package/dist/commands/operations.d.ts +0 -4
  159. package/dist/commands/operations.d.ts.map +0 -1
  160. package/dist/commands/operations.js +0 -341
  161. package/dist/commands/pull.d.ts +0 -4
  162. package/dist/commands/pull.d.ts.map +0 -1
  163. package/dist/commands/pull.js +0 -300
  164. package/dist/commands/records.d.ts +0 -4
  165. package/dist/commands/records.d.ts.map +0 -1
  166. package/dist/commands/records.js +0 -314
  167. package/dist/commands/schedules.d.ts +0 -4
  168. package/dist/commands/schedules.d.ts.map +0 -1
  169. package/dist/commands/schedules.js +0 -155
  170. package/dist/commands/search.d.ts +0 -4
  171. package/dist/commands/search.d.ts.map +0 -1
  172. package/dist/commands/search.js +0 -60
  173. package/dist/commands/segments.d.ts +0 -4
  174. package/dist/commands/segments.d.ts.map +0 -1
  175. package/dist/commands/segments.js +0 -155
  176. package/dist/commands/select-project.d.ts +0 -4
  177. package/dist/commands/select-project.d.ts.map +0 -1
  178. package/dist/commands/select-project.js +0 -144
  179. package/dist/commands/settings.d.ts +0 -4
  180. package/dist/commands/settings.d.ts.map +0 -1
  181. package/dist/commands/settings.js +0 -115
  182. package/dist/commands/variant-catalog.d.ts +0 -4
  183. package/dist/commands/variant-catalog.d.ts.map +0 -1
  184. package/dist/commands/variant-catalog.js +0 -118
  185. package/dist/commands/whoami.d.ts +0 -4
  186. package/dist/commands/whoami.d.ts.map +0 -1
  187. package/dist/commands/whoami.js +0 -51
  188. package/dist/config/pull-config.d.ts +0 -33
  189. package/dist/config/pull-config.d.ts.map +0 -1
  190. package/dist/config/pull-config.js +0 -119
  191. package/dist/config/types.d.ts.map +0 -1
  192. package/dist/graphql/generated.d.ts +0 -8330
  193. package/dist/graphql/generated.d.ts.map +0 -1
  194. package/dist/graphql/generated.js +0 -135
  195. package/dist/lib/client.d.ts +0 -18
  196. package/dist/lib/client.d.ts.map +0 -1
  197. package/dist/lib/client.js +0 -64
  198. package/dist/lib/config-loader.d.ts +0 -28
  199. package/dist/lib/config-loader.d.ts.map +0 -1
  200. package/dist/lib/config-loader.js +0 -49
  201. package/dist/lib/config.d.ts +0 -12
  202. package/dist/lib/config.d.ts.map +0 -1
  203. package/dist/lib/config.js +0 -8
  204. package/dist/lib/errors.d.ts +0 -6
  205. package/dist/lib/errors.d.ts.map +0 -1
  206. package/dist/lib/errors.js +0 -76
  207. package/dist/lib/extension-helpers.d.ts.map +0 -1
  208. package/dist/lib/hook-helpers.d.ts.map +0 -1
  209. package/dist/lib/input.d.ts +0 -38
  210. package/dist/lib/input.d.ts.map +0 -1
  211. package/dist/lib/input.js +0 -108
  212. package/dist/lib/output.d.ts +0 -31
  213. package/dist/lib/output.d.ts.map +0 -1
  214. package/dist/lib/output.js +0 -107
  215. package/dist/lib/seed-helpers.d.ts.map +0 -1
  216. package/dist/scaffold/package-manager.d.ts +0 -12
  217. package/dist/scaffold/package-manager.d.ts.map +0 -1
  218. package/dist/scaffold/package-manager.js +0 -51
  219. package/dist/scaffold/scaffold.d.ts +0 -4
  220. package/dist/scaffold/scaffold.d.ts.map +0 -1
  221. package/dist/scaffold/scaffold.js +0 -462
@@ -1,129 +1,23 @@
1
- /**
2
- * Model and record seed configuration helpers.
3
- *
4
- * These helpers provide type-safe configuration for seeding models and records
5
- * using types generated from the platform's GraphQL schema.
6
- *
7
- * @example
8
- * ```typescript
9
- * import { defineModels, defineRecords } from '@eide/foir-cli/seed';
10
- *
11
- * // Define models
12
- * export const models = defineModels([
13
- * {
14
- * key: 'my_model',
15
- * name: 'My Model',
16
- * fields: [...]
17
- * }
18
- * ]);
19
- *
20
- * // Define records
21
- * export const records = defineRecords([
22
- * {
23
- * modelKey: 'my_model',
24
- * naturalKey: 'my-record',
25
- * data: { ... }
26
- * }
27
- * ]);
28
- * ```
29
- */
30
- /**
31
- * Define a single model with type safety.
32
- *
33
- * @example
34
- * ```typescript
35
- * export default defineModel({
36
- * key: 'tilly_page',
37
- * name: 'Tilly Page',
38
- * fields: [
39
- * { key: 'title', type: 'text', label: 'Title', required: true }
40
- * ],
41
- * config: {
42
- * versioning: true,
43
- * publishing: true
44
- * }
45
- * });
46
- * ```
47
- */
48
- export function defineModel(model) {
49
- return model;
1
+ // src/lib/seed-helpers.ts
2
+ function defineModel(model) {
3
+ return model;
50
4
  }
51
- /**
52
- * Define multiple models with type safety.
53
- *
54
- * @example
55
- * ```typescript
56
- * export default defineModels([
57
- * {
58
- * key: 'model_a',
59
- * name: 'Model A',
60
- * fields: [...]
61
- * },
62
- * {
63
- * key: 'model_b',
64
- * name: 'Model B',
65
- * fields: [...]
66
- * }
67
- * ]);
68
- * ```
69
- */
70
- export function defineModels(models) {
71
- return models;
5
+ function defineModels(models) {
6
+ return models;
72
7
  }
73
- /**
74
- * Define a single record with type safety.
75
- *
76
- * @example
77
- * ```typescript
78
- * export default defineRecord({
79
- * modelKey: 'tilly_page',
80
- * naturalKey: 'home',
81
- * data: {
82
- * title: 'Home Page',
83
- * blocks: [...]
84
- * }
85
- * });
86
- * ```
87
- */
88
- export function defineRecord(record) {
89
- return record;
8
+ function defineRecord(record) {
9
+ return record;
90
10
  }
91
- /**
92
- * Define multiple records with type safety.
93
- *
94
- * @example
95
- * ```typescript
96
- * export default defineRecords([
97
- * {
98
- * modelKey: 'tilly_page',
99
- * naturalKey: 'home',
100
- * data: { title: 'Home' }
101
- * },
102
- * {
103
- * modelKey: 'tilly_page',
104
- * naturalKey: 'about',
105
- * data: { title: 'About' }
106
- * }
107
- * ]);
108
- * ```
109
- */
110
- export function defineRecords(records) {
111
- return records;
11
+ function defineRecords(records) {
12
+ return records;
112
13
  }
113
- /**
114
- * Define a field with type safety.
115
- * Alias of the extension helper for convenience.
116
- *
117
- * @example
118
- * ```typescript
119
- * const titleField = defineField({
120
- * key: 'title',
121
- * type: 'text',
122
- * label: 'Title',
123
- * required: true
124
- * });
125
- * ```
126
- */
127
- export function defineField(field) {
128
- return field;
14
+ function defineField(field) {
15
+ return field;
129
16
  }
17
+ export {
18
+ defineField,
19
+ defineModel,
20
+ defineModels,
21
+ defineRecord,
22
+ defineRecords
23
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eide/foir-cli",
3
- "version": "0.1.34",
3
+ "version": "0.1.36",
4
4
  "description": "Universal platform CLI for EIDE — scriptable, composable resource management",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -11,23 +11,23 @@
11
11
  },
12
12
  "exports": {
13
13
  ".": {
14
- "types": "./dist/cli.js",
14
+ "types": "./dist/cli.d.ts",
15
15
  "import": "./dist/cli.js"
16
16
  },
17
17
  "./config": {
18
- "types": "./dist/config/types.js",
18
+ "types": "./dist/config/types.d.ts",
19
19
  "import": "./dist/config/types.js"
20
20
  },
21
21
  "./extensions": {
22
- "types": "./dist/lib/extension-helpers.js",
22
+ "types": "./dist/lib/extension-helpers.d.ts",
23
23
  "import": "./dist/lib/extension-helpers.js"
24
24
  },
25
25
  "./hooks": {
26
- "types": "./dist/lib/hook-helpers.js",
26
+ "types": "./dist/lib/hook-helpers.d.ts",
27
27
  "import": "./dist/lib/hook-helpers.js"
28
28
  },
29
29
  "./seed": {
30
- "types": "./dist/lib/seed-helpers.js",
30
+ "types": "./dist/lib/seed-helpers.d.ts",
31
31
  "import": "./dist/lib/seed-helpers.js"
32
32
  }
33
33
  },
@@ -36,7 +36,7 @@
36
36
  "README.md"
37
37
  ],
38
38
  "scripts": {
39
- "build": "tsc -p tsconfig.build.json",
39
+ "build": "tsup",
40
40
  "dev:cli": "tsx src/cli.ts",
41
41
  "check-types": "tsc --noEmit",
42
42
  "lint": "eslint src/",
@@ -80,7 +80,9 @@
80
80
  "@graphql-codegen/typescript-operations": "^4.4.0",
81
81
  "@graphql-typed-document-node/core": "^3.2.0",
82
82
  "@types/inquirer": "^9.0.7",
83
+ "@eide/command-registry": "workspace:*",
83
84
  "@types/node": "^22.5.0",
85
+ "tsup": "^8.5.1",
84
86
  "tsx": "^4.20.0",
85
87
  "typescript": "5.9.2",
86
88
  "vitest": "^3.2.4"
@@ -1,31 +0,0 @@
1
- export interface StoredCredentials {
2
- accessToken: string;
3
- refreshToken: string;
4
- expiresAt: string;
5
- user: {
6
- id: string;
7
- email: string;
8
- name: string;
9
- };
10
- }
11
- export declare function getCredentialsDir(): string;
12
- export declare function getCredentialsPath(): string;
13
- export declare function getCredentials(): Promise<StoredCredentials | null>;
14
- export declare function writeCredentials(credentials: StoredCredentials): Promise<void>;
15
- export declare function deleteCredentials(): Promise<void>;
16
- export declare function isTokenExpired(credentials: StoredCredentials): boolean;
17
- export declare function getValidCredentials(refreshFn?: (refreshToken: string) => Promise<{
18
- accessToken: string;
19
- expiresAt: string;
20
- }>): Promise<StoredCredentials | null>;
21
- export interface ProjectContext {
22
- id: string;
23
- name: string;
24
- tenantId: string;
25
- apiKey?: string;
26
- apiKeyId?: string;
27
- }
28
- export declare function getProjectContext(): Promise<ProjectContext | null>;
29
- export declare function writeProjectContext(project: ProjectContext): Promise<void>;
30
- export declare function deleteProjectContext(): Promise<void>;
31
- //# sourceMappingURL=credentials.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/auth/credentials.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAYD,wBAAsB,cAAc,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAUxE;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,iBAAiB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQvD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAItE;AAED,wBAAsB,mBAAmB,CACvC,SAAS,CAAC,EAAE,CACV,YAAY,EAAE,MAAM,KACjB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,GACvD,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAoBnC;AAMD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA4CD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAUxE;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ1D"}
@@ -1,139 +0,0 @@
1
- import { promises as fs, statSync } from 'fs';
2
- import { join, dirname } from 'path';
3
- import { homedir } from 'os';
4
- export function getCredentialsDir() {
5
- return join(homedir(), '.foir');
6
- }
7
- export function getCredentialsPath() {
8
- return join(getCredentialsDir(), 'credentials.json');
9
- }
10
- async function ensureDir(dir) {
11
- try {
12
- await fs.mkdir(dir, { recursive: true, mode: 0o700 });
13
- }
14
- catch (error) {
15
- if (error.code !== 'EEXIST') {
16
- throw error;
17
- }
18
- }
19
- }
20
- export async function getCredentials() {
21
- try {
22
- const content = await fs.readFile(getCredentialsPath(), 'utf-8');
23
- return JSON.parse(content);
24
- }
25
- catch (error) {
26
- if (error.code === 'ENOENT') {
27
- return null;
28
- }
29
- throw error;
30
- }
31
- }
32
- export async function writeCredentials(credentials) {
33
- await ensureDir(getCredentialsDir());
34
- const path = getCredentialsPath();
35
- await fs.writeFile(path, JSON.stringify(credentials, null, 2), {
36
- mode: 0o600,
37
- });
38
- }
39
- export async function deleteCredentials() {
40
- try {
41
- await fs.unlink(getCredentialsPath());
42
- }
43
- catch (error) {
44
- if (error.code !== 'ENOENT') {
45
- throw error;
46
- }
47
- }
48
- }
49
- export function isTokenExpired(credentials) {
50
- const expiresAt = new Date(credentials.expiresAt);
51
- const bufferMs = 5 * 60 * 1000;
52
- return Date.now() > expiresAt.getTime() - bufferMs;
53
- }
54
- export async function getValidCredentials(refreshFn) {
55
- const credentials = await getCredentials();
56
- if (!credentials) {
57
- return null;
58
- }
59
- if (isTokenExpired(credentials) && refreshFn) {
60
- try {
61
- const { accessToken, expiresAt } = await refreshFn(credentials.refreshToken);
62
- const updated = { ...credentials, accessToken, expiresAt };
63
- await writeCredentials(updated);
64
- return updated;
65
- }
66
- catch {
67
- return null;
68
- }
69
- }
70
- return credentials;
71
- }
72
- const REPO_ROOT_MARKERS = [
73
- '.git',
74
- 'foir.config.ts',
75
- '.foirrc.ts',
76
- 'foir.config.js',
77
- '.foirrc.js',
78
- 'foir.config.mjs',
79
- '.foirrc.mjs',
80
- ];
81
- /**
82
- * Walk up from cwd looking for markers that indicate the repo root.
83
- * Returns cwd as fallback if no marker is found.
84
- */
85
- function findRepoRoot(from = process.cwd()) {
86
- let dir = from;
87
- while (true) {
88
- for (const marker of REPO_ROOT_MARKERS) {
89
- try {
90
- statSync(join(dir, marker));
91
- return dir;
92
- }
93
- catch {
94
- // not found, continue
95
- }
96
- }
97
- const parent = dirname(dir);
98
- if (parent === dir) {
99
- return from; // filesystem root reached, fallback to cwd
100
- }
101
- dir = parent;
102
- }
103
- }
104
- function getProjectContextDir() {
105
- return join(findRepoRoot(), '.foir');
106
- }
107
- function getProjectContextPath() {
108
- return join(getProjectContextDir(), 'project.json');
109
- }
110
- export async function getProjectContext() {
111
- try {
112
- const content = await fs.readFile(getProjectContextPath(), 'utf-8');
113
- return JSON.parse(content);
114
- }
115
- catch (error) {
116
- if (error.code === 'ENOENT') {
117
- return null;
118
- }
119
- throw error;
120
- }
121
- }
122
- export async function writeProjectContext(project) {
123
- const dir = getProjectContextDir();
124
- await ensureDir(dir);
125
- const filePath = getProjectContextPath();
126
- await fs.writeFile(filePath, JSON.stringify(project, null, 2), {
127
- mode: 0o600,
128
- });
129
- }
130
- export async function deleteProjectContext() {
131
- try {
132
- await fs.unlink(getProjectContextPath());
133
- }
134
- catch (error) {
135
- if (error.code !== 'ENOENT') {
136
- throw error;
137
- }
138
- }
139
- }
package/dist/cli.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
@@ -1,12 +0,0 @@
1
- /**
2
- * Fetches the customer profile schema from the platform GraphQL API for codegen.
3
- */
4
- import type { GraphQLClient } from 'graphql-request';
5
- import type { FieldSchemaForGen } from './field-mapping.js';
6
- export interface CodegenCustomerProfileSchema {
7
- id: string;
8
- fields: FieldSchemaForGen[];
9
- version: number;
10
- }
11
- export declare function fetchCustomerProfileSchema(client: GraphQLClient): Promise<CodegenCustomerProfileSchema | null>;
12
- //# sourceMappingURL=fetch-customer-profile-schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetch-customer-profile-schema.d.ts","sourceRoot":"","sources":["../../src/codegen/fetch-customer-profile-schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAiB9C"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Fetches the customer profile schema from the platform GraphQL API for codegen.
3
- */
4
- import { GetCustomerProfileSchemaDocument } from '../graphql/generated.js';
5
- export async function fetchCustomerProfileSchema(client) {
6
- const data = await client.request(GetCustomerProfileSchemaDocument);
7
- if (!data.customerProfileSchema)
8
- return null;
9
- return {
10
- id: data.customerProfileSchema.id,
11
- version: data.customerProfileSchema.version,
12
- fields: (data.customerProfileSchema.fields ?? []).map((f) => ({
13
- key: f.key,
14
- type: f.type,
15
- label: f.label,
16
- required: f.required ?? undefined,
17
- helpText: f.helpText ?? undefined,
18
- options: f.config,
19
- })),
20
- };
21
- }
@@ -1,58 +0,0 @@
1
- /**
2
- * Fetches models from the platform GraphQL API and transforms them for codegen.
3
- */
4
- import type { GraphQLClient } from 'graphql-request';
5
- import type { FieldSchemaForGen } from './field-mapping.js';
6
- export interface CodegenModelConfig {
7
- records: boolean;
8
- inline: boolean;
9
- publicApi: boolean;
10
- versioning: boolean;
11
- publishing: boolean;
12
- variants: boolean;
13
- customerScoped: boolean;
14
- sharing?: {
15
- enabled: boolean;
16
- requireAcceptance: boolean;
17
- };
18
- embeddings?: {
19
- enabled: boolean;
20
- fields: Array<{
21
- fieldPath: string;
22
- weight?: number;
23
- }>;
24
- };
25
- }
26
- export interface CodegenModel {
27
- key: string;
28
- name: string;
29
- pluralName?: string;
30
- description?: string;
31
- category?: string;
32
- fields: FieldSchemaForGen[];
33
- config: CodegenModelConfig;
34
- hooks?: Record<string, unknown>;
35
- }
36
- /**
37
- * Normalize a field's item type reference into `options.itemType`.
38
- *
39
- * The platform stores the reference in different locations depending on
40
- * how the field was created:
41
- * - `options.itemType` (standard)
42
- * - `config.itemType` (config variant)
43
- * - `config.itemSchema` (inline model schema reference)
44
- * - top-level `itemType` (inline model field definitions)
45
- *
46
- * We consolidate into `options.itemType` so downstream codegen has a
47
- * single location to check.
48
- */
49
- export declare function normalizeField(raw: Record<string, unknown>): FieldSchemaForGen;
50
- export declare function fetchModelsForCodegen(client: GraphQLClient): Promise<CodegenModel[]>;
51
- /**
52
- * Filter models based on pull config options.
53
- */
54
- export declare function filterModels(models: CodegenModel[], options: {
55
- only?: string[];
56
- includeInline?: boolean;
57
- }): CodegenModel[];
58
- //# sourceMappingURL=fetch-models.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetch-models.d.ts","sourceRoot":"","sources":["../../src/codegen/fetch-models.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,iBAAiB,EAAE,OAAO,CAAC;KAC5B,CAAC;IACF,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACvD,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAyBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,iBAAiB,CAyCnB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,YAAY,EAAE,CAAC,CAiBzB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,YAAY,EAAE,EACtB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACpD,YAAY,EAAE,CAahB"}
@@ -1,96 +0,0 @@
1
- /**
2
- * Fetches models from the platform GraphQL API and transforms them for codegen.
3
- */
4
- import { ModelsForCodegenDocument } from '../graphql/generated.js';
5
- function normalizeConfig(raw) {
6
- return {
7
- records: Boolean(raw.records ?? true),
8
- inline: Boolean(raw.inline ?? false),
9
- publicApi: Boolean(raw.publicApi ?? false),
10
- versioning: Boolean(raw.versioning ?? false),
11
- publishing: Boolean(raw.publishing ?? false),
12
- variants: Boolean(raw.variants ?? false),
13
- customerScoped: Boolean(raw.customerScoped ?? false),
14
- sharing: raw.sharing
15
- ? {
16
- enabled: Boolean(raw.sharing.enabled ?? false),
17
- requireAcceptance: Boolean(raw.sharing.requireAcceptance ?? true),
18
- }
19
- : undefined,
20
- embeddings: raw.embeddings,
21
- };
22
- }
23
- /**
24
- * Normalize a field's item type reference into `options.itemType`.
25
- *
26
- * The platform stores the reference in different locations depending on
27
- * how the field was created:
28
- * - `options.itemType` (standard)
29
- * - `config.itemType` (config variant)
30
- * - `config.itemSchema` (inline model schema reference)
31
- * - top-level `itemType` (inline model field definitions)
32
- *
33
- * We consolidate into `options.itemType` so downstream codegen has a
34
- * single location to check.
35
- */
36
- export function normalizeField(raw) {
37
- const field = raw;
38
- const options = { ...(field.options ?? {}) };
39
- // Resolve composite type to its inline schema reference
40
- const resolvedType = field.type === 'composite' && field.config?.schema
41
- ? field.config.schema
42
- : field.type;
43
- // Resolve itemType from all possible locations (first wins)
44
- if (!options.itemType) {
45
- const resolved = field.itemType ??
46
- field.config?.itemType ??
47
- field.config?.itemSchema;
48
- if (resolved) {
49
- options.itemType = resolved;
50
- }
51
- }
52
- // Carry over minItems/maxItems from config
53
- if (field.config?.minItems !== undefined && options.minItems === undefined) {
54
- options.minItems = field.config.minItems;
55
- }
56
- if (field.config?.maxItems !== undefined && options.maxItems === undefined) {
57
- options.maxItems = field.config.maxItems;
58
- }
59
- return {
60
- key: field.key,
61
- type: resolvedType,
62
- label: field.label,
63
- required: field.required,
64
- helpText: field.helpText,
65
- options: Object.keys(options).length > 0 ? options : undefined,
66
- };
67
- }
68
- export async function fetchModelsForCodegen(client) {
69
- const data = await client.request(ModelsForCodegenDocument, {
70
- limit: 500,
71
- });
72
- return data.models.items.map((item) => ({
73
- key: item.key,
74
- name: item.name,
75
- pluralName: item.pluralName ?? undefined,
76
- description: item.description ?? undefined,
77
- category: item.category ?? undefined,
78
- fields: (item.fields ?? []).map((f) => normalizeField(f)),
79
- config: normalizeConfig((item.config ?? {})),
80
- hooks: (item.hooks ?? undefined),
81
- }));
82
- }
83
- /**
84
- * Filter models based on pull config options.
85
- */
86
- export function filterModels(models, options) {
87
- let filtered = models;
88
- if (options.only && options.only.length > 0) {
89
- const onlySet = new Set(options.only);
90
- filtered = filtered.filter((m) => onlySet.has(m.key));
91
- }
92
- if (!options.includeInline) {
93
- filtered = filtered.filter((m) => m.config.records);
94
- }
95
- return filtered;
96
- }
@@ -1,34 +0,0 @@
1
- /**
2
- * Maps EIDE field types to TypeScript types.
3
- * Ported from uniformgen with updates for the unified data layer.
4
- */
5
- export interface TypeMapping {
6
- outputType: string;
7
- inputType: string;
8
- needsImport?: string;
9
- }
10
- export declare const PRIMITIVE_FIELD_TYPES: Set<string>;
11
- export declare function isPrimitiveFieldType(type: string): boolean;
12
- export declare const FIELD_TYPE_MAPPING: Record<string, TypeMapping>;
13
- export interface FieldSchemaForGen {
14
- key: string;
15
- type: string;
16
- label?: string;
17
- required?: boolean;
18
- helpText?: string;
19
- options?: Record<string, unknown>;
20
- }
21
- export declare function getFieldType(field: FieldSchemaForGen, mode?: 'output' | 'input'): string;
22
- export declare function getRequiredImports(fields: FieldSchemaForGen[]): Set<string>;
23
- /**
24
- * Extract model keys referenced by reference-type fields via `referenceTypes`.
25
- * Used to generate parameterized `ReferenceValue<Partial<ModelData>>` types.
26
- */
27
- export declare function getReferenceTypeModelRefs(fields: FieldSchemaForGen[]): Set<string>;
28
- export declare function getInlineSchemaReferences(fields: FieldSchemaForGen[]): Set<string>;
29
- export declare function toCamelCase(str: string): string;
30
- export declare function toPascalCase(str: string): string;
31
- export declare function toUpperSnakeCase(str: string): string;
32
- export declare function sanitizeFieldName(key: string): string;
33
- export declare function generateFieldDef(field: FieldSchemaForGen): string;
34
- //# sourceMappingURL=field-mapping.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field-mapping.d.ts","sourceRoot":"","sources":["../../src/codegen/field-mapping.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,qBAAqB,aAqBhC,CAAC;AAEH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAqD1D,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,iBAAiB,EACxB,IAAI,GAAE,QAAQ,GAAG,OAAkB,GAClC,MAAM,CAqCR;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAW3E;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,iBAAiB,EAAE,GAC1B,GAAG,CAAC,MAAM,CAAC,CAUb;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,iBAAiB,EAAE,GAC1B,GAAG,CAAC,MAAM,CAAC,CAcb;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CA2EjE"}