@ronas-it/nx-generators 0.15.0-alpha.0 → 0.15.0-alpha.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.
- package/README.md +24 -2
- package/package.json +1 -1
- package/src/shared/dependencies.d.ts +1 -0
- package/src/shared/dependencies.js +1 -0
- package/src/shared/dependencies.js.map +1 -1
- package/src/shared/generators/navigation-utils/{next-app-lib-files/shared/utils/navigation → filtering-search-params-lib-files/shared/utils/filtering-search-params}/src/lib/hooks/use-filtering-search-params.ts.template +28 -7
- package/src/shared/generators/navigation-utils/filtering-search-params-lib-files/shared/utils/filtering-search-params/src/lib/index.ts.template +2 -0
- package/src/shared/generators/navigation-utils/generator.js +5 -18
- package/src/shared/generators/navigation-utils/generator.js.map +1 -1
- package/src/shared/generators/navigation-utils/navigation-lib-files/shared/utils/navigation/src/index.ts.template +1 -0
- package/src/shared/generators/navigation-utils/utils/index.d.ts +1 -0
- package/src/shared/generators/navigation-utils/utils/index.js +5 -0
- package/src/shared/generators/navigation-utils/utils/index.js.map +1 -0
- package/src/shared/generators/navigation-utils/utils/setup-lib.d.ts +2 -0
- package/src/shared/generators/navigation-utils/utils/setup-lib.js +17 -0
- package/src/shared/generators/navigation-utils/utils/setup-lib.js.map +1 -0
- /package/src/shared/generators/navigation-utils/{common-lib-files/shared/utils/navigation → filtering-search-params-lib-files/shared/utils/filtering-search-params}/src/index.ts.template +0 -0
- /package/src/shared/generators/navigation-utils/{next-app-lib-files/shared/utils/navigation → filtering-search-params-lib-files/shared/utils/filtering-search-params}/src/lib/hooks/index.ts.template +0 -0
- /package/src/shared/generators/navigation-utils/{next-app-lib-files/shared/utils/navigation → filtering-search-params-lib-files/shared/utils/filtering-search-params}/src/lib/types/filtering-search-params.ts.template +0 -0
- /package/src/shared/generators/navigation-utils/{next-app-lib-files/shared/utils/navigation → filtering-search-params-lib-files/shared/utils/filtering-search-params}/src/lib/types/index.ts.template +0 -0
- /package/src/shared/generators/navigation-utils/{common-lib-files → navigation-lib-files}/shared/utils/navigation/src/lib/config.ts.template +0 -0
- /package/src/shared/generators/navigation-utils/{common-lib-files → navigation-lib-files}/shared/utils/navigation/src/lib/index.ts.template +0 -0
- /package/src/shared/generators/navigation-utils/{common-lib-files → navigation-lib-files}/shared/utils/navigation/src/lib/utils/get-link-builder.ts.template +0 -0
- /package/src/shared/generators/navigation-utils/{common-lib-files → navigation-lib-files}/shared/utils/navigation/src/lib/utils/get-resource-path.ts.template +0 -0
- /package/src/shared/generators/navigation-utils/{common-lib-files → navigation-lib-files}/shared/utils/navigation/src/lib/utils/index.ts.template +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,28 @@
|
|
|
1
1
|
# Nx Generators
|
|
2
2
|
|
|
3
|
-
Nx generators for
|
|
3
|
+
This package provides a set of [Nx](https://nx.dev/getting-started/intro) generators that help maintain a consistent project structure, enforce best practices, and automate common development tasks. It is designed to streamline and standardize the development workflow for monorepos with React Native and/or Next.js apps.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Automated setup**: Quick setup of new projects with pre-configured [best practices](#best-practices)
|
|
8
|
+
- **Cross-platform support**: Generators for both web (Next.js) and mobile (RN Expo) applications
|
|
9
|
+
- **Code quality tools**: Built-in configuration for ESLint, Prettier, and TypeScript pre-commit checks
|
|
10
|
+
- **Library management**: Tools for creating, moving, renaming, and managing libraries with pre-defined boundaries
|
|
11
|
+
- **Component generation**: Automated creation of components, form interaction, and other utility tools
|
|
12
|
+
- **Data access setup**: State management and API interaction setup using [Redux Toolkit](https://redux-toolkit.js.org/) and [RTKQ Entity API](https://github.com/RonasIT/rtkq-entity-api)
|
|
13
|
+
- **Internationalization**: Built-in support for i18n in both Next.js and RN Expo applications
|
|
14
|
+
|
|
15
|
+
See full list of generators [below](#generators-overview).
|
|
16
|
+
|
|
17
|
+
## Best Practices
|
|
18
|
+
|
|
19
|
+
The generators enforce several best practices according to [Nx concepts](https://nx.dev/concepts/decisions):
|
|
20
|
+
|
|
21
|
+
- Scalable [monorepo organization](https://nx.dev/concepts/decisions/why-monorepos)
|
|
22
|
+
- Consistent [project structure](https://nx.dev/concepts/decisions/folder-structure)
|
|
23
|
+
- Clear [libraries hierarchy](https://nx.dev/concepts/decisions/project-dependency-rules)
|
|
24
|
+
- Proper [module boundaries](https://nx.dev/features/enforce-module-boundaries)
|
|
25
|
+
- Streamlined [dependency management](https://nx.dev/concepts/decisions/dependency-management)
|
|
4
26
|
|
|
5
27
|
## Usage
|
|
6
28
|
|
|
@@ -120,7 +142,7 @@ npx nx g next-app my-app web
|
|
|
120
142
|
|
|
121
143
|
### 5. `react-lib`
|
|
122
144
|
|
|
123
|
-
Generates a library according to [Nx notation](https://nx.dev/concepts/
|
|
145
|
+
Generates a library according to [Nx notation](https://nx.dev/concepts/decisions/project-dependency-rules).
|
|
124
146
|
|
|
125
147
|
#### Options
|
|
126
148
|
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../../plugin/src/shared/dependencies.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG;IAC1B,UAAU,EAAE;QACV,uCAAuC,EAAE,QAAQ;QACjD,mBAAmB,EAAE,QAAQ;QAC7B,gBAAgB,EAAE,SAAS;QAC3B,iBAAiB,EAAE,QAAQ;QAC3B,aAAa,EAAE,SAAS;QACxB,gCAAgC,EAAE,SAAS;QAC3C,sBAAsB,EAAE,QAAQ;QAChC,cAAc,EAAE,QAAQ;QACxB,iBAAiB,EAAE,QAAQ;QAC3B,cAAc,EAAE,UAAU;QAC1B,eAAe,EAAE,QAAQ;QACzB,WAAW,EAAE,UAAU;KACxB;IACD,eAAe,EAAE;QACf,sCAAsC;QACtC,yEAAyE;QACzE,8BAA8B,EAAE,QAAQ;KACzC;IACD,UAAU,EAAE;QACV,WAAW,EAAE,SAAS;QACtB,WAAW,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../../plugin/src/shared/dependencies.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG;IAC1B,UAAU,EAAE;QACV,uCAAuC,EAAE,QAAQ;QACjD,mBAAmB,EAAE,QAAQ;QAC7B,gBAAgB,EAAE,SAAS;QAC3B,iBAAiB,EAAE,QAAQ;QAC3B,aAAa,EAAE,SAAS;QACxB,gCAAgC,EAAE,SAAS;QAC3C,sBAAsB,EAAE,QAAQ;QAChC,cAAc,EAAE,QAAQ;QACxB,iBAAiB,EAAE,QAAQ;QAC3B,cAAc,EAAE,UAAU;QAC1B,eAAe,EAAE,QAAQ;QACzB,WAAW,EAAE,UAAU;KACxB;IACD,eAAe,EAAE;QACf,sCAAsC;QACtC,yEAAyE;QACzE,8BAA8B,EAAE,QAAQ;KACzC;IACD,UAAU,EAAE;QACV,WAAW,EAAE,SAAS;QACtB,WAAW,EAAE,UAAU;QACvB,mBAAmB,EAAE,QAAQ;KAC9B;IACD,YAAY,EAAE;QACZ,4BAA4B,EAAE,QAAQ;KACvC;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,QAAQ;KAChB;IACD,WAAW,EAAE;QACX,kCAAkC,EAAE,SAAS;KAC9C;IACD,KAAK,EAAE;QACL,2BAA2B,EAAE,QAAQ;QACrC,aAAa,EAAE,QAAQ;KACxB;IACD,WAAW,EAAE;QACX,iBAAiB,EAAE,QAAQ;QAC3B,uBAAuB,EAAE,QAAQ;KAClC;IACD,IAAI,EAAE;QACJ,qBAAqB,EAAE,QAAQ;QAC/B,iBAAiB,EAAE,SAAS;QAC5B,GAAG,EAAE,QAAQ;KACd;IACD,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,sBAAsB,EAAE,QAAQ;SACjC;QACD,IAAI,EAAE;YACJ,gBAAgB,EAAE,SAAS;SAC5B;KACF;CACF,CAAC;AAEW,QAAA,eAAe,GAAG;IAC7B,aAAa,EAAE;QACb,gBAAgB,EAAE,QAAQ;QAC1B,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,QAAQ;QAClB,wBAAwB,EAAE,QAAQ;QAClC,mCAAmC,EAAE,QAAQ;QAC7C,sBAAsB,EAAE,SAAS;QACjC,wBAAwB,EAAE,QAAQ;QAClC,qBAAqB,EAAE,SAAS;QAChC,2BAA2B,EAAE,QAAQ;QACrC,8BAA8B,EAAE,QAAQ;QACxC,KAAK,EAAE,QAAQ;QACf,0BAA0B,EAAE,SAAS;QACrC,kCAAkC,EAAE,SAAS;QAC7C,2BAA2B,EAAE,SAAS;QACtC,WAAW,EAAE,QAAQ;KACtB;IACD,UAAU,EAAE;QACV,kBAAkB,EAAE,UAAU;KAC/B;IACD,eAAe,EAAE;QACf,WAAW,EAAE,QAAQ;KACtB;IACD,UAAU,EAAE;QACV,wDAAwD;QACxD,oBAAoB,EAAE,SAAS;QAC/B,kBAAkB,EAAE,UAAU;KAC/B;IACD,aAAa,EAAE;QACb,QAAQ,EAAE,SAAS;KACpB;IACD,IAAI,EAAE;QACJ,cAAc,EAAE,OAAO;KACxB;CACF,CAAC"}
|
|
@@ -8,7 +8,7 @@ interface FilteringSearchParamsConfig<TParams> {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export const useFilteringSearchParams = <TParams extends FilteringSearchParams>({
|
|
11
|
-
searchParamsConstructor
|
|
11
|
+
searchParamsConstructor,
|
|
12
12
|
}: FilteringSearchParamsConfig<TParams>): typeof result => {
|
|
13
13
|
const initialParams = useRef<TParams | null>(null);
|
|
14
14
|
const searchParams = useSearchParams();
|
|
@@ -18,16 +18,30 @@ export const useFilteringSearchParams = <TParams extends FilteringSearchParams>(
|
|
|
18
18
|
const getSearchParams = useCallback((): TParams => {
|
|
19
19
|
const initialParams = {} as Record<string, any>;
|
|
20
20
|
searchParams.forEach((value, key) => {
|
|
21
|
+
let parsedValue: any;
|
|
22
|
+
|
|
21
23
|
try {
|
|
22
|
-
|
|
24
|
+
parsedValue = JSON.parse(value);
|
|
23
25
|
} catch {
|
|
24
|
-
|
|
26
|
+
parsedValue = value;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (key in initialParams) {
|
|
30
|
+
if (Array.isArray(initialParams[key])) {
|
|
31
|
+
if (!initialParams[key].includes(parsedValue)) {
|
|
32
|
+
initialParams[key].push(parsedValue);
|
|
33
|
+
}
|
|
34
|
+
} else {
|
|
35
|
+
initialParams[key] = [...new Set([initialParams[key], parsedValue])];
|
|
36
|
+
}
|
|
37
|
+
} else {
|
|
38
|
+
initialParams[key] = parsedValue;
|
|
25
39
|
}
|
|
26
40
|
});
|
|
27
41
|
|
|
28
42
|
return plainToInstance(searchParamsConstructor, initialParams, {
|
|
29
43
|
excludeExtraneousValues: true,
|
|
30
|
-
exposeUnsetFields: false
|
|
44
|
+
exposeUnsetFields: false,
|
|
31
45
|
});
|
|
32
46
|
}, [searchParams]);
|
|
33
47
|
|
|
@@ -39,8 +53,15 @@ export const useFilteringSearchParams = <TParams extends FilteringSearchParams>(
|
|
|
39
53
|
Object.keys(plainParams).forEach((field) => {
|
|
40
54
|
const value = plainParams[field];
|
|
41
55
|
|
|
42
|
-
if (value !== null && value !== undefined
|
|
43
|
-
|
|
56
|
+
if (value !== null && value !== undefined) {
|
|
57
|
+
if (Array.isArray(value)) {
|
|
58
|
+
const uniqueValues = new Set(value);
|
|
59
|
+
uniqueValues.forEach((item) => {
|
|
60
|
+
newSearchParams.append(field, JSON.stringify(item));
|
|
61
|
+
});
|
|
62
|
+
} else {
|
|
63
|
+
newSearchParams.set(field, JSON.stringify(value));
|
|
64
|
+
}
|
|
44
65
|
}
|
|
45
66
|
});
|
|
46
67
|
|
|
@@ -54,7 +75,7 @@ export const useFilteringSearchParams = <TParams extends FilteringSearchParams>(
|
|
|
54
75
|
|
|
55
76
|
const result = {
|
|
56
77
|
initialSearchParams: initialParams.current,
|
|
57
|
-
setSearchParams
|
|
78
|
+
setSearchParams,
|
|
58
79
|
};
|
|
59
80
|
|
|
60
81
|
return result;
|
|
@@ -2,27 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.runNavigationUtilsGenerator = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const child_process_1 = require("child_process");
|
|
6
|
-
const path = require("path");
|
|
7
|
-
const devkit_1 = require("@nx/devkit");
|
|
8
5
|
const enums_1 = require("../../enums");
|
|
9
|
-
const utils_1 = require("
|
|
6
|
+
const utils_1 = require("./utils");
|
|
10
7
|
function runNavigationUtilsGenerator(tree, options) {
|
|
11
8
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
});
|
|
17
|
-
// Remove unnecessary files and files that will be replaced
|
|
18
|
-
const libPath = `${libRoot}/shared/utils/navigation/src`;
|
|
19
|
-
tree.delete(`${libPath}/index.ts`);
|
|
20
|
-
// Add lib files
|
|
21
|
-
(0, devkit_1.generateFiles)(tree, path.join(__dirname, '/common-lib-files'), libRoot, {});
|
|
22
|
-
if (options.baseGeneratorType === enums_1.BaseGeneratorType.NEXT_APP) {
|
|
23
|
-
(0, devkit_1.generateFiles)(tree, path.join(__dirname, '/next-app-lib-files'), libRoot, {});
|
|
24
|
-
const newIndexContent = `export * from './hooks';\nexport * from './types';`;
|
|
25
|
-
(0, utils_1.appendFileContent)(`${libPath}/lib/index.ts`, newIndexContent, tree);
|
|
9
|
+
const { appDirectory, baseGeneratorType } = options;
|
|
10
|
+
(0, utils_1.setupLib)(tree, appDirectory, 'navigation');
|
|
11
|
+
if (baseGeneratorType === enums_1.BaseGeneratorType.NEXT_APP) {
|
|
12
|
+
(0, utils_1.setupLib)(tree, appDirectory, 'filtering-search-params');
|
|
26
13
|
}
|
|
27
14
|
});
|
|
28
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../plugin/src/shared/generators/navigation-utils/generator.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../plugin/src/shared/generators/navigation-utils/generator.ts"],"names":[],"mappings":";;;;AACA,uCAAgD;AAEhD,mCAAmC;AAEnC,SAAsB,2BAA2B,CAAC,IAAU,EAAE,OAAuC;;QACnG,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;QAEpD,IAAA,gBAAQ,EAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QAE3C,IAAI,iBAAiB,KAAK,yBAAiB,CAAC,QAAQ,EAAE,CAAC;YACrD,IAAA,gBAAQ,EAAC,IAAI,EAAE,YAAY,EAAE,yBAAyB,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CAAA;AARD,kEAQC;AAED,kBAAe,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './setup-lib';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../plugin/src/shared/generators/navigation-utils/utils/index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupLib = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const devkit_1 = require("@nx/devkit");
|
|
7
|
+
function setupLib(tree, appDirectory, libName) {
|
|
8
|
+
(0, child_process_1.execSync)(`npx nx g react-lib --app=${appDirectory} --scope=shared --type=utils --name=${libName}`, {
|
|
9
|
+
stdio: 'inherit',
|
|
10
|
+
});
|
|
11
|
+
const libRoot = `libs/${appDirectory}`;
|
|
12
|
+
const libPath = `${libRoot}/shared/utils/${libName}/src`;
|
|
13
|
+
tree.delete(`${libPath}/index.ts`);
|
|
14
|
+
(0, devkit_1.generateFiles)(tree, path.join(__dirname, `../${libName}-lib-files`), libRoot, {});
|
|
15
|
+
}
|
|
16
|
+
exports.setupLib = setupLib;
|
|
17
|
+
//# sourceMappingURL=setup-lib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-lib.js","sourceRoot":"","sources":["../../../../../../../plugin/src/shared/generators/navigation-utils/utils/setup-lib.ts"],"names":[],"mappings":";;;AAAA,iDAAyC;AACzC,6BAA6B;AAC7B,uCAAiD;AAEjD,SAAgB,QAAQ,CAAC,IAAU,EAAE,YAAoB,EAAE,OAAe;IACxE,IAAA,wBAAQ,EAAC,4BAA4B,YAAY,uCAAuC,OAAO,EAAE,EAAE;QACjG,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,QAAQ,YAAY,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,GAAG,OAAO,iBAAiB,OAAO,MAAM,CAAC;IACzD,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,WAAW,CAAC,CAAC;IAEnC,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,OAAO,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AACpF,CAAC;AAVD,4BAUC"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|