@ronas-it/nx-generators 0.7.3 → 0.8.1

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 (111) hide show
  1. package/README.md +49 -5
  2. package/generators.json +15 -0
  3. package/package.json +1 -1
  4. package/src/generators/code-checks/files/.eslintrc.json.template +36 -2
  5. package/src/generators/code-checks/generator.js +1 -1
  6. package/src/generators/code-checks/generator.js.map +1 -1
  7. package/src/generators/entity-api/generator.js +13 -19
  8. package/src/generators/entity-api/generator.js.map +1 -1
  9. package/src/generators/expo-app/app-files/app/_layout.tsx.template +21 -13
  10. package/src/generators/expo-app/generator.js +26 -9
  11. package/src/generators/expo-app/generator.js.map +1 -1
  12. package/src/generators/expo-app/i18n/app/en.json +3 -0
  13. package/src/generators/expo-app/i18n/shared/en.json +3 -0
  14. package/src/generators/expo-app/scripts.js +1 -1
  15. package/src/generators/expo-app/scripts.js.map +1 -1
  16. package/src/generators/form/files/__fileName__.ts.template +26 -0
  17. package/src/generators/form/generator.d.ts +4 -0
  18. package/src/generators/form/generator.js +48 -0
  19. package/src/generators/form/generator.js.map +1 -0
  20. package/src/generators/form/schema.d.ts +4 -0
  21. package/src/generators/form/schema.json +29 -0
  22. package/src/generators/form/utils/add-form-usage.d.ts +1 -0
  23. package/src/generators/form/utils/add-form-usage.js +67 -0
  24. package/src/generators/form/utils/add-form-usage.js.map +1 -0
  25. package/src/generators/form/utils/get-form-utils-directory.d.ts +1 -0
  26. package/src/generators/form/utils/get-form-utils-directory.js +24 -0
  27. package/src/generators/form/utils/get-form-utils-directory.js.map +1 -0
  28. package/src/generators/form/utils/index.d.ts +3 -0
  29. package/src/generators/form/utils/index.js +7 -0
  30. package/src/generators/form/utils/index.js.map +1 -0
  31. package/src/generators/form/utils/update-index.d.ts +2 -0
  32. package/src/generators/form/utils/update-index.js +18 -0
  33. package/src/generators/form/utils/update-index.js.map +1 -0
  34. package/src/generators/lib-tags/generator.d.ts +4 -0
  35. package/src/generators/lib-tags/generator.js +53 -0
  36. package/src/generators/lib-tags/generator.js.map +1 -0
  37. package/src/generators/lib-tags/interfaces/context.d.ts +6 -0
  38. package/src/generators/lib-tags/interfaces/context.js +3 -0
  39. package/src/generators/lib-tags/interfaces/context.js.map +1 -0
  40. package/src/generators/lib-tags/interfaces/index.d.ts +1 -0
  41. package/src/generators/lib-tags/interfaces/index.js +5 -0
  42. package/src/generators/lib-tags/interfaces/index.js.map +1 -0
  43. package/src/generators/lib-tags/schema.d.ts +3 -0
  44. package/src/generators/lib-tags/schema.json +14 -0
  45. package/src/generators/lib-tags/utils/check-lib-tags.d.ts +4 -0
  46. package/src/generators/lib-tags/utils/check-lib-tags.js +81 -0
  47. package/src/generators/lib-tags/utils/check-lib-tags.js.map +1 -0
  48. package/src/generators/lib-tags/utils/index.d.ts +1 -0
  49. package/src/generators/lib-tags/utils/index.js +5 -0
  50. package/src/generators/lib-tags/utils/index.js.map +1 -0
  51. package/src/generators/next-app/generator.js +16 -4
  52. package/src/generators/next-app/generator.js.map +1 -1
  53. package/src/generators/react-component/generator.js +3 -8
  54. package/src/generators/react-component/generator.js.map +1 -1
  55. package/src/generators/react-lib/generator.js +37 -11
  56. package/src/generators/react-lib/generator.js.map +1 -1
  57. package/src/generators/react-lib/schema.d.ts +0 -1
  58. package/src/generators/react-lib/schema.json +1 -10
  59. package/src/shared/dependencies.d.ts +6 -0
  60. package/src/shared/dependencies.js +6 -0
  61. package/src/shared/dependencies.js.map +1 -1
  62. package/src/shared/generators/api-client/generator.js +2 -2
  63. package/src/shared/generators/api-client/generator.js.map +1 -1
  64. package/src/shared/generators/app-env/generator.js +2 -2
  65. package/src/shared/generators/app-env/generator.js.map +1 -1
  66. package/src/shared/generators/auth/generator.js +38 -3
  67. package/src/shared/generators/auth/generator.js.map +1 -1
  68. package/src/shared/generators/form-utils/generator.d.ts +6 -0
  69. package/src/shared/generators/form-utils/generator.js +22 -0
  70. package/src/shared/generators/form-utils/generator.js.map +1 -0
  71. package/src/shared/generators/form-utils/index.d.ts +1 -0
  72. package/src/shared/generators/form-utils/index.js +5 -0
  73. package/src/shared/generators/form-utils/index.js.map +1 -0
  74. package/src/shared/generators/form-utils/lib-files/shared/utils/form/src/index.ts.template +1 -0
  75. package/src/shared/generators/form-utils/lib-files/shared/utils/form/src/lib/index.ts.template +2 -0
  76. package/src/shared/generators/form-utils/lib-files/shared/utils/form/src/lib/interfaces/base-schema.ts.template +5 -0
  77. package/src/shared/generators/form-utils/lib-files/shared/utils/form/src/lib/interfaces/index.ts.template +1 -0
  78. package/src/shared/generators/form-utils/lib-files/shared/utils/form/src/lib/types/index.ts.template +1 -0
  79. package/src/shared/generators/form-utils/lib-files/shared/utils/form/src/lib/types/values.ts.template +1 -0
  80. package/src/shared/generators/index.d.ts +1 -0
  81. package/src/shared/generators/index.js +1 -0
  82. package/src/shared/generators/index.js.map +1 -1
  83. package/src/shared/generators/rn-styles/generator.js +2 -2
  84. package/src/shared/generators/rn-styles/generator.js.map +1 -1
  85. package/src/shared/generators/storage/generator.js +2 -2
  86. package/src/shared/generators/storage/generator.js.map +1 -1
  87. package/src/shared/generators/store/expo-app/lib-files/shared/data-access/store/src/store.ts.template +3 -17
  88. package/src/shared/generators/store/generator.d.ts +2 -6
  89. package/src/shared/generators/store/generator.js +2 -2
  90. package/src/shared/generators/store/generator.js.map +1 -1
  91. package/src/shared/generators/store/next-app/lib-files/shared/data-access/store/src/store.ts.template +1 -1
  92. package/src/shared/generators/store/schema.d.ts +7 -0
  93. package/src/shared/generators/store/schema.json +36 -0
  94. package/src/shared/generators/ui-kitten/generator.js +2 -2
  95. package/src/shared/generators/ui-kitten/generator.js.map +1 -1
  96. package/src/shared/utils/cli-utils.d.ts +2 -0
  97. package/src/shared/utils/cli-utils.js +10 -2
  98. package/src/shared/utils/cli-utils.js.map +1 -1
  99. package/src/shared/utils/config-utils.d.ts +19 -0
  100. package/src/shared/utils/config-utils.js +110 -0
  101. package/src/shared/utils/config-utils.js.map +1 -0
  102. package/src/shared/utils/constants.d.ts +3 -0
  103. package/src/shared/utils/constants.js +7 -0
  104. package/src/shared/utils/constants.js.map +1 -0
  105. package/src/shared/utils/index.d.ts +3 -0
  106. package/src/shared/utils/index.js +3 -0
  107. package/src/shared/utils/index.js.map +1 -1
  108. package/src/shared/utils/ts-utils.d.ts +2 -0
  109. package/src/shared/utils/ts-utils.js +21 -0
  110. package/src/shared/utils/ts-utils.js.map +1 -0
  111. /package/src/generators/entity-api/files/models/{entity.ts.template → __entityFileName__.ts.template} +0 -0
