@alevnyacow/nzmt 0.3.2 → 0.4.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 (3) hide show
  1. package/README.md +4 -0
  2. package/bin/cli.js +70 -2
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # NZMT - Next Zod Modules Toolkit
2
2
 
3
+ [![npm version](https://badge.fury.io/js/@alevnyacow%2Fnzmt.svg)](https://badge.fury.io/js/@alevnyacow%2Fnzmt)
4
+ ![NPM Downloads](https://img.shields.io/npm/dm/%40alevnyacow%2Fnzmt)
5
+ ![NPM License](https://img.shields.io/npm/l/%40alevnyacow%2Fnzmt)
6
+
3
7
  ## Structure
4
8
 
5
9
  - [Module](#module)
package/bin/cli.js CHANGED
@@ -439,7 +439,7 @@ if (command.toLowerCase() === 'store' || command === 's') {
439
439
 
440
440
  function generateEntity(upperCase) {
441
441
  const folder = config?.paths?.entities ? path.resolve(process.cwd(), config?.paths?.entities, entityName) : path.resolve(process.cwd(), entityName);
442
- const fields = options.filter(x => x.startsWith('f:')).flatMap(x => x.split(':')[1]).join(',').split(',').map(x => x.split('-'))
442
+ const fields = options.filter(x => x.startsWith('f:')).flatMap(x => x.split(':')[1]).join(',').split(',').map(x => x.split('-')).filter(x => x.length === 2)
443
443
 
444
444
  fs.mkdirSync(folder, { recursive: true })
445
445
 
@@ -484,7 +484,7 @@ if (command.toLowerCase() === 'entity' || command === 'e') {
484
484
 
485
485
  function generateValueObject(upperCase) {
486
486
  const folder = config?.paths?.valueObjects ? path.resolve(process.cwd(), config?.paths?.valueObjects, entityName) : path.resolve(process.cwd(), entityName);
487
- const fields = options.filter(x => x.startsWith('f:')).flatMap(x => x.split(':')[1]).join(',').split(',').map(x => x.split('-'))
487
+ const fields = options.filter(x => x.startsWith('f:')).flatMap(x => x.split(':')[1]).join(',').split(',').map(x => x.split('-')).filter(x => x.length === 2)
488
488
 
489
489
  fs.mkdirSync(folder, { recursive: true })
490
490
 
@@ -525,6 +525,74 @@ if (command.toLowerCase() === 'value-object' || command === 'vo') {
525
525
  process.exit(0)
526
526
  }
527
527
 
528
+ function generateProvider(lowerCase, upperCase) {
529
+ const folder = config?.paths?.providers ? path.resolve(process.cwd(), config?.paths?.providers, entityName) : path.resolve(process.cwd(), entityName);
530
+ const providerType = options.find(x => x.startsWith('pt:'))?.split(':')?.at(1) ?? 'API'
531
+
532
+ fs.mkdirSync(folder, { recursive: true })
533
+
534
+ // Base
535
+ fs.writeFileSync(path.resolve(folder, `${entityName}.provider.ts`), [
536
+ `import { Module } from '@alevnyacow/nzmt'`,
537
+ '',
538
+ `export const ${lowerCase}ProviderMetadata = {`,
539
+ `\tname: '${upperCase}Provider'`,
540
+ `\tschemas: {}`,
541
+ `} satisfies Module.Metadata`,
542
+ ``,
543
+ `type Methods = Module.Methods<typeof ${lowerCase}ProviderMetadata>;`,
544
+ ``,
545
+ `export abstract class ${upperCase}Provider {`,
546
+ `\t`,
547
+ `}`
548
+ ].join('\n'))
549
+
550
+ // Mock
551
+ fs.writeFileSync(path.resolve(folder, `${entityName}.provider.mock.ts`), [
552
+ `import { ${upperCase}Provider } from './${entityName}.provider'`,
553
+ '',
554
+ `export class ${upperCase}MockProvider extends ${upperCase}Provider {`,
555
+ `\t`,
556
+ `}`
557
+ ].join('\n'))
558
+
559
+ // Provider
560
+ fs.writeFileSync(path.resolve(folder, `${entityName}.provider.${providerType.toLowerCase()}.ts`), [
561
+ `import { ${upperCase}Provider } from './${entityName}.provider'`,
562
+ '',
563
+ `export class ${upperCase}${providerType}Provider extends ${upperCase}Provider {`,
564
+ `\t`,
565
+ `}`
566
+ ].join('\n'))
567
+
568
+ // Barrel
569
+ fs.writeFileSync(path.resolve(folder, `index.ts`), [
570
+ `export * from './${entityName}.provider'`,
571
+ `export * from './${entityName}.provider.${providerType.toLowerCase()}'`
572
+ ].join('\n'))
573
+
574
+ // Update DI
575
+ const diEntriesPath = path.resolve(process.cwd(), config?.paths?.di, 'entries.di.ts')
576
+
577
+ insertBeforeLineInFile(
578
+ diEntriesPath,
579
+ 'type DIEntries =',
580
+ `import { ${upperCase}MockProvider, ${upperCase}${providerType}Provider } from '${config?.paths?.providers.replace('./src', '@')}/${entityName}}'\n`
581
+ )
582
+
583
+ insertAfterLineInFile(
584
+ diEntriesPath,
585
+ '// Providers',
586
+ `\t${upperCase}Provider: { test: ${upperCase}MockProvider, prod: ${upperCase}${providerType}Provider, dev: ${upperCase}${providerType}Provider },`,
587
+ )
588
+ }
589
+
590
+ if (command.toLowerCase() === 'provider' || command === 'p') {
591
+ var [lowerCase, upperCase] = camelizeVariants(entityName)
592
+ generateProvider(lowerCase, upperCase)
593
+ process.exit(0)
594
+ }
595
+
528
596
 
529
597
  function generateService(lowerCase, upperCase, withCrud) {
530
598
  const folder = config?.paths?.services ? path.resolve(process.cwd(), config?.paths?.services, entityName) : path.resolve(process.cwd(), entityName);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alevnyacow/nzmt",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "description": "Next Zod Modules Toolkit",
5
5
  "repository": {
6
6
  "type": "git",