@idevconn/create-icore 0.7.2 → 0.8.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.
- package/dist/cli.js +509 -353
- package/dist/index.cjs +644 -366
- package/dist/index.d.cts +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +635 -358
- package/dist/manifest/audit.js +122 -0
- package/package.json +1 -1
- package/templates/apps/api/src/app/app.module.ts +2 -6
- package/templates/apps/api/src/app/features.module.ts +9 -0
- package/templates/apps/api/src/app/gateway-services.ts +7 -0
- package/templates/apps/api/src/main.ts +1 -5
- package/templates/apps/microservices/auth/src/app/app.module.ts +4 -93
- package/templates/apps/microservices/auth/src/app/auth.provider.ts +9 -0
- package/templates/apps/microservices/notes/src/app/app.module.ts +4 -86
- package/templates/apps/microservices/notes/src/app/db.provider.ts +9 -0
- package/templates/apps/microservices/upload/src/app/app.module.ts +4 -140
- package/templates/apps/microservices/upload/src/app/storage.provider.ts +9 -0
- package/templates/apps/templates/client-antd/src/components/layout/LayoutSider.tsx +15 -23
- package/templates/apps/templates/client-antd/src/nav.config.ts +17 -0
- package/templates/apps/templates/client-mui/src/components/layout/LayoutSider.tsx +19 -20
- package/templates/apps/templates/client-mui/src/nav.config.ts +17 -0
- package/templates/apps/templates/client-shadcn/src/components/layout/LayoutSider.tsx +20 -16
- package/templates/apps/templates/client-shadcn/src/nav.config.ts +17 -0
- package/templates/libs/auth-strategies/firebase/eslint.config.mjs +1 -0
- package/templates/libs/auth-strategies/firebase/package.json +4 -0
- package/templates/libs/auth-strategies/firebase/src/index.ts +1 -0
- package/templates/libs/auth-strategies/firebase/src/lib/__tests__/firebase-auth.module.unit.test.ts +49 -0
- package/templates/libs/auth-strategies/firebase/src/lib/firebase-auth.module.ts +41 -0
- package/templates/libs/auth-strategies/firebase/tsconfig.json +2 -0
- package/templates/libs/auth-strategies/mongodb/package.json +4 -1
- package/templates/libs/auth-strategies/mongodb/src/index.ts +1 -0
- package/templates/libs/auth-strategies/mongodb/src/lib/__tests__/mongodb-auth.module.unit.test.ts +16 -0
- package/templates/libs/auth-strategies/mongodb/src/lib/mongodb-auth.module.ts +45 -0
- package/templates/libs/auth-strategies/mongodb/tsconfig.json +2 -0
- package/templates/libs/auth-strategies/supabase/eslint.config.mjs +1 -0
- package/templates/libs/auth-strategies/supabase/package.json +3 -0
- package/templates/libs/auth-strategies/supabase/src/index.ts +1 -0
- package/templates/libs/auth-strategies/supabase/src/lib/__tests__/supabase-auth.module.unit.test.ts +43 -0
- package/templates/libs/auth-strategies/supabase/src/lib/supabase-auth.module.ts +41 -0
- package/templates/libs/auth-strategies/supabase/tsconfig.json +2 -0
- package/templates/libs/db-strategies/firestore/eslint.config.mjs +1 -1
- package/templates/libs/db-strategies/firestore/package.json +4 -0
- package/templates/libs/db-strategies/firestore/src/index.ts +1 -0
- package/templates/libs/db-strategies/firestore/src/lib/__tests__/firestore-db.module.unit.test.ts +37 -0
- package/templates/libs/db-strategies/firestore/src/lib/firestore-db.module.ts +41 -0
- package/templates/libs/db-strategies/firestore/tsconfig.json +2 -0
- package/templates/libs/db-strategies/mongodb/package.json +4 -1
- package/templates/libs/db-strategies/mongodb/src/index.ts +1 -0
- package/templates/libs/db-strategies/mongodb/src/lib/__tests__/mongodb-db.module.unit.test.ts +14 -0
- package/templates/libs/db-strategies/mongodb/src/lib/mongodb-db.module.ts +41 -0
- package/templates/libs/db-strategies/mongodb/tsconfig.json +2 -0
- package/templates/libs/db-strategies/supabase/eslint.config.mjs +6 -1
- package/templates/libs/db-strategies/supabase/package.json +3 -0
- package/templates/libs/db-strategies/supabase/src/index.ts +1 -0
- package/templates/libs/db-strategies/supabase/src/lib/__tests__/supabase-db.module.unit.test.ts +32 -0
- package/templates/libs/db-strategies/supabase/src/lib/supabase-db.module.ts +41 -0
- package/templates/libs/db-strategies/supabase/tsconfig.json +2 -0
- package/templates/libs/shared/src/strategies/__tests__/provide-strategy.unit.test.ts +73 -0
- package/templates/libs/shared/src/strategies/index.ts +1 -0
- package/templates/libs/shared/src/strategies/provide-strategy.ts +44 -0
- package/templates/libs/storage-strategies/cloudinary/eslint.config.mjs +1 -1
- package/templates/libs/storage-strategies/cloudinary/package.json +4 -0
- package/templates/libs/storage-strategies/cloudinary/src/index.ts +1 -0
- package/templates/libs/storage-strategies/cloudinary/src/lib/__tests__/cloudinary-storage.module.unit.test.ts +40 -0
- package/templates/libs/storage-strategies/cloudinary/src/lib/cloudinary-storage.module.ts +85 -0
- package/templates/libs/storage-strategies/cloudinary/tsconfig.json +2 -0
- package/templates/libs/storage-strategies/firebase/eslint.config.mjs +1 -1
- package/templates/libs/storage-strategies/firebase/package.json +4 -0
- package/templates/libs/storage-strategies/firebase/src/index.ts +1 -0
- package/templates/libs/storage-strategies/firebase/src/lib/__tests__/firebase-storage.module.unit.test.ts +42 -0
- package/templates/libs/storage-strategies/firebase/src/lib/firebase-storage.module.ts +46 -0
- package/templates/libs/storage-strategies/firebase/tsconfig.json +2 -0
- package/templates/libs/storage-strategies/mongodb/package.json +4 -1
- package/templates/libs/storage-strategies/mongodb/src/index.ts +1 -0
- package/templates/libs/storage-strategies/mongodb/src/lib/__tests__/mongodb-storage.module.unit.test.ts +14 -0
- package/templates/libs/storage-strategies/mongodb/src/lib/mongodb-storage.module.ts +41 -0
- package/templates/libs/storage-strategies/mongodb/tsconfig.json +2 -0
- package/templates/libs/storage-strategies/supabase/eslint.config.mjs +1 -0
- package/templates/libs/storage-strategies/supabase/package.json +3 -0
- package/templates/libs/storage-strategies/supabase/src/index.ts +1 -0
- package/templates/libs/storage-strategies/supabase/src/lib/__tests__/supabase-storage.module.unit.test.ts +46 -0
- package/templates/libs/storage-strategies/supabase/src/lib/supabase-storage.module.ts +46 -0
- package/templates/libs/storage-strategies/supabase/tsconfig.json +2 -0
- package/templates/package.json +1 -1
- package/templates/tools/create-icore/_template-shell/package.json +1 -1
- package/templates/tsconfig.base.json +1 -1
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Module, DynamicModule } from '@nestjs/common';
|
|
2
|
+
import { ConfigService } from '@nestjs/config';
|
|
3
|
+
import { MongooseModule, getConnectionToken } from '@nestjs/mongoose';
|
|
4
|
+
import { Connection } from 'mongoose';
|
|
5
|
+
import { buildStrategyWithFallback, FakeStorageStrategy } from '@icore/shared';
|
|
6
|
+
import type { StorageStrategy } from '@icore/shared';
|
|
7
|
+
import { MongoDbStorageStrategy } from './mongodb-storage.strategy';
|
|
8
|
+
|
|
9
|
+
export const MONGODB_STORAGE_REQUIRED_ENV = ['MONGODB_URI'];
|
|
10
|
+
|
|
11
|
+
@Module({})
|
|
12
|
+
export class MongoDbStorageModule {
|
|
13
|
+
static forRoot(envPath: string): DynamicModule {
|
|
14
|
+
return {
|
|
15
|
+
module: MongoDbStorageModule,
|
|
16
|
+
imports: [
|
|
17
|
+
MongooseModule.forRootAsync({
|
|
18
|
+
useFactory: (cfg: ConfigService) => ({ uri: cfg.get<string>('MONGODB_URI') }),
|
|
19
|
+
inject: [ConfigService],
|
|
20
|
+
}),
|
|
21
|
+
],
|
|
22
|
+
providers: [
|
|
23
|
+
{
|
|
24
|
+
provide: 'StorageStrategy',
|
|
25
|
+
useFactory: (cfg: ConfigService, connection: Connection): StorageStrategy =>
|
|
26
|
+
buildStrategyWithFallback<StorageStrategy>({
|
|
27
|
+
service: 'upload MS',
|
|
28
|
+
provider: 'mongodb',
|
|
29
|
+
requiredEnv: MONGODB_STORAGE_REQUIRED_ENV,
|
|
30
|
+
cfg,
|
|
31
|
+
envPath,
|
|
32
|
+
build: () => new MongoDbStorageStrategy({ connection }),
|
|
33
|
+
fake: () => new FakeStorageStrategy(),
|
|
34
|
+
}),
|
|
35
|
+
inject: [ConfigService, getConnectionToken()],
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
exports: ['StorageStrategy'],
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -7,10 +7,13 @@
|
|
|
7
7
|
"types": "./src/index.ts",
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"@icore/shared": "*",
|
|
10
|
+
"@nestjs/common": "^11.1.24",
|
|
11
|
+
"@nestjs/config": "^4.0.4",
|
|
10
12
|
"@supabase/supabase-js": "^2.0.0",
|
|
11
13
|
"tslib": "^2.3.0"
|
|
12
14
|
},
|
|
13
15
|
"devDependencies": {
|
|
16
|
+
"@nestjs/testing": "^11.0.0",
|
|
14
17
|
"vitest": "^4.0.0"
|
|
15
18
|
}
|
|
16
19
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { Global, Module } from '@nestjs/common';
|
|
3
|
+
import { Test } from '@nestjs/testing';
|
|
4
|
+
import { ConfigService } from '@nestjs/config';
|
|
5
|
+
import {
|
|
6
|
+
SupabaseStorageModule,
|
|
7
|
+
SUPABASE_STORAGE_REQUIRED_ENV,
|
|
8
|
+
} from '../supabase-storage.module.js';
|
|
9
|
+
import { SupabaseStorageStrategy } from '../supabase-storage.strategy.js';
|
|
10
|
+
|
|
11
|
+
@Global()
|
|
12
|
+
@Module({
|
|
13
|
+
providers: [{ provide: ConfigService, useValue: makeCfg() }],
|
|
14
|
+
exports: [ConfigService],
|
|
15
|
+
})
|
|
16
|
+
class StubConfigModule {}
|
|
17
|
+
|
|
18
|
+
let ENV: Record<string, string | undefined> = {};
|
|
19
|
+
function makeCfg() {
|
|
20
|
+
return {
|
|
21
|
+
get: (k: string) => ENV[k],
|
|
22
|
+
getOrThrow: (k: string) => ENV[k],
|
|
23
|
+
} as unknown as ConfigService;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
describe('SupabaseStorageModule', () => {
|
|
27
|
+
it('declares its required env', () => {
|
|
28
|
+
expect(SUPABASE_STORAGE_REQUIRED_ENV).toEqual([
|
|
29
|
+
'SUPABASE_URL',
|
|
30
|
+
'SUPABASE_SERVICE_ROLE_KEY',
|
|
31
|
+
'SUPABASE_STORAGE_BUCKET',
|
|
32
|
+
]);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('provides a real SupabaseStorageStrategy under StorageStrategy when env present', async () => {
|
|
36
|
+
ENV = {
|
|
37
|
+
SUPABASE_URL: 'https://x.supabase.co',
|
|
38
|
+
SUPABASE_SERVICE_ROLE_KEY: 'svc',
|
|
39
|
+
SUPABASE_STORAGE_BUCKET: 'uploads',
|
|
40
|
+
};
|
|
41
|
+
const ref = await Test.createTestingModule({
|
|
42
|
+
imports: [StubConfigModule, SupabaseStorageModule.forRoot('.env')],
|
|
43
|
+
}).compile();
|
|
44
|
+
expect(ref.get('StorageStrategy')).toBeInstanceOf(SupabaseStorageStrategy);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Module, DynamicModule } from '@nestjs/common';
|
|
2
|
+
import { ConfigService } from '@nestjs/config';
|
|
3
|
+
import { createClient } from '@supabase/supabase-js';
|
|
4
|
+
import { buildStrategyWithFallback, FakeStorageStrategy } from '@icore/shared';
|
|
5
|
+
import type { StorageStrategy } from '@icore/shared';
|
|
6
|
+
import { SupabaseStorageStrategy } from './supabase-storage.strategy';
|
|
7
|
+
|
|
8
|
+
export const SUPABASE_STORAGE_REQUIRED_ENV = [
|
|
9
|
+
'SUPABASE_URL',
|
|
10
|
+
'SUPABASE_SERVICE_ROLE_KEY',
|
|
11
|
+
'SUPABASE_STORAGE_BUCKET',
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
@Module({})
|
|
15
|
+
export class SupabaseStorageModule {
|
|
16
|
+
static forRoot(envPath: string): DynamicModule {
|
|
17
|
+
return {
|
|
18
|
+
module: SupabaseStorageModule,
|
|
19
|
+
providers: [
|
|
20
|
+
{
|
|
21
|
+
provide: 'StorageStrategy',
|
|
22
|
+
useFactory: (cfg: ConfigService): StorageStrategy =>
|
|
23
|
+
buildStrategyWithFallback<StorageStrategy>({
|
|
24
|
+
service: 'upload MS',
|
|
25
|
+
provider: 'supabase',
|
|
26
|
+
requiredEnv: SUPABASE_STORAGE_REQUIRED_ENV,
|
|
27
|
+
cfg,
|
|
28
|
+
envPath,
|
|
29
|
+
build: () =>
|
|
30
|
+
new SupabaseStorageStrategy({
|
|
31
|
+
client: createClient(
|
|
32
|
+
cfg.getOrThrow<string>('SUPABASE_URL'),
|
|
33
|
+
cfg.getOrThrow<string>('SUPABASE_SERVICE_ROLE_KEY'),
|
|
34
|
+
{ auth: { autoRefreshToken: false, persistSession: false } },
|
|
35
|
+
),
|
|
36
|
+
bucket: cfg.getOrThrow<string>('SUPABASE_STORAGE_BUCKET'),
|
|
37
|
+
}),
|
|
38
|
+
fake: () => new FakeStorageStrategy(),
|
|
39
|
+
}),
|
|
40
|
+
inject: [ConfigService],
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
exports: ['StorageStrategy'],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
package/templates/package.json
CHANGED