@devstroupe/devkit-cli 1.1.9 → 1.1.11
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/index.js
CHANGED
|
@@ -955,13 +955,13 @@ program
|
|
|
955
955
|
process.exit(0);
|
|
956
956
|
}
|
|
957
957
|
});
|
|
958
|
-
// Comando generate crud
|
|
958
|
+
// Comando generate crud ou project
|
|
959
959
|
program
|
|
960
|
-
.command('generate <type>
|
|
961
|
-
.description('Gera artefatos do DevKit. Tipos suportados: crud')
|
|
960
|
+
.command('generate <type> [entityName]')
|
|
961
|
+
.description('Gera artefatos do DevKit. Tipos suportados: crud, project')
|
|
962
962
|
.action((type, entityName) => {
|
|
963
|
-
if (type !== 'crud') {
|
|
964
|
-
console.error(`Tipo de geração "${type}" não é suportado. Use "crud".`);
|
|
963
|
+
if (type !== 'crud' && type !== 'project') {
|
|
964
|
+
console.error(`Tipo de geração "${type}" não é suportado. Use "crud" ou "project".`);
|
|
965
965
|
process.exit(1);
|
|
966
966
|
}
|
|
967
967
|
const configPath = path.join(process.cwd(), 'devstroupe.config.ts');
|
|
@@ -978,6 +978,14 @@ program
|
|
|
978
978
|
console.error('Erro ao carregar devstroupe.config.ts:', error);
|
|
979
979
|
process.exit(1);
|
|
980
980
|
}
|
|
981
|
+
if (type === 'project') {
|
|
982
|
+
generateProject(process.cwd(), config);
|
|
983
|
+
return;
|
|
984
|
+
}
|
|
985
|
+
if (!entityName) {
|
|
986
|
+
console.error('Nome da entidade não fornecido. Use "devstroupe generate crud all" ou "devstroupe generate crud <nome_da_entidade>".');
|
|
987
|
+
process.exit(1);
|
|
988
|
+
}
|
|
981
989
|
try {
|
|
982
990
|
assertValidRelationshipConfig(config);
|
|
983
991
|
}
|
|
@@ -1862,19 +1870,22 @@ volumes:
|
|
|
1862
1870
|
fs.writeFileSync(path.join(projectRoot, 'docker-compose.dev.yml'), dockerComposeDevContent, 'utf-8');
|
|
1863
1871
|
console.log(`[Docker] docker-compose.dev.yml gerado com sucesso.`);
|
|
1864
1872
|
}
|
|
1865
|
-
//
|
|
1866
|
-
|
|
1867
|
-
.
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
.
|
|
1871
|
-
const
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1873
|
+
// Função que gera a estrutura de pastas e arquivos base a partir de um devstroupe.config.ts existente
|
|
1874
|
+
function generateProject(projectRoot, config) {
|
|
1875
|
+
const projectName = config.projectName || 'DevsTroupe Project';
|
|
1876
|
+
const isMicroservices = config.backendType === 'microservices';
|
|
1877
|
+
const frontendPathRel = config.frontendPath || './frontend';
|
|
1878
|
+
const backendPathRel = config.backendPath || './backend';
|
|
1879
|
+
const frontendDest = path.resolve(projectRoot, frontendPathRel);
|
|
1880
|
+
let backendDest;
|
|
1881
|
+
if (isMicroservices) {
|
|
1882
|
+
backendDest = path.resolve(projectRoot, backendPathRel, 'api-gateway');
|
|
1883
|
+
fs.ensureDirSync(path.resolve(projectRoot, backendPathRel, 'services'));
|
|
1875
1884
|
}
|
|
1876
|
-
|
|
1877
|
-
|
|
1885
|
+
else {
|
|
1886
|
+
backendDest = path.resolve(projectRoot, backendPathRel);
|
|
1887
|
+
}
|
|
1888
|
+
console.log(`Configurando estrutura física do projeto "${projectName}" (Modo: ${isMicroservices ? 'Microsserviços' : 'Monólito'})...`);
|
|
1878
1889
|
// Resolver caminhos de boilerplates
|
|
1879
1890
|
let boilerplatesDir = path.resolve(__dirname, 'boilerplates');
|
|
1880
1891
|
if (!fs.existsSync(boilerplatesDir)) {
|
|
@@ -1890,25 +1901,14 @@ program
|
|
|
1890
1901
|
process.exit(1);
|
|
1891
1902
|
}
|
|
1892
1903
|
try {
|
|
1893
|
-
// 1. Criar diretórios de destino
|
|
1894
|
-
fs.
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
else {
|
|
1902
|
-
backendDest = path.join(projectRoot, 'backend');
|
|
1903
|
-
}
|
|
1904
|
-
// 2. Copiar boilerplates
|
|
1905
|
-
console.log(`Copiando boilerplate do backend (${isMicroservices ? 'API Gateway' : 'NestJS Monólito'})...`);
|
|
1906
|
-
fs.copySync(nestTemplateDir, backendDest, { filter: createBoilerplateCopyFilter(nestTemplateDir) });
|
|
1907
|
-
console.log('Copiando boilerplate do frontend (Angular)...');
|
|
1908
|
-
fs.copySync(angularTemplateDir, frontendDest, { filter: createBoilerplateCopyFilter(angularTemplateDir) });
|
|
1909
|
-
// 2.1 Criar arquivos .env e .env.example no backend
|
|
1910
|
-
console.log('Gerando arquivos .env e .env.example no backend...');
|
|
1911
|
-
const envContent = `PORT=13000
|
|
1904
|
+
// 1. Criar diretórios de destino e copiar boilerplates
|
|
1905
|
+
if (!fs.existsSync(backendDest) || fs.readdirSync(backendDest).length === 0) {
|
|
1906
|
+
console.log(`Copiando boilerplate do backend para: ${backendDest}...`);
|
|
1907
|
+
fs.ensureDirSync(backendDest);
|
|
1908
|
+
fs.copySync(nestTemplateDir, backendDest, { filter: createBoilerplateCopyFilter(nestTemplateDir) });
|
|
1909
|
+
// Gerar arquivos .env e .env.example
|
|
1910
|
+
console.log('Gerando arquivos .env e .env.example no backend...');
|
|
1911
|
+
const envContent = `PORT=13000
|
|
1912
1912
|
DB_HOST=localhost
|
|
1913
1913
|
DB_PORT=3306
|
|
1914
1914
|
DB_USER=root
|
|
@@ -1931,90 +1931,20 @@ R2_ACCOUNT_ID=
|
|
|
1931
1931
|
R2_ACCESS_KEY=
|
|
1932
1932
|
R2_SECRET_KEY=
|
|
1933
1933
|
`;
|
|
1934
|
-
|
|
1935
|
-
|
|
1934
|
+
fs.writeFileSync(path.join(backendDest, '.env'), envContent, 'utf-8');
|
|
1935
|
+
fs.writeFileSync(path.join(backendDest, '.env.example'), envContent, 'utf-8');
|
|
1936
|
+
}
|
|
1937
|
+
if (!fs.existsSync(frontendDest) || fs.readdirSync(frontendDest).length === 0) {
|
|
1938
|
+
console.log(`Copiando boilerplate do frontend para: ${frontendDest}...`);
|
|
1939
|
+
fs.ensureDirSync(frontendDest);
|
|
1940
|
+
fs.copySync(angularTemplateDir, frontendDest, { filter: createBoilerplateCopyFilter(angularTemplateDir) });
|
|
1941
|
+
}
|
|
1936
1942
|
// Patch local dependencies if in monorepo development
|
|
1937
1943
|
patchLocalDependencies(backendDest, frontendDest, boilerplatesDir);
|
|
1938
|
-
//
|
|
1939
|
-
console.log('Gerando arquivo devstroupe.config.ts...');
|
|
1940
|
-
const configPath = path.join(projectRoot, 'devstroupe.config.ts');
|
|
1941
|
-
const designSystemConfig = {
|
|
1942
|
-
provider: 'spartan',
|
|
1943
|
-
spartanStyle: 'vega',
|
|
1944
|
-
spartanTheme: 'neutral',
|
|
1945
|
-
installAllPrimitives: true,
|
|
1946
|
-
includePlayground: true,
|
|
1947
|
-
};
|
|
1948
|
-
const configContent = `export default {
|
|
1949
|
-
projectName: '${projectName}',
|
|
1950
|
-
backendType: '${isMicroservices ? 'microservices' : 'monolith'}',
|
|
1951
|
-
backendPath: './backend',
|
|
1952
|
-
frontendPath: './frontend',
|
|
1953
|
-
designSystem: {
|
|
1954
|
-
provider: '${designSystemConfig.provider}',
|
|
1955
|
-
spartanStyle: '${designSystemConfig.spartanStyle}',
|
|
1956
|
-
spartanTheme: '${designSystemConfig.spartanTheme}',
|
|
1957
|
-
installAllPrimitives: ${designSystemConfig.installAllPrimitives},
|
|
1958
|
-
includePlayground: ${designSystemConfig.includePlayground}
|
|
1959
|
-
},
|
|
1960
|
-
entities: [
|
|
1961
|
-
{
|
|
1962
|
-
name: 'company',
|
|
1963
|
-
label: 'Empresa',
|
|
1964
|
-
tableName: 'companies',
|
|
1965
|
-
properties: [
|
|
1966
|
-
{ name: 'name', type: 'string', required: true, label: 'Nome' },
|
|
1967
|
-
{
|
|
1968
|
-
name: 'cabins', type: 'relationship', required: false, label: 'Cabines',
|
|
1969
|
-
relation: {
|
|
1970
|
-
target: 'cabin', kind: 'one-to-many', foreignKey: 'company_id',
|
|
1971
|
-
inverseSide: 'company', control: 'table', embedded: true,
|
|
1972
|
-
columns: ['name', 'code', 'is_active'], lookup: { pageSize: 10 }
|
|
1973
|
-
}
|
|
1974
|
-
}
|
|
1975
|
-
],
|
|
1976
|
-
crud: { generateFrontend: true, generateBackend: true }
|
|
1977
|
-
},
|
|
1978
|
-
{
|
|
1979
|
-
name: 'cabin',
|
|
1980
|
-
label: 'Cabine',
|
|
1981
|
-
tableName: 'cabins',
|
|
1982
|
-
properties: [
|
|
1983
|
-
{ name: 'name', type: 'string', required: true, label: 'Nome' },
|
|
1984
|
-
{ name: 'code', type: 'string', required: false, label: 'Código' },
|
|
1985
|
-
{
|
|
1986
|
-
name: 'company_id', type: 'relationship', required: true, label: 'Empresa',
|
|
1987
|
-
relation: {
|
|
1988
|
-
target: 'company', kind: 'many-to-one', relationName: 'company',
|
|
1989
|
-
inverseSide: 'cabins', control: 'select', displayField: 'name', onDelete: 'CASCADE',
|
|
1990
|
-
lookup: { mode: 'remote', pageSize: 20, minSearchLength: 0 }
|
|
1991
|
-
}
|
|
1992
|
-
},
|
|
1993
|
-
{ name: 'is_active', type: 'boolean', required: true, label: 'Ativo', default: true }
|
|
1994
|
-
],
|
|
1995
|
-
crud: {
|
|
1996
|
-
generateFrontend: true,
|
|
1997
|
-
generateBackend: true
|
|
1998
|
-
}
|
|
1999
|
-
}
|
|
2000
|
-
]
|
|
2001
|
-
};
|
|
2002
|
-
`;
|
|
2003
|
-
fs.writeFileSync(configPath, configContent, 'utf-8');
|
|
2004
|
-
// 3.1 Criar docker-compose.yml e init.sql
|
|
1944
|
+
// 2. Gerar docker-compose.yml e init.sql
|
|
2005
1945
|
console.log('Gerando docker-compose.yml e base de dados...');
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
backendType: isMicroservices ? 'microservices' : 'monolith',
|
|
2009
|
-
entities: [
|
|
2010
|
-
{
|
|
2011
|
-
name: 'cabin',
|
|
2012
|
-
tableName: 'cabins',
|
|
2013
|
-
}
|
|
2014
|
-
]
|
|
2015
|
-
};
|
|
2016
|
-
generateDockerComposeAndDbInit(projectRoot, tempConfig);
|
|
2017
|
-
// 3.2 Criar Makefile na raiz
|
|
1946
|
+
generateDockerComposeAndDbInit(projectRoot, config);
|
|
1947
|
+
// 3. Gerar Makefile na raiz
|
|
2018
1948
|
console.log('Gerando arquivo Makefile na raiz...');
|
|
2019
1949
|
const backendServiceName = isMicroservices ? 'api-gateway' : 'backend';
|
|
2020
1950
|
const makefileContent = `.PHONY: up down restart build logs ps clean backend-shell frontend-shell db-shell dev-up dev-down dev-restart dev-build dev-logs dev-ps dev-clean help
|
|
@@ -2120,17 +2050,100 @@ db-shell:
|
|
|
2120
2050
|
catch (err) {
|
|
2121
2051
|
console.warn('[Aviso] Falha ao rodar "npm install" no frontend. Instale as dependências manualmente.');
|
|
2122
2052
|
}
|
|
2123
|
-
// 5. Inicializar
|
|
2053
|
+
// 5. Inicializar componentes de UI Spartan
|
|
2124
2054
|
console.log('Inicializando componentes de UI locais...');
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2055
|
+
initUi(frontendDest, config);
|
|
2056
|
+
console.log(`\n\x1b[32m[SUCESSO] Projeto "${projectName}" gerado com sucesso!\x1b[0m`);
|
|
2057
|
+
}
|
|
2058
|
+
catch (err) {
|
|
2059
|
+
console.error('[Erro] Falha ao gerar o projeto:', err);
|
|
2060
|
+
process.exit(1);
|
|
2061
|
+
}
|
|
2062
|
+
}
|
|
2063
|
+
// Comando new-project
|
|
2064
|
+
program
|
|
2065
|
+
.command('new-project <projectName>')
|
|
2066
|
+
.description('Cria um novo diretório de projeto e inicializa o devstroupe.config.ts')
|
|
2067
|
+
.option('--microservices', 'Cria o projeto utilizando arquitetura de microsserviços')
|
|
2068
|
+
.action((projectName, options) => {
|
|
2069
|
+
const projectRoot = path.resolve(process.cwd(), projectName);
|
|
2070
|
+
if (fs.existsSync(projectRoot) && fs.readdirSync(projectRoot).length > 0) {
|
|
2071
|
+
console.error(`[Erro] O diretório "${projectName}" já existe e não está vazio.`);
|
|
2072
|
+
process.exit(1);
|
|
2073
|
+
}
|
|
2074
|
+
const isMicroservices = !!options.microservices;
|
|
2075
|
+
console.log(`Inicializando novo projeto "${projectName}" em: ${projectRoot}...`);
|
|
2076
|
+
try {
|
|
2077
|
+
// 1. Criar diretório de destino
|
|
2078
|
+
fs.ensureDirSync(projectRoot);
|
|
2079
|
+
// 2. Criar devstroupe.config.ts padrão
|
|
2080
|
+
console.log('Gerando arquivo devstroupe.config.ts...');
|
|
2081
|
+
const configPath = path.join(projectRoot, 'devstroupe.config.ts');
|
|
2082
|
+
const configContent = `export default {
|
|
2083
|
+
projectName: '${projectName}',
|
|
2084
|
+
backendType: '${isMicroservices ? 'microservices' : 'monolith'}',
|
|
2085
|
+
backendPath: './backend',
|
|
2086
|
+
frontendPath: './frontend',
|
|
2087
|
+
designSystem: {
|
|
2088
|
+
provider: 'spartan',
|
|
2089
|
+
spartanStyle: 'vega',
|
|
2090
|
+
spartanTheme: 'neutral',
|
|
2091
|
+
installAllPrimitives: true,
|
|
2092
|
+
includePlayground: true
|
|
2093
|
+
},
|
|
2094
|
+
entities: [
|
|
2095
|
+
{
|
|
2096
|
+
name: 'company',
|
|
2097
|
+
label: 'Empresa',
|
|
2098
|
+
tableName: 'companies',
|
|
2099
|
+
properties: [
|
|
2100
|
+
{ name: 'name', type: 'string', required: true, label: 'Nome' },
|
|
2101
|
+
{
|
|
2102
|
+
name: 'cabins', type: 'relationship', required: false, label: 'Cabines',
|
|
2103
|
+
relation: {
|
|
2104
|
+
target: 'cabin', kind: 'one-to-many', foreignKey: 'company_id',
|
|
2105
|
+
inverseSide: 'company', control: 'table', embedded: true,
|
|
2106
|
+
columns: ['name', 'code', 'is_active'], lookup: { pageSize: 10 }
|
|
2107
|
+
}
|
|
2108
|
+
}
|
|
2109
|
+
],
|
|
2110
|
+
crud: { generateFrontend: true, generateBackend: true }
|
|
2111
|
+
},
|
|
2112
|
+
{
|
|
2113
|
+
name: 'cabin',
|
|
2114
|
+
label: 'Cabine',
|
|
2115
|
+
tableName: 'cabins',
|
|
2116
|
+
properties: [
|
|
2117
|
+
{ name: 'name', type: 'string', required: true, label: 'Nome' },
|
|
2118
|
+
{ name: 'code', type: 'string', required: false, label: 'Código' },
|
|
2119
|
+
{
|
|
2120
|
+
name: 'company_id', type: 'relationship', required: true, label: 'Empresa',
|
|
2121
|
+
relation: {
|
|
2122
|
+
target: 'company', kind: 'many-to-one', relationName: 'company',
|
|
2123
|
+
inverseSide: 'cabins', control: 'select', displayField: 'name', onDelete: 'CASCADE',
|
|
2124
|
+
lookup: { mode: 'remote', pageSize: 20, minSearchLength: 0 }
|
|
2125
|
+
}
|
|
2126
|
+
},
|
|
2127
|
+
{ name: 'is_active', type: 'boolean', required: true, label: 'Ativo', default: true }
|
|
2128
|
+
],
|
|
2129
|
+
crud: {
|
|
2130
|
+
generateFrontend: true,
|
|
2131
|
+
generateBackend: true
|
|
2132
|
+
}
|
|
2133
|
+
}
|
|
2134
|
+
]
|
|
2135
|
+
};
|
|
2136
|
+
`;
|
|
2137
|
+
fs.writeFileSync(configPath, configContent, 'utf-8');
|
|
2138
|
+
console.log(`\n\x1b[32m[SUCESSO] Projeto "${projectName}" inicializado com sucesso!\x1b[0m`);
|
|
2128
2139
|
console.log(`Para começar:`);
|
|
2129
|
-
console.log(` 1.
|
|
2130
|
-
console.log(` 2.
|
|
2140
|
+
console.log(` 1. Acesse a pasta do projeto: cd ${projectName}`);
|
|
2141
|
+
console.log(` 2. Ajuste suas entidades e configurações no arquivo: devstroupe.config.ts`);
|
|
2142
|
+
console.log(` 3. Execute o comando a seguir para gerar toda a estrutura física (frontend, backend, Docker):`);
|
|
2143
|
+
console.log(` devstroupe generate project`);
|
|
2131
2144
|
}
|
|
2132
2145
|
catch (err) {
|
|
2133
|
-
console.error('[Erro] Falha ao
|
|
2146
|
+
console.error('[Erro] Falha ao inicializar o novo projeto:', err);
|
|
2134
2147
|
process.exit(1);
|
|
2135
2148
|
}
|
|
2136
2149
|
});
|
|
@@ -80,23 +80,39 @@ function nestMigrationTemplate(entity, entities, timestamp, properties = entity.
|
|
|
80
80
|
const relationColumns = relationships
|
|
81
81
|
.filter((relationship) => (0, relationships_1.isSingularRelationship)(relationship.kind))
|
|
82
82
|
.map((relationship) => ` { name: '${relationship.foreignKey}', type: 'int', isNullable: ${!relationship.property.required}, isUnique: ${relationship.kind === 'one-to-one'} }`);
|
|
83
|
-
// Gera
|
|
83
|
+
// Gera código TypeORM seguro para cada FK no método UP
|
|
84
84
|
const foreignKeysSql = relationships
|
|
85
85
|
.filter((relationship) => (0, relationships_1.isSingularRelationship)(relationship.kind))
|
|
86
86
|
.map((relationship) => {
|
|
87
87
|
const fkName = `FK_${tableName}_${relationship.foreignKey}`;
|
|
88
88
|
const refTable = targetTable(relationship.target, entities);
|
|
89
|
-
return
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
89
|
+
return ` const table_${relationship.foreignKey} = await queryRunner.getTable('${tableName}');
|
|
90
|
+
if (table_${relationship.foreignKey}) {
|
|
91
|
+
const foreignKey = table_${relationship.foreignKey}.foreignKeys.find(fk => fk.name === '${fkName}');
|
|
92
|
+
if (foreignKey) {
|
|
93
|
+
await queryRunner.dropForeignKey('${tableName}', foreignKey);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
await queryRunner.createForeignKey('${tableName}', new TableForeignKey({
|
|
97
|
+
name: '${fkName}',
|
|
98
|
+
columnNames: ['${relationship.foreignKey}'],
|
|
99
|
+
referencedTableName: '${refTable}',
|
|
100
|
+
referencedColumnNames: ['${relationship.valueField}'],
|
|
101
|
+
onDelete: '${relationship.onDelete}'
|
|
102
|
+
}));`;
|
|
93
103
|
})
|
|
94
104
|
.join('\n');
|
|
95
105
|
const dropForeignKeysSql = relationships
|
|
96
106
|
.filter((relationship) => (0, relationships_1.isSingularRelationship)(relationship.kind))
|
|
97
107
|
.map((relationship) => {
|
|
98
108
|
const fkName = `FK_${tableName}_${relationship.foreignKey}`;
|
|
99
|
-
return ` await queryRunner.
|
|
109
|
+
return ` const table_${relationship.foreignKey} = await queryRunner.getTable('${tableName}');
|
|
110
|
+
if (table_${relationship.foreignKey}) {
|
|
111
|
+
const foreignKey = table_${relationship.foreignKey}.foreignKeys.find(fk => fk.name === '${fkName}');
|
|
112
|
+
if (foreignKey) {
|
|
113
|
+
await queryRunner.dropForeignKey('${tableName}', foreignKey);
|
|
114
|
+
}
|
|
115
|
+
}`;
|
|
100
116
|
})
|
|
101
117
|
.join('\n');
|
|
102
118
|
const junctions = relationships
|
|
@@ -163,7 +179,7 @@ function nestMigrationTemplate(entity, entities, timestamp, properties = entity.
|
|
|
163
179
|
return ` await queryRunner.query('ALTER TABLE \`${tableName}\` DROP CONSTRAINT \`${checkName}\`');`;
|
|
164
180
|
}).join('\n')
|
|
165
181
|
: '';
|
|
166
|
-
return `import { MigrationInterface, QueryRunner, Table, TableIndex } from 'typeorm';
|
|
182
|
+
return `import { MigrationInterface, QueryRunner, Table, TableForeignKey, TableIndex } from 'typeorm';
|
|
167
183
|
|
|
168
184
|
export class ${className} implements MigrationInterface {
|
|
169
185
|
name = '${className}';
|
|
@@ -149,9 +149,9 @@ function assertValidTypeScript(source) {
|
|
|
149
149
|
strict_1.default.match(companyMigration, /name: 'companies'/);
|
|
150
150
|
strict_1.default.doesNotMatch(companyMigration, /FK_companies_cabins/);
|
|
151
151
|
strict_1.default.match(cabinMigration, /name: 'company_id', type: 'int'/);
|
|
152
|
-
strict_1.default.match(cabinMigration, /
|
|
152
|
+
strict_1.default.match(cabinMigration, /createForeignKey/);
|
|
153
153
|
strict_1.default.match(cabinMigration, /FK_cabins_company_id/);
|
|
154
|
-
strict_1.default.match(cabinMigration, /
|
|
154
|
+
strict_1.default.match(cabinMigration, /onDelete: 'CASCADE'/);
|
|
155
155
|
strict_1.default.match(dataSource, /migrations: \[path\.join/);
|
|
156
156
|
strict_1.default.match(dataSource, /synchronize: false/);
|
|
157
157
|
assertValidTypeScript(companyMigration);
|
|
@@ -8,7 +8,7 @@ import { CommonModule } from '@angular/common';
|
|
|
8
8
|
import { HlmButton } from '@spartan-ng/helm/button';
|
|
9
9
|
import { HlmInput } from '@spartan-ng/helm/input';
|
|
10
10
|
import { NgIconComponent } from '@ng-icons/core';
|
|
11
|
-
import type { ThemeMode } from '
|
|
11
|
+
import type { ThemeMode } from '../../../../core/services/theme.service';
|
|
12
12
|
|
|
13
13
|
export interface IUserProfile {
|
|
14
14
|
name: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devstroupe/devkit-cli",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.11",
|
|
4
4
|
"description": "DevsTroupe Development Kit CLI — scaffold NestJS+Angular projects, inject Spartan UI, generate CRUDs and audit architectural governance",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"commander": "^12.0.0",
|
|
38
38
|
"fs-extra": "^11.2.0",
|
|
39
|
-
"@devstroupe/devkit-core": "1.1.
|
|
39
|
+
"@devstroupe/devkit-core": "1.1.11"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/fs-extra": "^11.0.4",
|