create-nexo 1.0.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/LICENSE +21 -0
- package/README.md +185 -0
- package/dist/api/index.d.ts +196 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +390 -0
- package/dist/api/index.js.map +1 -0
- package/dist/bin/nexo.d.ts +3 -0
- package/dist/bin/nexo.d.ts.map +1 -0
- package/dist/bin/nexo.js +427 -0
- package/dist/bin/nexo.js.map +1 -0
- package/dist/configurators/core/framework.d.ts +3 -0
- package/dist/configurators/core/framework.d.ts.map +1 -0
- package/dist/configurators/core/framework.js +56 -0
- package/dist/configurators/core/framework.js.map +1 -0
- package/dist/configurators/core/index.d.ts +4 -0
- package/dist/configurators/core/index.d.ts.map +1 -0
- package/dist/configurators/core/index.js +4 -0
- package/dist/configurators/core/index.js.map +1 -0
- package/dist/configurators/core/language.d.ts +3 -0
- package/dist/configurators/core/language.d.ts.map +1 -0
- package/dist/configurators/core/language.js +59 -0
- package/dist/configurators/core/language.js.map +1 -0
- package/dist/configurators/core/variant.d.ts +3 -0
- package/dist/configurators/core/variant.d.ts.map +1 -0
- package/dist/configurators/core/variant.js +22 -0
- package/dist/configurators/core/variant.js.map +1 -0
- package/dist/configurators/index.d.ts +5 -0
- package/dist/configurators/index.d.ts.map +1 -0
- package/dist/configurators/index.js +6 -0
- package/dist/configurators/index.js.map +1 -0
- package/dist/configurators/project/auth.d.ts +3 -0
- package/dist/configurators/project/auth.d.ts.map +1 -0
- package/dist/configurators/project/auth.js +82 -0
- package/dist/configurators/project/auth.js.map +1 -0
- package/dist/configurators/project/cicd.d.ts +30 -0
- package/dist/configurators/project/cicd.d.ts.map +1 -0
- package/dist/configurators/project/cicd.js +289 -0
- package/dist/configurators/project/cicd.js.map +1 -0
- package/dist/configurators/project/i18n.d.ts +3 -0
- package/dist/configurators/project/i18n.d.ts.map +1 -0
- package/dist/configurators/project/i18n.js +67 -0
- package/dist/configurators/project/i18n.js.map +1 -0
- package/dist/configurators/project/index.d.ts +6 -0
- package/dist/configurators/project/index.d.ts.map +1 -0
- package/dist/configurators/project/index.js +6 -0
- package/dist/configurators/project/index.js.map +1 -0
- package/dist/configurators/project/mandatory.d.ts +3 -0
- package/dist/configurators/project/mandatory.d.ts.map +1 -0
- package/dist/configurators/project/mandatory.js +167 -0
- package/dist/configurators/project/mandatory.js.map +1 -0
- package/dist/configurators/project/structure.d.ts +3 -0
- package/dist/configurators/project/structure.d.ts.map +1 -0
- package/dist/configurators/project/structure.js +34 -0
- package/dist/configurators/project/structure.js.map +1 -0
- package/dist/configurators/state/dataFetching.d.ts +3 -0
- package/dist/configurators/state/dataFetching.d.ts.map +1 -0
- package/dist/configurators/state/dataFetching.js +23 -0
- package/dist/configurators/state/dataFetching.js.map +1 -0
- package/dist/configurators/state/forms.d.ts +3 -0
- package/dist/configurators/state/forms.d.ts.map +1 -0
- package/dist/configurators/state/forms.js +35 -0
- package/dist/configurators/state/forms.js.map +1 -0
- package/dist/configurators/state/index.d.ts +5 -0
- package/dist/configurators/state/index.d.ts.map +1 -0
- package/dist/configurators/state/index.js +5 -0
- package/dist/configurators/state/index.js.map +1 -0
- package/dist/configurators/state/routing.d.ts +3 -0
- package/dist/configurators/state/routing.d.ts.map +1 -0
- package/dist/configurators/state/routing.js +23 -0
- package/dist/configurators/state/routing.js.map +1 -0
- package/dist/configurators/state/state.d.ts +3 -0
- package/dist/configurators/state/state.d.ts.map +1 -0
- package/dist/configurators/state/state.js +91 -0
- package/dist/configurators/state/state.js.map +1 -0
- package/dist/configurators/styling/icons.d.ts +3 -0
- package/dist/configurators/styling/icons.d.ts.map +1 -0
- package/dist/configurators/styling/icons.js +27 -0
- package/dist/configurators/styling/icons.js.map +1 -0
- package/dist/configurators/styling/index.d.ts +4 -0
- package/dist/configurators/styling/index.d.ts.map +1 -0
- package/dist/configurators/styling/index.js +4 -0
- package/dist/configurators/styling/index.js.map +1 -0
- package/dist/configurators/styling/styling.d.ts +3 -0
- package/dist/configurators/styling/styling.d.ts.map +1 -0
- package/dist/configurators/styling/styling.js +62 -0
- package/dist/configurators/styling/styling.js.map +1 -0
- package/dist/configurators/styling/ui.d.ts +3 -0
- package/dist/configurators/styling/ui.d.ts.map +1 -0
- package/dist/configurators/styling/ui.js +188 -0
- package/dist/configurators/styling/ui.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lazy-loader.d.ts +57 -0
- package/dist/core/lazy-loader.d.ts.map +1 -0
- package/dist/core/lazy-loader.js +231 -0
- package/dist/core/lazy-loader.js.map +1 -0
- package/dist/core/parallel.d.ts +29 -0
- package/dist/core/parallel.d.ts.map +1 -0
- package/dist/core/parallel.js +127 -0
- package/dist/core/parallel.js.map +1 -0
- package/dist/core/presets.d.ts +10 -0
- package/dist/core/presets.d.ts.map +1 -0
- package/dist/core/presets.js +73 -0
- package/dist/core/presets.js.map +1 -0
- package/dist/core/prompts/core.d.ts +18 -0
- package/dist/core/prompts/core.d.ts.map +1 -0
- package/dist/core/prompts/core.js +420 -0
- package/dist/core/prompts/core.js.map +1 -0
- package/dist/core/prompts/filter.d.ts +34 -0
- package/dist/core/prompts/filter.d.ts.map +1 -0
- package/dist/core/prompts/filter.js +48 -0
- package/dist/core/prompts/filter.js.map +1 -0
- package/dist/core/prompts/index.d.ts +10 -0
- package/dist/core/prompts/index.d.ts.map +1 -0
- package/dist/core/prompts/index.js +16 -0
- package/dist/core/prompts/index.js.map +1 -0
- package/dist/core/prompts/optional.d.ts +15 -0
- package/dist/core/prompts/optional.d.ts.map +1 -0
- package/dist/core/prompts/optional.js +228 -0
- package/dist/core/prompts/optional.js.map +1 -0
- package/dist/core/prompts/utils.d.ts +37 -0
- package/dist/core/prompts/utils.d.ts.map +1 -0
- package/dist/core/prompts/utils.js +72 -0
- package/dist/core/prompts/utils.js.map +1 -0
- package/dist/core/prompts.d.ts +6 -0
- package/dist/core/prompts.d.ts.map +1 -0
- package/dist/core/prompts.js +6 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/setup.d.ts +28 -0
- package/dist/core/setup.d.ts.map +1 -0
- package/dist/core/setup.js +96 -0
- package/dist/core/setup.js.map +1 -0
- package/dist/core/wizard.d.ts +39 -0
- package/dist/core/wizard.d.ts.map +1 -0
- package/dist/core/wizard.js +259 -0
- package/dist/core/wizard.js.map +1 -0
- package/dist/errors/index.d.ts +67 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +253 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/messages.d.ts +56 -0
- package/dist/errors/messages.d.ts.map +1 -0
- package/dist/errors/messages.js +234 -0
- package/dist/errors/messages.js.map +1 -0
- package/dist/generators/index.d.ts +86 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +441 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/index.d.ts +48 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +49 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +38 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +229 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +32 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +220 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/types.d.ts +186 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +5 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/security/index.d.ts +59 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +230 -0
- package/dist/security/index.js.map +1 -0
- package/dist/templates/entry.d.ts +9 -0
- package/dist/templates/entry.d.ts.map +1 -0
- package/dist/templates/entry.js +24 -0
- package/dist/templates/entry.js.map +1 -0
- package/dist/templates/index.d.ts +7 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +10 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/main.d.ts +6 -0
- package/dist/templates/main.d.ts.map +1 -0
- package/dist/templates/main.js +72 -0
- package/dist/templates/main.js.map +1 -0
- package/dist/templates/readme.d.ts +3 -0
- package/dist/templates/readme.d.ts.map +1 -0
- package/dist/templates/readme.js +127 -0
- package/dist/templates/readme.js.map +1 -0
- package/dist/templates/styles.d.ts +6 -0
- package/dist/templates/styles.d.ts.map +1 -0
- package/dist/templates/styles.js +212 -0
- package/dist/templates/styles.js.map +1 -0
- package/dist/templates/welcome.d.ts +10 -0
- package/dist/templates/welcome.d.ts.map +1 -0
- package/dist/templates/welcome.js +322 -0
- package/dist/templates/welcome.js.map +1 -0
- package/dist/types/index.d.ts +46 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/batch-writer.d.ts +101 -0
- package/dist/utils/batch-writer.d.ts.map +1 -0
- package/dist/utils/batch-writer.js +232 -0
- package/dist/utils/batch-writer.js.map +1 -0
- package/dist/utils/cache.d.ts +60 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +119 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/fileTree.d.ts +3 -0
- package/dist/utils/fileTree.d.ts.map +1 -0
- package/dist/utils/fileTree.js +71 -0
- package/dist/utils/fileTree.js.map +1 -0
- package/dist/utils/fs.d.ts +22 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +75 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/helpers.d.ts +91 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +192 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/progress.d.ts +85 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +142 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/spinner.d.ts +9 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +56 -0
- package/dist/utils/spinner.js.map +1 -0
- package/dist/validation/index.d.ts +63 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +262 -0
- package/dist/validation/index.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { addDependency, getPackageJson, savePackageJson } from '../../utils/index.js';
|
|
2
|
+
export const variantConfigurator = async (ctx) => {
|
|
3
|
+
const { variant, framework } = ctx.selections;
|
|
4
|
+
if (framework !== 'react')
|
|
5
|
+
return;
|
|
6
|
+
const pkg = await getPackageJson(ctx);
|
|
7
|
+
const hasCompiler = variant.includes('compiler');
|
|
8
|
+
const hasSWC = variant.includes('swc');
|
|
9
|
+
if (hasCompiler) {
|
|
10
|
+
// React Compiler dependencies
|
|
11
|
+
addDependency(pkg, 'babel-plugin-react-compiler', '^19.0.0-beta-e552027-20250112', true);
|
|
12
|
+
addDependency(pkg, 'eslint-plugin-react-compiler', '^19.0.0-beta-e552027-20250112', true);
|
|
13
|
+
addDependency(pkg, '@babel/core', '^7.26.0', true);
|
|
14
|
+
addDependency(pkg, '@babel/preset-react', '^7.26.0', true);
|
|
15
|
+
}
|
|
16
|
+
if (hasSWC) {
|
|
17
|
+
// SWC dependencies - Vite uses @vitejs/plugin-react-swc
|
|
18
|
+
addDependency(pkg, '@vitejs/plugin-react-swc', '^3.7.0', true);
|
|
19
|
+
}
|
|
20
|
+
await savePackageJson(ctx, pkg);
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=variant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variant.js","sourceRoot":"","sources":["../../../src/configurators/core/variant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEtF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,GAAwB,EAAiB,EAAE;IACnF,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;IAE9C,IAAI,SAAS,KAAK,OAAO;QAAE,OAAO;IAElC,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,WAAW,EAAE,CAAC;QAChB,8BAA8B;QAC9B,aAAa,CAAC,GAAG,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,IAAI,CAAC,CAAC;QACzF,aAAa,CAAC,GAAG,EAAE,8BAA8B,EAAE,+BAA+B,EAAE,IAAI,CAAC,CAAC;QAC1F,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACnD,aAAa,CAAC,GAAG,EAAE,qBAAqB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,wDAAwD;QACxD,aAAa,CAAC,GAAG,EAAE,0BAA0B,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/configurators/index.ts"],"names":[],"mappings":"AAEA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/configurators/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/configurators/project/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,eAAO,MAAM,gBAAgB,GAAU,KAAK,mBAAmB,KAAG,OAAO,CAAC,IAAI,CAiF7E,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { addDependency, ensureDir, getPackageJson, savePackageJson, writeFile } from '../../utils/index.js';
|
|
3
|
+
export const authConfigurator = async (ctx) => {
|
|
4
|
+
const { auth, variant, framework } = ctx.selections;
|
|
5
|
+
if (!auth || auth === 'none')
|
|
6
|
+
return;
|
|
7
|
+
const pkg = await getPackageJson(ctx);
|
|
8
|
+
const isTypeScript = variant.startsWith('ts');
|
|
9
|
+
const ext = isTypeScript ? 'ts' : 'js';
|
|
10
|
+
switch (auth) {
|
|
11
|
+
case 'jwt':
|
|
12
|
+
// Create auth utilities
|
|
13
|
+
await ensureDir(path.join(ctx.projectPath, 'src/lib/auth'));
|
|
14
|
+
const authIndex = `// JWT Authentication utilities
|
|
15
|
+
|
|
16
|
+
const TOKEN_KEY = 'auth_token';
|
|
17
|
+
const REFRESH_TOKEN_KEY = 'refresh_token';
|
|
18
|
+
|
|
19
|
+
export interface User {
|
|
20
|
+
id: string;
|
|
21
|
+
email: string;
|
|
22
|
+
name?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface AuthTokens {
|
|
26
|
+
accessToken: string;
|
|
27
|
+
refreshToken: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const getToken = (): string | null => {
|
|
31
|
+
return localStorage.getItem(TOKEN_KEY);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const getRefreshToken = (): string | null => {
|
|
35
|
+
return localStorage.getItem(REFRESH_TOKEN_KEY);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const setTokens = (tokens: AuthTokens): void => {
|
|
39
|
+
localStorage.setItem(TOKEN_KEY, tokens.accessToken);
|
|
40
|
+
localStorage.setItem(REFRESH_TOKEN_KEY, tokens.refreshToken);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export const clearTokens = (): void => {
|
|
44
|
+
localStorage.removeItem(TOKEN_KEY);
|
|
45
|
+
localStorage.removeItem(REFRESH_TOKEN_KEY);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export const isAuthenticated = (): boolean => {
|
|
49
|
+
const token = getToken();
|
|
50
|
+
if (!token) return false;
|
|
51
|
+
|
|
52
|
+
try {
|
|
53
|
+
const payload = JSON.parse(atob(token.split('.')[1]));
|
|
54
|
+
return payload.exp * 1000 > Date.now();
|
|
55
|
+
} catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const parseToken = (token: string): User | null => {
|
|
61
|
+
try {
|
|
62
|
+
const payload = JSON.parse(atob(token.split('.')[1]));
|
|
63
|
+
return {
|
|
64
|
+
id: payload.sub,
|
|
65
|
+
email: payload.email,
|
|
66
|
+
name: payload.name,
|
|
67
|
+
};
|
|
68
|
+
} catch {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
`;
|
|
73
|
+
await writeFile(path.join(ctx.projectPath, 'src/lib/auth', `index.${ext}`), authIndex);
|
|
74
|
+
await savePackageJson(ctx, pkg);
|
|
75
|
+
break;
|
|
76
|
+
case 'authjs':
|
|
77
|
+
addDependency(pkg, 'next-auth', '^5.0.0-beta.25');
|
|
78
|
+
await savePackageJson(ctx, pkg);
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/configurators/project/auth.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE5G,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAwB,EAAiB,EAAE;IAChF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;IACpD,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO;IAErC,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAEvC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK;YACR,wBAAwB;YACxB,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;YAE5D,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DvB,CAAC;YACI,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,EAAE,SAAS,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;YACvF,MAAM,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAChC,MAAM;QAER,KAAK,QAAQ;YACX,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;YAClD,MAAM,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAChC,MAAM;IACV,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CI/CD Configurator
|
|
3
|
+
*
|
|
4
|
+
* Sets up GitHub Actions workflows for continuous integration.
|
|
5
|
+
*/
|
|
6
|
+
import type { ConfiguratorContext } from '../../types/index.js';
|
|
7
|
+
export interface CICDOptions {
|
|
8
|
+
/** Enable CI workflow */
|
|
9
|
+
ci?: boolean;
|
|
10
|
+
/** Enable deploy workflow (GitHub Pages) */
|
|
11
|
+
deploy?: boolean;
|
|
12
|
+
/** Enable release workflow */
|
|
13
|
+
release?: boolean;
|
|
14
|
+
/** Enable PR check workflow */
|
|
15
|
+
prCheck?: boolean;
|
|
16
|
+
/** Enable Dependabot */
|
|
17
|
+
dependabot?: boolean;
|
|
18
|
+
/** Enable CodeQL security scanning */
|
|
19
|
+
codeql?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Configure CI/CD workflows
|
|
23
|
+
*/
|
|
24
|
+
export declare const cicdConfigurator: (ctx: ConfiguratorContext, options?: CICDOptions) => Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Create CI/CD files (simplified version for mandatory features)
|
|
27
|
+
*/
|
|
28
|
+
export declare const createCICD: (ctx: ConfiguratorContext) => Promise<void>;
|
|
29
|
+
export default cicdConfigurator;
|
|
30
|
+
//# sourceMappingURL=cicd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cicd.d.ts","sourceRoot":"","sources":["../../../src/configurators/project/cicd.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAwPhE,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,4CAA4C;IAC5C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wBAAwB;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,KAAK,mBAAmB,EACxB,UAAS,WAAgB,KACxB,OAAO,CAAC,IAAI,CAiEd,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAU,KAAK,mBAAmB,KAAG,OAAO,CAAC,IAAI,CAMvE,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CI/CD Configurator
|
|
3
|
+
*
|
|
4
|
+
* Sets up GitHub Actions workflows for continuous integration.
|
|
5
|
+
*/
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { ensureDir, writeFile } from '../../utils/fs.js';
|
|
8
|
+
// ============================================
|
|
9
|
+
// Templates
|
|
10
|
+
// ============================================
|
|
11
|
+
const ciWorkflowTemplate = (isTypeScript) => `name: CI
|
|
12
|
+
|
|
13
|
+
on:
|
|
14
|
+
push:
|
|
15
|
+
branches: [main, master]
|
|
16
|
+
pull_request:
|
|
17
|
+
branches: [main, master]
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
build:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
|
|
23
|
+
strategy:
|
|
24
|
+
matrix:
|
|
25
|
+
node-version: [18.x, 20.x]
|
|
26
|
+
|
|
27
|
+
steps:
|
|
28
|
+
- name: Checkout repository
|
|
29
|
+
uses: actions/checkout@v4
|
|
30
|
+
|
|
31
|
+
- name: Setup Node.js \${{ matrix.node-version }}
|
|
32
|
+
uses: actions/setup-node@v4
|
|
33
|
+
with:
|
|
34
|
+
node-version: \${{ matrix.node-version }}
|
|
35
|
+
cache: 'npm'
|
|
36
|
+
|
|
37
|
+
- name: Install dependencies
|
|
38
|
+
run: npm ci
|
|
39
|
+
|
|
40
|
+
${isTypeScript ? ` - name: Type check
|
|
41
|
+
run: npm run type-check
|
|
42
|
+
|
|
43
|
+
` : ''} - name: Lint
|
|
44
|
+
run: npm run lint
|
|
45
|
+
|
|
46
|
+
- name: Run tests
|
|
47
|
+
run: npm run test:run
|
|
48
|
+
|
|
49
|
+
- name: Build
|
|
50
|
+
run: npm run build
|
|
51
|
+
`;
|
|
52
|
+
const deployWorkflowTemplate = (projectName) => `name: Deploy
|
|
53
|
+
|
|
54
|
+
on:
|
|
55
|
+
push:
|
|
56
|
+
branches: [main, master]
|
|
57
|
+
workflow_dispatch:
|
|
58
|
+
|
|
59
|
+
permissions:
|
|
60
|
+
contents: read
|
|
61
|
+
pages: write
|
|
62
|
+
id-token: write
|
|
63
|
+
|
|
64
|
+
concurrency:
|
|
65
|
+
group: 'pages'
|
|
66
|
+
cancel-in-progress: true
|
|
67
|
+
|
|
68
|
+
jobs:
|
|
69
|
+
build:
|
|
70
|
+
runs-on: ubuntu-latest
|
|
71
|
+
steps:
|
|
72
|
+
- name: Checkout
|
|
73
|
+
uses: actions/checkout@v4
|
|
74
|
+
|
|
75
|
+
- name: Setup Node.js
|
|
76
|
+
uses: actions/setup-node@v4
|
|
77
|
+
with:
|
|
78
|
+
node-version: '20'
|
|
79
|
+
cache: 'npm'
|
|
80
|
+
|
|
81
|
+
- name: Install dependencies
|
|
82
|
+
run: npm ci
|
|
83
|
+
|
|
84
|
+
- name: Build
|
|
85
|
+
run: npm run build
|
|
86
|
+
|
|
87
|
+
- name: Setup Pages
|
|
88
|
+
uses: actions/configure-pages@v4
|
|
89
|
+
|
|
90
|
+
- name: Upload artifact
|
|
91
|
+
uses: actions/upload-pages-artifact@v3
|
|
92
|
+
with:
|
|
93
|
+
path: './dist'
|
|
94
|
+
|
|
95
|
+
deploy:
|
|
96
|
+
environment:
|
|
97
|
+
name: github-pages
|
|
98
|
+
url: \${{ steps.deployment.outputs.page_url }}
|
|
99
|
+
runs-on: ubuntu-latest
|
|
100
|
+
needs: build
|
|
101
|
+
steps:
|
|
102
|
+
- name: Deploy to GitHub Pages
|
|
103
|
+
id: deployment
|
|
104
|
+
uses: actions/deploy-pages@v4
|
|
105
|
+
`;
|
|
106
|
+
const releaseWorkflowTemplate = () => `name: Release
|
|
107
|
+
|
|
108
|
+
on:
|
|
109
|
+
push:
|
|
110
|
+
tags:
|
|
111
|
+
- 'v*'
|
|
112
|
+
|
|
113
|
+
permissions:
|
|
114
|
+
contents: write
|
|
115
|
+
|
|
116
|
+
jobs:
|
|
117
|
+
release:
|
|
118
|
+
runs-on: ubuntu-latest
|
|
119
|
+
steps:
|
|
120
|
+
- name: Checkout
|
|
121
|
+
uses: actions/checkout@v4
|
|
122
|
+
|
|
123
|
+
- name: Setup Node.js
|
|
124
|
+
uses: actions/setup-node@v4
|
|
125
|
+
with:
|
|
126
|
+
node-version: '20'
|
|
127
|
+
cache: 'npm'
|
|
128
|
+
|
|
129
|
+
- name: Install dependencies
|
|
130
|
+
run: npm ci
|
|
131
|
+
|
|
132
|
+
- name: Build
|
|
133
|
+
run: npm run build
|
|
134
|
+
|
|
135
|
+
- name: Create Release
|
|
136
|
+
uses: softprops/action-gh-release@v1
|
|
137
|
+
with:
|
|
138
|
+
generate_release_notes: true
|
|
139
|
+
files: |
|
|
140
|
+
dist/**/*
|
|
141
|
+
`;
|
|
142
|
+
const prCheckWorkflowTemplate = (isTypeScript) => `name: PR Check
|
|
143
|
+
|
|
144
|
+
on:
|
|
145
|
+
pull_request:
|
|
146
|
+
types: [opened, synchronize, reopened]
|
|
147
|
+
|
|
148
|
+
jobs:
|
|
149
|
+
check:
|
|
150
|
+
runs-on: ubuntu-latest
|
|
151
|
+
|
|
152
|
+
steps:
|
|
153
|
+
- name: Checkout
|
|
154
|
+
uses: actions/checkout@v4
|
|
155
|
+
|
|
156
|
+
- name: Setup Node.js
|
|
157
|
+
uses: actions/setup-node@v4
|
|
158
|
+
with:
|
|
159
|
+
node-version: '20'
|
|
160
|
+
cache: 'npm'
|
|
161
|
+
|
|
162
|
+
- name: Install dependencies
|
|
163
|
+
run: npm ci
|
|
164
|
+
|
|
165
|
+
${isTypeScript ? ` - name: Type check
|
|
166
|
+
run: npm run type-check
|
|
167
|
+
|
|
168
|
+
` : ''} - name: Lint
|
|
169
|
+
run: npm run lint
|
|
170
|
+
|
|
171
|
+
- name: Test
|
|
172
|
+
run: npm run test:run
|
|
173
|
+
|
|
174
|
+
- name: Build
|
|
175
|
+
run: npm run build
|
|
176
|
+
|
|
177
|
+
- name: Check bundle size
|
|
178
|
+
run: |
|
|
179
|
+
BUNDLE_SIZE=$(du -sk dist | cut -f1)
|
|
180
|
+
echo "Bundle size: \${BUNDLE_SIZE}KB"
|
|
181
|
+
if [ "$BUNDLE_SIZE" -gt 5000 ]; then
|
|
182
|
+
echo "⚠️ Warning: Bundle size exceeds 5MB"
|
|
183
|
+
fi
|
|
184
|
+
`;
|
|
185
|
+
const dependabotTemplate = () => `version: 2
|
|
186
|
+
updates:
|
|
187
|
+
- package-ecosystem: "npm"
|
|
188
|
+
directory: "/"
|
|
189
|
+
schedule:
|
|
190
|
+
interval: "weekly"
|
|
191
|
+
open-pull-requests-limit: 10
|
|
192
|
+
groups:
|
|
193
|
+
development-dependencies:
|
|
194
|
+
dependency-type: "development"
|
|
195
|
+
update-types:
|
|
196
|
+
- "minor"
|
|
197
|
+
- "patch"
|
|
198
|
+
production-dependencies:
|
|
199
|
+
dependency-type: "production"
|
|
200
|
+
update-types:
|
|
201
|
+
- "patch"
|
|
202
|
+
`;
|
|
203
|
+
const codeqlWorkflowTemplate = () => `name: "CodeQL"
|
|
204
|
+
|
|
205
|
+
on:
|
|
206
|
+
push:
|
|
207
|
+
branches: [main, master]
|
|
208
|
+
pull_request:
|
|
209
|
+
branches: [main, master]
|
|
210
|
+
schedule:
|
|
211
|
+
- cron: '0 0 * * 0'
|
|
212
|
+
|
|
213
|
+
jobs:
|
|
214
|
+
analyze:
|
|
215
|
+
name: Analyze
|
|
216
|
+
runs-on: ubuntu-latest
|
|
217
|
+
permissions:
|
|
218
|
+
actions: read
|
|
219
|
+
contents: read
|
|
220
|
+
security-events: write
|
|
221
|
+
|
|
222
|
+
strategy:
|
|
223
|
+
fail-fast: false
|
|
224
|
+
matrix:
|
|
225
|
+
language: ['javascript']
|
|
226
|
+
|
|
227
|
+
steps:
|
|
228
|
+
- name: Checkout repository
|
|
229
|
+
uses: actions/checkout@v4
|
|
230
|
+
|
|
231
|
+
- name: Initialize CodeQL
|
|
232
|
+
uses: github/codeql-action/init@v3
|
|
233
|
+
with:
|
|
234
|
+
languages: \${{ matrix.language }}
|
|
235
|
+
|
|
236
|
+
- name: Autobuild
|
|
237
|
+
uses: github/codeql-action/autobuild@v3
|
|
238
|
+
|
|
239
|
+
- name: Perform CodeQL Analysis
|
|
240
|
+
uses: github/codeql-action/analyze@v3
|
|
241
|
+
`;
|
|
242
|
+
/**
|
|
243
|
+
* Configure CI/CD workflows
|
|
244
|
+
*/
|
|
245
|
+
export const cicdConfigurator = async (ctx, options = {}) => {
|
|
246
|
+
const { ci = true, deploy = false, release = false, prCheck = true, dependabot = true, codeql = false, } = options;
|
|
247
|
+
const isTypeScript = ctx.selections.language === 'typescript';
|
|
248
|
+
const workflowsDir = path.join(ctx.projectPath, '.github', 'workflows');
|
|
249
|
+
// Ensure .github/workflows directory exists
|
|
250
|
+
await ensureDir(workflowsDir);
|
|
251
|
+
// CI Workflow
|
|
252
|
+
if (ci) {
|
|
253
|
+
await writeFile(path.join(workflowsDir, 'ci.yml'), ciWorkflowTemplate(isTypeScript));
|
|
254
|
+
}
|
|
255
|
+
// Deploy Workflow
|
|
256
|
+
if (deploy) {
|
|
257
|
+
await writeFile(path.join(workflowsDir, 'deploy.yml'), deployWorkflowTemplate(ctx.selections.projectName));
|
|
258
|
+
}
|
|
259
|
+
// Release Workflow
|
|
260
|
+
if (release) {
|
|
261
|
+
await writeFile(path.join(workflowsDir, 'release.yml'), releaseWorkflowTemplate());
|
|
262
|
+
}
|
|
263
|
+
// PR Check Workflow
|
|
264
|
+
if (prCheck) {
|
|
265
|
+
await writeFile(path.join(workflowsDir, 'pr-check.yml'), prCheckWorkflowTemplate(isTypeScript));
|
|
266
|
+
}
|
|
267
|
+
// CodeQL
|
|
268
|
+
if (codeql) {
|
|
269
|
+
await writeFile(path.join(workflowsDir, 'codeql.yml'), codeqlWorkflowTemplate());
|
|
270
|
+
}
|
|
271
|
+
// Dependabot
|
|
272
|
+
if (dependabot) {
|
|
273
|
+
const githubDir = path.join(ctx.projectPath, '.github');
|
|
274
|
+
await ensureDir(githubDir);
|
|
275
|
+
await writeFile(path.join(githubDir, 'dependabot.yml'), dependabotTemplate());
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
/**
|
|
279
|
+
* Create CI/CD files (simplified version for mandatory features)
|
|
280
|
+
*/
|
|
281
|
+
export const createCICD = async (ctx) => {
|
|
282
|
+
await cicdConfigurator(ctx, {
|
|
283
|
+
ci: true,
|
|
284
|
+
prCheck: true,
|
|
285
|
+
dependabot: true,
|
|
286
|
+
});
|
|
287
|
+
};
|
|
288
|
+
export default cicdConfigurator;
|
|
289
|
+
//# sourceMappingURL=cicd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cicd.js","sourceRoot":"","sources":["../../../src/configurators/project/cicd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/configurators/project/i18n.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,eAAO,MAAM,gBAAgB,GAAU,KAAK,mBAAmB,KAAG,OAAO,CAAC,IAAI,CAmE7E,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { addDependency, ensureDir, getPackageJson, savePackageJson, writeFile, writeJson } from '../../utils/index.js';
|
|
3
|
+
export const i18nConfigurator = async (ctx) => {
|
|
4
|
+
const { i18n, framework } = ctx.selections;
|
|
5
|
+
if (!i18n || i18n === 'none')
|
|
6
|
+
return;
|
|
7
|
+
const pkg = await getPackageJson(ctx);
|
|
8
|
+
switch (i18n) {
|
|
9
|
+
case 'i18next':
|
|
10
|
+
addDependency(pkg, 'i18next', '^23.15.0');
|
|
11
|
+
if (framework === 'react') {
|
|
12
|
+
addDependency(pkg, 'react-i18next', '^15.0.0');
|
|
13
|
+
}
|
|
14
|
+
addDependency(pkg, 'i18next-browser-languagedetector', '^8.0.0');
|
|
15
|
+
await savePackageJson(ctx, pkg);
|
|
16
|
+
// Create i18n config
|
|
17
|
+
const i18nConfig = `import i18n from 'i18next';
|
|
18
|
+
import { initReactI18next } from 'react-i18next';
|
|
19
|
+
import LanguageDetector from 'i18next-browser-languagedetector';
|
|
20
|
+
import en from './locales/en.json';
|
|
21
|
+
import ar from './locales/ar.json';
|
|
22
|
+
|
|
23
|
+
i18n
|
|
24
|
+
.use(LanguageDetector)
|
|
25
|
+
.use(initReactI18next)
|
|
26
|
+
.init({
|
|
27
|
+
resources: {
|
|
28
|
+
en: { translation: en },
|
|
29
|
+
ar: { translation: ar },
|
|
30
|
+
},
|
|
31
|
+
fallbackLng: 'en',
|
|
32
|
+
interpolation: {
|
|
33
|
+
escapeValue: false,
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
export default i18n;
|
|
38
|
+
`;
|
|
39
|
+
await ensureDir(path.join(ctx.projectPath, 'src/i18n'));
|
|
40
|
+
await ensureDir(path.join(ctx.projectPath, 'src/i18n/locales'));
|
|
41
|
+
await writeFile(path.join(ctx.projectPath, 'src/i18n/index.ts'), i18nConfig);
|
|
42
|
+
await writeJson(path.join(ctx.projectPath, 'src/i18n/locales/en.json'), { welcome: 'Welcome' });
|
|
43
|
+
await writeJson(path.join(ctx.projectPath, 'src/i18n/locales/ar.json'), { welcome: 'مرحباً' });
|
|
44
|
+
break;
|
|
45
|
+
case 'lingui':
|
|
46
|
+
addDependency(pkg, '@lingui/core', '^4.11.0');
|
|
47
|
+
addDependency(pkg, '@lingui/react', '^4.11.0');
|
|
48
|
+
addDependency(pkg, '@lingui/cli', '^4.11.0', true);
|
|
49
|
+
addDependency(pkg, '@lingui/macro', '^4.11.0', true);
|
|
50
|
+
await savePackageJson(ctx, pkg);
|
|
51
|
+
const linguiConfig = `module.exports = {
|
|
52
|
+
locales: ['en', 'ar'],
|
|
53
|
+
sourceLocale: 'en',
|
|
54
|
+
catalogs: [
|
|
55
|
+
{
|
|
56
|
+
path: 'src/locales/{locale}/messages',
|
|
57
|
+
include: ['src'],
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
format: 'po',
|
|
61
|
+
};
|
|
62
|
+
`;
|
|
63
|
+
await writeFile(path.join(ctx.projectPath, 'lingui.config.js'), linguiConfig);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=i18n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../src/configurators/project/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEvH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAwB,EAAiB,EAAE;IAChF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;IAC3C,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO;IAErC,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;IAEtC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS;YACZ,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YAC1C,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gBAC1B,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;YACjD,CAAC;YACD,aAAa,CAAC,GAAG,EAAE,kCAAkC,EAAE,QAAQ,CAAC,CAAC;YACjE,MAAM,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAEhC,qBAAqB;YACrB,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBxB,CAAC;YACI,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;YACxD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC,CAAC;YAChE,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,mBAAmB,CAAC,EAAE,UAAU,CAAC,CAAC;YAC7E,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,0BAA0B,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAChG,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,0BAA0B,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/F,MAAM;QAER,KAAK,QAAQ;YACX,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;YAC9C,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;YAC/C,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YACnD,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YACrD,MAAM,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAEhC,MAAM,YAAY,GAAG;;;;;;;;;;;CAW1B,CAAC;YACI,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAAE,YAAY,CAAC,CAAC;YAC9E,MAAM;IACV,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { authConfigurator } from './auth.js';
|
|
2
|
+
export { cicdConfigurator, createCICD, type CICDOptions } from './cicd.js';
|
|
3
|
+
export { i18nConfigurator } from './i18n.js';
|
|
4
|
+
export { mandatoryConfigurator } from './mandatory.js';
|
|
5
|
+
export { structureConfigurator } from './structure.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/configurators/project/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { authConfigurator } from './auth.js';
|
|
2
|
+
export { cicdConfigurator, createCICD } from './cicd.js';
|
|
3
|
+
export { i18nConfigurator } from './i18n.js';
|
|
4
|
+
export { mandatoryConfigurator } from './mandatory.js';
|
|
5
|
+
export { structureConfigurator } from './structure.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/configurators/project/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mandatory.d.ts","sourceRoot":"","sources":["../../../src/configurators/project/mandatory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAK3D,eAAO,MAAM,qBAAqB,GAAU,KAAK,mBAAmB,KAAG,OAAO,CAAC,IAAI,CAwKlF,CAAC"}
|