package/README.md CHANGED
@@ -112,20 +112,29 @@ Generates a library according to [NX notation](https://nx.dev/concepts/more-conc
112
112
 
113
113
  #### Options
114
114
 
115
- 1. `directory` (optional) - directory for the library (e.g. mobile/account/features/profile-settings)
115
+ 1. `app` (optional) - name of an app or `shared`.
116
116
 
117
- 2. `withComponent` (optional) - generate the library with `lib/component.tsx` file
117
+ 1. `scope` (optional) - name of a scope or `shared`.
118
+ This option is for a library, related to an app.
118
119
 
119
- 3. `dryRun` (optional) - generate the library without creating files
120
+ 1. `type` (optional) - type of library.
121
+ Possible values are `features`, `data-access`, `ui` and `utils`.
122
+
123
+ 1. `name` (optional) - name of a library.
124
+
125
+ 1. `withComponent` (optional) - generate the library with `lib/component.tsx` file.
126
+ This option is for `features` or `ui` library.
127
+
128
+ 1. `dryRun` (optional) - generate the library without creating files
120
129
 
121
130
  #### Example
122
131
 
123
132
  ```sh
124
- npx nx g react-lib --directory=mobile/account/features/profile-settings --withComponent --dryRun
133
+ npx nx g react-lib --app=mobile --scope=account --type=features --name=profile-settings --withComponent --dryRun
125
134
  ```
126
135
  or
127
136
  ```sh
128
- npx nx g react-lib mobile/account/features/profile-settings --withComponent --dryRun
137
+ npx nx g react-lib --dryRun
129
138
  ```
130
139
 
131
140
  ### 6. `react-component`
@@ -164,6 +173,41 @@ Creates an API with related entities in API library. It also updates redux store
164
173
  npx nx g entity-api --name=User --baseEndpoint=users
165
174
  ```
166
175
 
176
+ ### 8. `form`
177
+
178
+ Generates a form schema class and adds its usage to a component or a hook.
179
+
180
+ #### Options
181
+
182
+ 1. `name` (optional) - name of the form (e.g: `profile-settings`)
183
+
184
+ 2. `placeOfUse` (optional) - name of the component or hook, where the form should be
185
+ (e.g: `ProfileSettings` or `useProfileSettings`)
186
+
187
+ #### Example
188
+
189
+ ```sh
190
+ npx nx g form --name=profile-settings --placeOfUse=ProfileSettings
191
+ ```
192
+ or
193
+ ```sh
194
+ npx nx g form profile-settings ProfileSettings
195
+ ```
196
+
197
+ ### 9. `lib-tags`
198
+
199
+ Checks and configures [NX library tags](https://nx.dev/features/enforce-module-boundaries). If your project does not already use library tags, you can add them using this generator.
200
+
201
+ #### Options
202
+
203
+ 1. `silent` (optional) - disables all logs
204
+
205
+ #### Example
206
+
207
+ ```sh
208
+ npx nx g lib-tags
209
+ ```
210
+
167
211
  ### Note
168
212
 
169
213
  Each generator accepts the `--help` argument to see generator instructions.
package/generators.json CHANGED
@@ -39,6 +39,21 @@
39
39
  "factory": "./src/generators/entity-api/generator",
40
40
  "schema": "./src/generators/entity-api/schema.json",
41
41
  "description": "entity-api generator"
42
+ },
43
+ "store": {
44
+ "factory": "./src/shared/generators/store/generator",
45
+ "schema": "./src/shared/generators/store/schema.json",
46
+ "description": "redux store generator"
47
+ },
48
+ "form": {
49
+ "factory": "./src/generators/form/generator",
50
+ "schema": "./src/generators/form/schema.json",
51
+ "description": "form generator"
52
+ },
53
+ "lib-tags": {
54
+ "factory": "./src/generators/lib-tags/generator",
55
+ "schema": "./src/generators/lib-tags/schema.json",
56
+ "description": "lib-tags generator"
42
57
  }
43
58
  }
44
59
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ronas-it/nx-generators",
3
- "version": "0.7.3",
3
+ "version": "0.8.1",
4
4
  "description": "NX generators for Ronas IT projects",
5
5
  "license": "MIT",
6
6
  "author": "Ronas IT",
@@ -13,8 +13,42 @@
13
13
  "allow": [],
14
14
  "depConstraints": [
15
15
  {
16
- "sourceTag": "*",
17
- "onlyDependOnLibsWithTags": ["*"]
16
+ "sourceTag": "app:shared",
17
+ "onlyDependOnLibsWithTags": ["app:shared"]
18
+ },
19
+ {
20
+ "sourceTag": "scope:shared",
21
+ "onlyDependOnLibsWithTags": ["scope:*"]
22
+ },
23
+ {
24
+ "sourceTag": "type:app",
25
+ "onlyDependOnLibsWithTags": [
26
+ "type:features",
27
+ "type:ui",
28
+ "type:utils",
29
+ "type:data-access"
30
+ ]
31
+ },
32
+ {
33
+ "sourceTag": "type:utils",
34
+ "onlyDependOnLibsWithTags": ["type:utils"]
35
+ },
36
+ {
37
+ "sourceTag": "type:data-access",
38
+ "onlyDependOnLibsWithTags": ["type:data-access", "type:utils"]
39
+ },
40
+ {
41
+ "sourceTag": "type:features",
42
+ "onlyDependOnLibsWithTags": [
43
+ "type:features",
44
+ "type:data-access",
45
+ "type:ui",
46
+ "type:utils"
47
+ ]
48
+ },
49
+ {
50
+ "sourceTag": "type:ui",
51
+ "onlyDependOnLibsWithTags": ["type:ui", "type:utils"]
18
52
  }
19
53
  ]
20
54
  }
@@ -9,8 +9,8 @@ const dependencies_1 = require("../../shared/dependencies");
9
9
  const config_1 = require("./config");
10
10
  const scripts_1 = require("./scripts");
11
11
  function codeChecksGenerator(tree, options) {
12
+ var _a, _b;
12
13
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
13
- var _a, _b;
14
14
  const projectRoot = '.';
15
15
  // Delete files
16
16
  tree.delete('.eslintrc.json');
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/code-checks/generator.ts"],"names":[],"mappings":";;;;AAAA,iDAAyC;AACzC,6BAA6B;AAC7B,uCAQoB;AACpB,4DAA4D;AAC5D,qCAA8B;AAE9B,uCAAgC;AAEhC,SAAsB,mBAAmB,CAAC,IAAU,EAAE,OAAkC;;;QACtF,MAAM,WAAW,GAAG,GAAG,CAAC;QAExB,eAAe;QACf,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAE3B,4BAA4B;QAC5B,IAAA,wBAAQ,EAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAExD,MAAM,WAAW,GAAG,IAAA,iBAAQ,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACnD,WAAW,CAAC,aAAa,CAAC,GAAG,gBAAM,CAAC,aAAa,CAAC,CAAC;QACnD,WAAW,CAAC,OAAO,mCAAQ,iBAAO,GAAK,WAAW,CAAC,OAAO,CAAE,CAAC;QAC7D,IAAA,kBAAS,EAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE7C,4BAA4B;QAC5B,MAAM,YAAY,GAAG,IAAA,iBAAQ,EAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;QAC1D,YAAY,CAAC,eAAe,mCAAQ,gBAAM,CAAC,QAAQ,GAAK,YAAY,CAAC,eAAe,CAAE,CAAC;QACvF,IAAA,kBAAS,EAAC,IAAI,EAAE,oBAAoB,EAAE,YAAY,CAAC,CAAC;QAEpD,oBAAoB;QACpB,MAAM,gBAAgB,GAAG,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,0CAAE,QAAQ,EAAE,IAAG,kBAAkB,CAAC;QAClF,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;QAE3C,uBAAuB;QACvB,MAAM,mBAAmB,GAAG,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,0CAAE,QAAQ,EAAE,IAAG,mCAAmC,CAAC;QACzG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;QAEjD,YAAY;QACZ,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAEzE,iCAAiC;QACjC,IAAA,qCAA4B,EAC1B,IAAI,EACJ,EAAE,EACF,8BAAe,CAAC,aAAa,CAAC,CAC/B,CAAC;QAEF,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;QAExB,OAAO,GAAG,EAAE;YACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC;CAAA;AA3CD,kDA2CC;AAED,kBAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/code-checks/generator.ts"],"names":[],"mappings":";;;;AAAA,iDAAyC;AACzC,6BAA6B;AAC7B,uCAQoB;AACpB,4DAA4D;AAC5D,qCAA8B;AAE9B,uCAAgC;AAEhC,SAAsB,mBAAmB,CAAC,IAAU,EAAE,OAAkC;;;QACtF,MAAM,WAAW,GAAG,GAAG,CAAC;QAExB,eAAe;QACf,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAE3B,4BAA4B;QAC5B,IAAA,wBAAQ,EAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAExD,MAAM,WAAW,GAAG,IAAA,iBAAQ,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACnD,WAAW,CAAC,aAAa,CAAC,GAAG,gBAAM,CAAC,aAAa,CAAC,CAAC;QACnD,WAAW,CAAC,OAAO,mCAAQ,iBAAO,GAAK,WAAW,CAAC,OAAO,CAAE,CAAC;QAC7D,IAAA,kBAAS,EAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE7C,4BAA4B;QAC5B,MAAM,YAAY,GAAG,IAAA,iBAAQ,EAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;QAC1D,YAAY,CAAC,eAAe,mCAAQ,gBAAM,CAAC,QAAQ,GAAK,YAAY,CAAC,eAAe,CAAE,CAAC;QACvF,IAAA,kBAAS,EAAC,IAAI,EAAE,oBAAoB,EAAE,YAAY,CAAC,CAAC;QAEpD,oBAAoB;QACpB,MAAM,gBAAgB,GAAG,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,0CAAE,QAAQ,EAAE,IAAG,kBAAkB,CAAC;QAClF,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;QAE3C,uBAAuB;QACvB,MAAM,mBAAmB,GAAG,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,0CAAE,QAAQ,EAAE,IAAG,mCAAmC,CAAC;QACzG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;QAEjD,YAAY;QACZ,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAEzE,iCAAiC;QACjC,IAAA,qCAA4B,EAC1B,IAAI,EACJ,EAAE,EACF,8BAAe,CAAC,aAAa,CAAC,CAC/B,CAAC;QAEF,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;QAExB,OAAO,GAAG,EAAE;YACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC;;CACH;AA3CD,kDA2CC;AAED,kBAAe,mBAAmB,CAAC"}
@@ -22,13 +22,13 @@ function entityApiGenerator(tree, options) {
22
22
  if (apiClientLibsPaths.length > 1) {
23
23
  apiClientLibsPaths[0] = yield autocomplete({
24
24
  message: 'Select the api client library path:',
25
- source: (input) => (0, utils_1.filterSource)(input, apiClientLibsPaths)
25
+ source: (input) => (0, utils_1.filterSource)(input, apiClientLibsPaths),
26
26
  });
27
27
  }
28
28
  if (apiLibsPaths.length > 1) {
29
29
  apiLibsPaths[0] = yield autocomplete({
30
30
  message: 'Select the api library path:',
31
- source: (input) => (0, utils_1.filterSource)(input, apiLibsPaths)
31
+ source: (input) => (0, utils_1.filterSource)(input, apiLibsPaths),
32
32
  });
33
33
  }
34
34
  const apiDirectory = (0, utils_1.searchAliasPath)(apiLibsPaths[0]);
@@ -37,17 +37,13 @@ function entityApiGenerator(tree, options) {
37
37
  const libRootPath = `${libPath}/lib`;
38
38
  options.name = options.name || (yield (0, utils_1.askQuestion)('Enter the name of the entity (e.g: User): '));
39
39
  const apiName = (0, lodash_1.kebabCase)(options.name);
40
- options.baseEndpoint = options.baseEndpoint || (yield (0, utils_1.askQuestion)('Enter the base endpoint (e.g: /users): ', `/${apiName}`));
40
+ options.baseEndpoint =
41
+ options.baseEndpoint || (yield (0, utils_1.askQuestion)('Enter the base endpoint (e.g: /users): ', `/${apiName}`));
41
42
  const apiPath = `${libRootPath}/${apiName}`;
42
43
  const entityName = (0, lodash_1.startCase)((0, lodash_1.camelCase)(apiName)).replace(/\s+/g, '');
43
44
  (0, devkit_1.generateFiles)(tree, path.join(__dirname, `files`), apiPath, Object.assign(Object.assign({}, options), { apiName: (0, lodash_1.camelCase)(options.name), entityName, entityFileName: apiName, apiClientDirectory, baseEndpoint: options.baseEndpoint.startsWith('/') ? options.baseEndpoint : `/${options.baseEndpoint}` }));
44
45
  tree.rename(`${apiPath}/models/entity.ts`, `${apiPath}/models/${apiName}.ts`);
45
- const appendFileContent = (path, endContent) => {
46
- const content = tree.read(path, 'utf-8');
47
- const contentUpdate = content + endContent;
48
- tree.write(path, contentUpdate);
49
- };
50
- appendFileContent(`${libRootPath}/index.ts`, `export * from './${apiName}';\n`);
46
+ (0, utils_1.appendFileContent)(`${libRootPath}/index.ts`, `export * from './${apiName}';\n`, tree);
51
47
  const storeLibsPaths = (0, utils_1.searchNxLibsPaths)(nxLibsPaths, 'data-access/store/src', 'endsWith');
52
48
  if (!storeLibsPaths.length) {
53
49
  yield (0, devkit_1.formatFiles)(tree);
@@ -56,7 +52,7 @@ function entityApiGenerator(tree, options) {
56
52
  if (storeLibsPaths.length > 1) {
57
53
  storeLibsPaths[0] = yield autocomplete({
58
54
  message: 'Select the store library path:',
59
- source: (input) => (0, utils_1.filterSource)(input, storeLibsPaths)
55
+ source: (input) => (0, utils_1.filterSource)(input, storeLibsPaths),
60
56
  });
61
57
  }
62
58
  // Update redux store
@@ -64,22 +60,20 @@ function entityApiGenerator(tree, options) {
64
60
  const project = new ts_morph_1.Project({
65
61
  manipulationSettings: {
66
62
  indentationText: ts_morph_1.IndentationText.TwoSpaces,
67
- quoteKind: ts_morph_1.QuoteKind.Single
68
- }
63
+ quoteKind: ts_morph_1.QuoteKind.Single,
64
+ },
69
65
  });
70
66
  const store = project.addSourceFileAtPath(`${storeLibsPaths[0]}/store.ts`);
71
- // TODO: create declaration if not exists
72
- const apiImportsDeclaration = store.getImportDeclarationOrThrow((node) => node.getModuleSpecifierValue() === apiDirectory);
73
- apiImportsDeclaration.addNamedImport(apiNameDeclaration);
67
+ (0, utils_1.addNamedImport)(apiNameDeclaration, apiDirectory, store);
74
68
  const rootReducer = store.getVariableDeclarationOrThrow('rootReducer');
75
- rootReducer.getInitializerIfKindOrThrow(ts_morph_1.SyntaxKind.ObjectLiteralExpression)
76
- .addProperty({
69
+ rootReducer.getInitializerIfKindOrThrow(ts_morph_1.SyntaxKind.ObjectLiteralExpression).addProperty({
77
70
  name: `[${apiNameDeclaration}.reducerPath]`,
78
71
  initializer: `${apiNameDeclaration}.reducer`,
79
- kind: ts_morph_1.StructureKind.PropertyAssignment
72
+ kind: ts_morph_1.StructureKind.PropertyAssignment,
80
73
  });
81
74
  const middlewares = store.getVariableDeclarationOrThrow('middlewares');
82
- middlewares.getInitializerIfKindOrThrow(ts_morph_1.SyntaxKind.ArrayLiteralExpression)
75
+ middlewares
76
+ .getInitializerIfKindOrThrow(ts_morph_1.SyntaxKind.ArrayLiteralExpression)
83
77
  .addElement(`${apiNameDeclaration}.middleware`);
84
78
  project.saveSync();
85
79
  yield (0, devkit_1.formatFiles)(tree);
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/entity-api/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/entity-api/generator.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,38 @@
1
- import { store } from '<%= formatDirectory() %>/shared/data-access/store';
1
+ <% if(isStoreEnabled) { %> import { store } from '<%= formatDirectory() %>/shared/data-access/store';<% } %>
2
+ import { setLanguage } from '@ronas-it/react-native-common-modules';
2
3
  <% if(isUIKittenEnabled) { %>
3
4
  import { UserThemeProvider } from '<%= formatDirectory() %>/shared/features/user-theme-provider';
4
5
  <% } %>
5
- import { storeActions } from '@ronas-it/rtkq-entity-api';
6
+ <% if(isStoreEnabled) { %>import { storeActions } from '@ronas-it/rtkq-entity-api';<% } %>
6
7
  import { Stack } from 'expo-router';
7
- import { ReactElement, useEffect } from 'react';
8
- import { Provider, useDispatch } from 'react-redux';
8
+ import { ReactElement<% if(isStoreEnabled) { %>, useEffect<% } %> } from 'react';
9
+ <% if(isStoreEnabled) { %>import { Provider, useDispatch } from 'react-redux';<% } %>
9
10
 
10
11
  export { ErrorBoundary } from 'expo-router';
11
12
 
13
+ const translations = {
14
+ en: {
15
+ ...require('i18n/<%= appDirectory %>/app/en.json'),
16
+ ...require('i18n/<%= appDirectory %>/shared/en.json')
17
+ }
18
+ };
19
+
20
+ const useLanguage = setLanguage(translations, 'en');
21
+
12
22
  // eslint-disable-next-line @typescript-eslint/naming-convention
13
23
  export const unstable_settings = {
14
24
  initialRouteName: 'index',
15
25
  };
16
26
 
17
27
  function App(): ReactElement {
28
+ <% if(isStoreEnabled) { %>
18
29
  const dispatch = useDispatch();
30
+ useLanguage('en');
19
31
 
20
32
  useEffect(() => {
21
33
  dispatch(storeActions.init());
22
34
  }, []);
23
-
35
+ <% } %>
24
36
  return (
25
37
  <Stack>
26
38
  <Stack.Screen name='index' />
@@ -30,14 +42,10 @@ function App(): ReactElement {
30
42
 
31
43
  export default function RootLayout(): ReactElement | null {
32
44
  return (
33
- <Provider store={store}>
34
- <% if(isUIKittenEnabled) { %>
35
- <UserThemeProvider>
36
- <% } %>
45
+ <% if(isStoreEnabled) { %><Provider store={store}><% } %>
46
+ <% if(isUIKittenEnabled) { %><UserThemeProvider><% } %>
37
47
  <App />
38
- <% if(isUIKittenEnabled) { %>
39
- </UserThemeProvider>
40
- <% } %>
41
- </Provider>
48
+ <% if(isUIKittenEnabled) { %></UserThemeProvider><% } %>
49
+ <% if(isStoreEnabled) { %></Provider><% } %>
42
50
  );
43
51
  }
@@ -14,20 +14,35 @@ const utils_1 = require("../../shared/utils");
14
14
  function expoAppGenerator(tree, options) {
15
15
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
16
16
  const appRoot = `apps/${options.directory}`;
17
+ const i18nRoot = `i18n/${options.directory}`;
17
18
  const appTestFolder = `apps/${options.directory}-e2e`;
18
- const libPath = `@${options.name}/${options.directory}`;
19
+ const libPath = `${(0, utils_1.getImportPathPrefix)(tree)}/${options.directory}`;
20
+ const tags = [`app:${options.directory}`, 'type:app'];
19
21
  // Install @nx/expo plugin
20
22
  (0, child_process_1.execSync)('npx nx add @nx/expo', { stdio: 'inherit' });
21
23
  if (!(0, fs_1.existsSync)(appRoot)) {
22
- (0, child_process_1.execSync)(`npx nx g @nx/expo:app ${options.name} --directory=apps/${options.directory} --projectNameAndRootFormat=as-provided --unitTestRunner=none --e2eTestRunner=none`, { stdio: 'inherit' });
24
+ (0, child_process_1.execSync)(`npx nx g @nx/expo:app ${options.name} --directory=apps/${options.directory} --tags="${tags.join(', ')}" --projectNameAndRootFormat=as-provided --unitTestRunner=none --e2eTestRunner=none`, { stdio: 'inherit' });
23
25
  }
24
26
  // Generate shared libs
25
- (0, generators_1.runStoreGenerator)(tree, Object.assign(Object.assign({}, options), { baseGeneratorType: enums_1.BaseGeneratorType.EXPO_APP }));
26
- (0, generators_1.runAppEnvGenerator)(tree, options);
27
- (0, generators_1.runApiClientGenerator)(tree, options);
28
- (0, generators_1.runStorageGenerator)(tree, options);
29
- (0, generators_1.runAuthGenerator)(tree, options);
30
- (0, generators_1.runRNStylesGenerator)(tree, options);
27
+ yield (0, generators_1.runAppEnvGenerator)(tree, options);
28
+ yield (0, generators_1.runStorageGenerator)(tree, options);
29
+ yield (0, generators_1.runRNStylesGenerator)(tree, options);
30
+ const shouldGenerateStoreLib = (yield (0, utils_1.askQuestion)('Do you want to create store lib? (y/n): ')) === 'y';
31
+ if (shouldGenerateStoreLib) {
32
+ (0, child_process_1.execSync)(`npx nx g store ${options.name} ${options.directory} ${enums_1.BaseGeneratorType.EXPO_APP}`, { stdio: 'inherit' });
33
+ }
34
+ const shouldGenerateApiClientLib = shouldGenerateStoreLib && (yield (0, utils_1.askQuestion)('Do you want to create api client lib? (y/n): ')) === 'y';
35
+ if (shouldGenerateApiClientLib) {
36
+ yield (0, generators_1.runApiClientGenerator)(tree, options);
37
+ }
38
+ const shouldGenerateAuthLibs = shouldGenerateApiClientLib && (yield (0, utils_1.askQuestion)('Do you want to create auth lib? (y/n): ')) === 'y';
39
+ if (shouldGenerateAuthLibs) {
40
+ yield (0, generators_1.runAuthGenerator)(tree, options);
41
+ }
42
+ const shouldGenerateFormUtilsLib = (yield (0, utils_1.askQuestion)('Do you want to create a lib with the form utils? (y/n): ')) === 'y';
43
+ if (shouldGenerateFormUtilsLib) {
44
+ (0, generators_1.runFormUtilsGenerator)(tree, options);
45
+ }
31
46
  // Workaround: Even with the '--e2eTestRunner=none' parameter, the test folder is created. We delete it manually.
32
47
  if ((0, fs_1.existsSync)(appTestFolder)) {
33
48
  (0, fs_1.rmSync)(appTestFolder, { recursive: true, force: true });
@@ -50,7 +65,9 @@ function expoAppGenerator(tree, options) {
50
65
  (0, devkit_1.writeJson)(tree, appPackagePath, appPackageJson);
51
66
  // Add app files
52
67
  (0, devkit_1.generateFiles)(tree, path.join(__dirname, 'app-files'), appRoot, Object.assign(Object.assign({}, options), { formatName: utils_1.formatName,
53
- formatAppIdentifier: utils_1.formatAppIdentifier, formatDirectory: () => libPath, isUIKittenEnabled: false, appDirectory: options.directory }));
68
+ formatAppIdentifier: utils_1.formatAppIdentifier, formatDirectory: () => libPath, isUIKittenEnabled: false, isStoreEnabled: shouldGenerateStoreLib, appDirectory: options.directory }));
69
+ (0, utils_1.addNxAppTag)(tree, options.directory);
70
+ (0, devkit_1.generateFiles)(tree, path.join(__dirname, 'i18n'), i18nRoot, {});
54
71
  // Add dependencies
55
72
  (0, devkit_1.addDependenciesToPackageJson)(tree, Object.assign(Object.assign({}, dependencies_1.dependencies['expo-app']), dependencies_1.dependencies['expo-app-root']), Object.assign(Object.assign({}, dependencies_1.devDependencies['expo-app']), dependencies_1.devDependencies['expo-app-root']));
56
73
  (0, devkit_1.addDependenciesToPackageJson)(tree, dependencies_1.dependencies['expo-app'], dependencies_1.devDependencies['expo-app'], appPackagePath);
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/expo-app/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/expo-app/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "APP": {}
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "SHARED": {}
3
+ }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = {
4
- 'start': 'npx expo start',
4
+ 'start': 'cross-env EXPO_PUBLIC_APP_ENV=development npx expo start',
5
5
  'start:prod': 'cross-env EXPO_PUBLIC_APP_ENV=production npx expo start',
6
6
  'build:dev': 'eas build --no-wait -p all --profile=development',
7
7
  'build:debug': 'npm run build:dev -- --profile=debug',
@@ -1 +1 @@
1
- {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/expo-app/scripts.ts"],"names":[],"mappings":";;AAAA,kBAAe;IACb,OAAO,EAAE,gBAAgB;IACzB,YAAY,EAAE,yDAAyD;IACvE,WAAW,EAAE,kDAAkD;IAC/D,aAAa,EAAE,sCAAsC;IACrD,YAAY,EAAE,2CAA2C;IACzD,YAAY,EAAE,2EAA2E;IACzF,aAAa,EAAE,yEAAyE;IACxF,gBAAgB,EAAE,6FAA6F;IAC/G,iBAAiB,EAAE,2FAA2F;CAC/G,CAAC"}
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/expo-app/scripts.ts"],"names":[],"mappings":";;AAAA,kBAAe;IACb,OAAO,EAAE,0DAA0D;IACnE,YAAY,EAAE,yDAAyD;IACvE,WAAW,EAAE,kDAAkD;IAC/D,aAAa,EAAE,sCAAsC;IACrD,YAAY,EAAE,2CAA2C;IACzD,YAAY,EAAE,2EAA2E;IACzF,aAAa,EAAE,yEAAyE;IACxF,gBAAgB,EAAE,6FAA6F;IAC/G,iBAAiB,EAAE,2FAA2F;CAC/G,CAAC"}
@@ -0,0 +1,26 @@
1
+ import * as Yup from 'yup';
2
+ import { BaseFormSchema, FormValues } from '<%= formUtilsDirectory %>';
3
+
4
+ export class <%= className %> implements BaseFormSchema<<%= className %>> {
5
+ // Add fields here, for example,
6
+ // public email: string;
7
+
8
+ public get formValues(): FormValues<<%= className %>> {
9
+ return {
10
+ // Add fields here, for example,
11
+ // email: this.email
12
+ };
13
+ }
14
+
15
+ public static get validationSchema(): Yup.ObjectSchema<FormValues<<%= className %>>> {
16
+ return Yup.object().shape({
17
+ // Add validation rules here, for example,
18
+ // email: Yup.string().required().email()
19
+ });
20
+ }
21
+
22
+ constructor(schema?: Partial<<%= className %>>) {
23
+ // Add initial values here, for example,
24
+ // this.email = schema?.email || ''
25
+ }
26
+ }
@@ -0,0 +1,4 @@
1
+ import { Tree } from '@nx/devkit';
2
+ import { FormGeneratorSchema } from './schema';
3
+ export declare function formGenerator(tree: Tree, options: FormGeneratorSchema): Promise<() => void>;
4
+ export default formGenerator;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formGenerator = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const devkit_1 = require("@nx/devkit");
6
+ const path = require("path");
7
+ const utils_1 = require("../../shared/utils");
8
+ const dependencies_1 = require("../../shared/dependencies");
9
+ const utils_2 = require("./utils");
10
+ function formGenerator(tree, options) {
11
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
12
+ // Get input data
13
+ const { default: autocomplete } = yield (0, utils_1.dynamicImport)('inquirer-autocomplete-standalone');
14
+ const availableLibsPaths = (0, utils_1.getNxLibsPaths)([utils_1.LibraryType.FEATURES, utils_1.LibraryType.UI]);
15
+ const libPath = yield autocomplete({
16
+ message: 'Enter the library path: ',
17
+ source: (input) => tslib_1.__awaiter(this, void 0, void 0, function* () {
18
+ const filteredNxLibsPaths = (0, utils_1.searchNxLibsPaths)(availableLibsPaths, input);
19
+ return filteredNxLibsPaths.map((path) => ({ value: path }));
20
+ })
21
+ });
22
+ const fileName = options.name;
23
+ const placeOfUse = options.placeOfUse;
24
+ // Generate form class
25
+ const formsPath = `${libPath}/lib/forms`;
26
+ const formFilePath = `${formsPath}/${fileName}.ts`;
27
+ if (tree.exists(formFilePath)) {
28
+ throw new Error('The form already exists');
29
+ }
30
+ const formUtilsDirectory = yield (0, utils_2.getFormUtilsDirectory)();
31
+ const formClassName = `${(0, utils_1.formatName)(fileName, true)}FormSchema`;
32
+ (0, devkit_1.generateFiles)(tree, path.join(__dirname, `files`), formsPath, { className: formClassName, fileName, formUtilsDirectory });
33
+ (0, utils_2.updateIndex)(formsPath, fileName, tree);
34
+ // Add form usage
35
+ if (placeOfUse) {
36
+ yield (0, utils_2.addFormUsage)(libPath, placeOfUse, formClassName);
37
+ }
38
+ yield (0, devkit_1.formatFiles)(tree);
39
+ // Install dependencies
40
+ (0, devkit_1.addDependenciesToPackageJson)(tree, dependencies_1.dependencies.form, {});
41
+ return () => {
42
+ (0, devkit_1.installPackagesTask)(tree);
43
+ };
44
+ });
45
+ }
46
+ exports.formGenerator = formGenerator;
47
+ exports.default = formGenerator;
48
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/form/generator.ts"],"names":[],"mappings":";;;;AAAA,uCAAiH;AACjH,6BAA6B;AAE7B,8CAA+G;AAC/G,4DAAyD;AACzD,mCAA2E;AAE3E,SAAsB,aAAa,CAAC,IAAU,EAAE,OAA4B;;QAC1E,iBAAiB;QACjB,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,qBAAa,EAAoD,kCAAkC,CAAC,CAAC;QAC7I,MAAM,kBAAkB,GAAG,IAAA,sBAAc,EAAC,CAAC,mBAAW,CAAC,QAAQ,EAAE,mBAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC;YACjC,OAAO,EAAE,0BAA0B;YACnC,MAAM,EAAE,CAAO,KAAK,EAAE,EAAE;gBACtB,MAAM,mBAAmB,GAAG,IAAA,yBAAiB,EAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;gBAExE,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YAC7D,CAAC,CAAA;SACF,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;QAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAEtC,sBAAsB;QACtB,MAAM,SAAS,GAAG,GAAG,OAAO,YAAY,CAAC;QACzC,MAAM,YAAY,GAAG,GAAG,SAAS,IAAI,QAAQ,KAAK,CAAC;QACnD,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,IAAA,6BAAqB,GAAE,CAAC;QACzD,MAAM,aAAa,GAAG,GAAG,IAAA,kBAAU,EAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC;QAChE,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC1H,IAAA,mBAAW,EAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEvC,iBAAiB;QACjB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAA,oBAAY,EAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;QAExB,uBAAuB;QACvB,IAAA,qCAA4B,EAAC,IAAI,EAAE,2BAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1D,OAAO,GAAG,EAAE;YACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC;CAAA;AAvCD,sCAuCC;AAED,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface FormGeneratorSchema {
2
+ name?: string;
3
+ placeOfUse?: string;
4
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "$id": "Form",
4
+ "title": "",
5
+ "type": "object",
6
+ "properties": {
7
+ "name": {
8
+ "type": "string",
9
+ "description": "Name of the form",
10
+ "default": "",
11
+ "$default": {
12
+ "$source": "argv",
13
+ "index": 0
14
+ },
15
+ "x-prompt": "Enter the name of the form (e.g: profile-settings)"
16
+ },
17
+ "placeOfUse": {
18
+ "type": "string",
19
+ "description": "Name of the component or hook, where the form should be",
20
+ "default": "",
21
+ "$default": {
22
+ "$source": "argv",
23
+ "index": 1
24
+ },
25
+ "x-prompt": "Enter the name of the place, where the form should be (e.g: component ProfileSettings or hook useProfileSettings). If it's not necessary, just press Enter"
26
+ }
27
+ },
28
+ "required": []
29
+ }
@@ -0,0 +1 @@
1
+ export declare function addFormUsage(libPath: string, placeOfUseName: string, formClassName: string): Promise<void>;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addFormUsage = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const ts_morph_1 = require("ts-morph");
6
+ const utils_1 = require("../../../shared/utils");
7
+ function getFormUsageCode(formClassName) {
8
+ return `const formSchema = new ${formClassName}();
9
+ const form = useForm({
10
+ defaultValues: formSchema.formValues,
11
+ resolver: yupResolver(${formClassName}.validationSchema)
12
+ });\n\n`;
13
+ }
14
+ function getForwardRefFunction(variable) {
15
+ const callExpressionInitializer = variable.getInitializerIfKind(ts_morph_1.SyntaxKind.CallExpression);
16
+ const hasForwardRef = (callExpressionInitializer === null || callExpressionInitializer === void 0 ? void 0 : callExpressionInitializer.getExpression().getText()) === 'forwardRef';
17
+ if (!hasForwardRef) {
18
+ throw new Error('Could not find forwardRef');
19
+ }
20
+ const argument = callExpressionInitializer.getArguments()[0];
21
+ const hasComponentFunction = argument && [ts_morph_1.SyntaxKind.FunctionExpression, ts_morph_1.SyntaxKind.ArrowFunction].includes(argument.getKind());
22
+ if (!hasComponentFunction) {
23
+ throw new Error('Could not find a component function in forwardRef');
24
+ }
25
+ return argument.asKind(argument.getKind() === ts_morph_1.SyntaxKind.FunctionExpression ? ts_morph_1.SyntaxKind.FunctionExpression : ts_morph_1.SyntaxKind.ArrowFunction);
26
+ }
27
+ function getPlaceOfUse(file, placeOfUseName) {
28
+ const placeOfUseFunction = file.getFunction(placeOfUseName);
29
+ if (placeOfUseFunction) {
30
+ return placeOfUseFunction;
31
+ }
32
+ const variable = file.getVariableDeclaration(placeOfUseName);
33
+ if (!variable) {
34
+ throw new Error(`Could not find the place where the form should be used (${placeOfUseName}).`);
35
+ }
36
+ return variable.getInitializerIfKind(ts_morph_1.SyntaxKind.FunctionExpression)
37
+ || variable.getInitializerIfKind(ts_morph_1.SyntaxKind.ArrowFunction)
38
+ || getForwardRefFunction(variable);
39
+ }
40
+ function addFormUsage(libPath, placeOfUseName, formClassName) {
41
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
42
+ const project = new ts_morph_1.Project({
43
+ manipulationSettings: {
44
+ indentationText: ts_morph_1.IndentationText.TwoSpaces,
45
+ quoteKind: ts_morph_1.QuoteKind.Single
46
+ }
47
+ });
48
+ const files = project.addSourceFilesAtPaths([`${libPath}/lib/**/*.tsx`, `${libPath}/lib/**/*.ts`]);
49
+ const file = files.find((file) => file.getFunction(placeOfUseName) || file.getVariableDeclaration(placeOfUseName));
50
+ if (!file) {
51
+ throw new Error('Could not find the place where the form should be used.');
52
+ }
53
+ const pathToForm = file.getFilePath().includes('components')
54
+ ? '../../forms'
55
+ : file.getFilePath().includes('hooks')
56
+ ? '../forms'
57
+ : './forms';
58
+ (0, utils_1.addNamedImport)(formClassName, pathToForm, file);
59
+ (0, utils_1.addNamedImport)('useForm', 'react-hook-form', file);
60
+ (0, utils_1.addNamedImport)('yupResolver', '@hookform/resolvers/yup', file);
61
+ const placeOfUse = getPlaceOfUse(file, placeOfUseName);
62
+ placeOfUse.setBodyText(`${getFormUsageCode(formClassName)}${placeOfUse.getBodyText()}`);
63
+ project.saveSync();
64
+ });
65
+ }
66
+ exports.addFormUsage = addFormUsage;
67
+ //# sourceMappingURL=add-form-usage.js.map