@igniter-js/cli 0.1.4 → 0.1.6

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 (36) hide show
  1. package/dist/index.js +373 -191
  2. package/dist/index.js.map +1 -0
  3. package/dist/templates/express.server.hbs +33 -0
  4. package/dist/templates/feature.controller.hbs +14 -4
  5. package/dist/templates/feature.interface.hbs +27 -5
  6. package/dist/templates/feature.procedure.hbs +12 -7
  7. package/dist/templates/globals.hbs +7 -82
  8. package/dist/templates/igniter.context.hbs +1 -1
  9. package/dist/templates/layout.hbs +6 -14
  10. package/dist/templates/page.hbs +4 -37
  11. package/dist/templates/readme.hbs +25 -42
  12. package/dist/utils/analyze.js +8 -10
  13. package/dist/utils/analyze.js.map +1 -0
  14. package/dist/utils/cli-style.d.ts +55 -0
  15. package/dist/utils/cli-style.js +171 -0
  16. package/dist/utils/cli-style.js.map +1 -0
  17. package/dist/utils/consts.d.ts +4 -9
  18. package/dist/utils/consts.js +5 -13
  19. package/dist/utils/consts.js.map +1 -0
  20. package/dist/utils/handlebars-helpers.js +18 -5
  21. package/dist/utils/handlebars-helpers.js.map +1 -0
  22. package/dist/utils/helpers.d.ts +2 -1
  23. package/dist/utils/helpers.js +44 -17
  24. package/dist/utils/helpers.js.map +1 -0
  25. package/dist/utils/platform-utils.d.ts +46 -0
  26. package/dist/utils/platform-utils.js +95 -0
  27. package/dist/utils/platform-utils.js.map +1 -0
  28. package/dist/utils/prisma-schema-parser.js +11 -16
  29. package/dist/utils/prisma-schema-parser.js.map +1 -0
  30. package/dist/utils/project-utils.d.ts +32 -0
  31. package/dist/utils/project-utils.js +123 -0
  32. package/dist/utils/project-utils.js.map +1 -0
  33. package/dist/utils/template-handler.js +4 -5
  34. package/dist/utils/template-handler.js.map +1 -0
  35. package/package.json +3 -1
  36. package/readme.md +23 -1
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isWindows = isWindows;
4
+ exports.normalizePath = normalizePath;
5
+ exports.supportsUnicode = supportsUnicode;
6
+ exports.getVisualElements = getVisualElements;
7
+ const tslib_1 = require("tslib");
8
+ const path_1 = tslib_1.__importDefault(require("path"));
9
+ const is_windows_1 = tslib_1.__importDefault(require("is-windows"));
10
+ /**
11
+ * Funções básicas de utilidade para detecção de plataforma
12
+ * Arquivo separado para evitar referências circulares
13
+ */
14
+ /**
15
+ * Verifica se está rodando no Windows
16
+ * @returns {boolean} True se estiver rodando no Windows
17
+ */
18
+ function isWindows() {
19
+ return (0, is_windows_1.default)() || process.platform === 'win32';
20
+ }
21
+ /**
22
+ * Normaliza separadores de caminho para a plataforma atual
23
+ * @param {string} filePath - O caminho a ser normalizado
24
+ * @returns {string} O caminho normalizado
25
+ */
26
+ function normalizePath(filePath) {
27
+ return path_1.default.normalize(filePath);
28
+ }
29
+ /**
30
+ * Verifica se o terminal suporta caracteres Unicode
31
+ * @returns {boolean} True se o terminal suportar caracteres Unicode
32
+ */
33
+ function supportsUnicode() {
34
+ // Verificação mais robusta de suporte a Unicode no Windows
35
+ const isWinOS = isWindows();
36
+ // No Windows, verificar também a variável de ambiente TERM
37
+ const termVar = process.env.TERM || '';
38
+ const isPowerShell = process.env.SHELL?.includes('powershell') || false;
39
+ const isWindowsTerminal = process.env.WT_SESSION !== undefined;
40
+ // Windows Terminal e PowerShell Core suportam Unicode bem
41
+ if (isWinOS && (isWindowsTerminal || isPowerShell || termVar.includes('xterm'))) {
42
+ return true;
43
+ }
44
+ // Para outros sistemas, verificar se é um TTY
45
+ return process.stdout.isTTY && !isWinOS;
46
+ }
47
+ /**
48
+ * Obtém elementos visuais apropriados para a plataforma atual
49
+ * @returns {object} Objeto contendo elementos visuais adequados para a plataforma atual
50
+ */
51
+ function getVisualElements() {
52
+ const hasUnicodeSupport = supportsUnicode();
53
+ // Elementos ASCII simples para baixa compatibilidade
54
+ let elements = {
55
+ verticalLine: '|',
56
+ horizontalLine: '-',
57
+ topRight: '+',
58
+ topLeft: '+',
59
+ bottomRight: '+',
60
+ bottomLeft: '+',
61
+ cross: '+',
62
+ bullet: '*',
63
+ checkmark: '√',
64
+ cross_mark: 'x',
65
+ warning: '!',
66
+ info: 'i',
67
+ arrow: '->'
68
+ };
69
+ // Elementos aprimorados para terminais com melhor suporte a símbolos
70
+ if (hasUnicodeSupport) {
71
+ elements = {
72
+ verticalLine: '│',
73
+ horizontalLine: '─',
74
+ topRight: '┐',
75
+ topLeft: '┌',
76
+ bottomRight: '┘',
77
+ bottomLeft: '└',
78
+ cross: '┼',
79
+ bullet: '•',
80
+ checkmark: '✓',
81
+ cross_mark: '✗',
82
+ warning: '⚠',
83
+ info: 'ℹ',
84
+ arrow: '→'
85
+ };
86
+ }
87
+ return elements;
88
+ }
89
+ exports.default = {
90
+ isWindows,
91
+ normalizePath,
92
+ supportsUnicode,
93
+ getVisualElements
94
+ };
95
+ //# sourceMappingURL=platform-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-utils.js","sourceRoot":"","sources":["../../src/utils/platform-utils.ts"],"names":[],"mappings":";;AAaA,8BAEC;AAOD,sCAEC;AAMD,0CAgBC;AAMD,8CAwCC;;AA3FD,wDAAuB;AACvB,oEAA8B;AAE9B;;;GAGG;AAEH;;;GAGG;AACH,SAAgB,SAAS;IACvB,OAAO,IAAA,oBAAK,GAAE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;AAChD,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,QAAgB;IAC5C,OAAO,cAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;AACjC,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe;IAC7B,2DAA2D;IAC3D,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAE3B,2DAA2D;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAA;IACtC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,KAAK,CAAA;IACvE,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,CAAA;IAE9D,0DAA0D;IAC1D,IAAI,OAAO,IAAI,CAAC,iBAAiB,IAAI,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAChF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,8CAA8C;IAC9C,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAA;AACzC,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,iBAAiB,GAAG,eAAe,EAAE,CAAA;IAE3C,qDAAqD;IACrD,IAAI,QAAQ,GAAG;QACb,YAAY,EAAE,GAAG;QACjB,cAAc,EAAE,GAAG;QACnB,QAAQ,EAAE,GAAG;QACb,OAAO,EAAE,GAAG;QACZ,WAAW,EAAE,GAAG;QAChB,UAAU,EAAE,GAAG;QACf,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,SAAS,EAAE,GAAG;QACd,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,GAAG;QACZ,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,IAAI;KACZ,CAAA;IAED,qEAAqE;IACrE,IAAI,iBAAiB,EAAE,CAAC;QACtB,QAAQ,GAAG;YACT,YAAY,EAAE,GAAG;YACjB,cAAc,EAAE,GAAG;YACnB,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,GAAG;YACZ,WAAW,EAAE,GAAG;YAChB,UAAU,EAAE,GAAG;YACf,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,SAAS,EAAE,GAAG;YACd,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,GAAG;SACX,CAAA;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,kBAAe;IACb,SAAS;IACT,aAAa;IACb,eAAe;IACf,iBAAiB;CAClB,CAAA"}
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.PrismaSchemaParser = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
4
+ const tslib_1 = require("tslib");
5
+ const fs_1 = tslib_1.__importDefault(require("fs"));
6
+ const path_1 = tslib_1.__importDefault(require("path"));
9
7
  class PrismaSchemaParser {
10
8
  constructor(basePath = process.cwd()) {
11
9
  this.schemaContent = '';
@@ -51,15 +49,12 @@ class PrismaSchemaParser {
51
49
  const fieldsContent = modelMatch[1].trim();
52
50
  const fields = this.parseFields(fieldsContent);
53
51
  // Transform parsed fields to include relationship info
54
- return fields.map(field => {
55
- var _a, _b;
56
- return ({
57
- ...field,
58
- isRelation: !!field.relations || this.schemaContent.includes(`model ${field.type} {`),
59
- isList: field.isList || (((_a = field.relations) === null || _a === void 0 ? void 0 : _a.type) === 'one-to-many' || ((_b = field.relations) === null || _b === void 0 ? void 0 : _b.type) === 'many-to-many'),
60
- isOptional: field.hasDefault || field.isOptional
61
- });
62
- });
52
+ return fields.map(field => ({
53
+ ...field,
54
+ isRelation: !!field.relations || this.schemaContent.includes(`model ${field.type} {`),
55
+ isList: field.isList || (field.relations?.type === 'one-to-many' || field.relations?.type === 'many-to-many'),
56
+ isOptional: field.hasDefault || field.isOptional
57
+ }));
63
58
  }
64
59
  /**
65
60
  * Parses field strings into structured field objects
@@ -136,10 +131,9 @@ class PrismaSchemaParser {
136
131
  * Parses a relation decorator into a structured object
137
132
  */
138
133
  parseRelation(relationString, isList) {
139
- var _a;
140
134
  try {
141
135
  // Extract details from @relation(...) string
142
- const relationDetails = (_a = relationString.match(/@relation\(([^)]+)\)/)) === null || _a === void 0 ? void 0 : _a[1].trim();
136
+ const relationDetails = relationString.match(/@relation\(([^)]+)\)/)?.[1].trim();
143
137
  if (!relationDetails)
144
138
  return undefined;
145
139
  // Extract fields and references from the relation
@@ -258,3 +252,4 @@ class PrismaSchemaParser {
258
252
  }
259
253
  }
260
254
  exports.PrismaSchemaParser = PrismaSchemaParser;
255
+ //# sourceMappingURL=prisma-schema-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma-schema-parser.js","sourceRoot":"","sources":["../../src/utils/prisma-schema-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Verifica se o projeto atual é um projeto Next.js
3
+ * @returns {boolean} true se for um projeto Next.js, false caso contrário
4
+ */
5
+ export declare function isNextJSProject(projectPath?: string): boolean;
6
+ /**
7
+ * Verifica se o projeto possui uma pasta src
8
+ * @returns {boolean} true se a pasta src existir, false caso contrário
9
+ */
10
+ export declare function hasSrcFolder(projectPath?: string): boolean;
11
+ /**
12
+ * Retorna o caminho base para o código da aplicação (src/ ou raiz)
13
+ * @returns {string} O caminho base do código
14
+ */
15
+ export declare function getProjectBasePath(projectPath?: string): string;
16
+ /**
17
+ * Retorna o caminho correto para a API do Next.js (com ou sem pasta src)
18
+ * @returns {string} O caminho para a pasta de API
19
+ */
20
+ export declare function getNextApiPath(projectPath?: string): string;
21
+ /**
22
+ * Supported package managers
23
+ */
24
+ export type PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun' | 'deno';
25
+ /**
26
+ * Detects the package manager used in the project
27
+ * Priority: packageManager field in package.json > lock files presence
28
+ * @param projectPath Path to the project root
29
+ * @returns The detected package manager or 'npm' as fallback
30
+ */
31
+ export declare function getPackageManager(projectPath?: string): PackageManager;
32
+ export declare function getPackageManagerRunner(packageManager: 'bun' | 'npm' | 'yarn' | 'pnpm'): string;
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isNextJSProject = isNextJSProject;
4
+ exports.hasSrcFolder = hasSrcFolder;
5
+ exports.getProjectBasePath = getProjectBasePath;
6
+ exports.getNextApiPath = getNextApiPath;
7
+ exports.getPackageManager = getPackageManager;
8
+ exports.getPackageManagerRunner = getPackageManagerRunner;
9
+ const tslib_1 = require("tslib");
10
+ const fs_1 = tslib_1.__importDefault(require("fs"));
11
+ const path_1 = tslib_1.__importDefault(require("path"));
12
+ /**
13
+ * Verifica se o projeto atual é um projeto Next.js
14
+ * @returns {boolean} true se for um projeto Next.js, false caso contrário
15
+ */
16
+ function isNextJSProject(projectPath = process.cwd()) {
17
+ try {
18
+ // Verifica se existe um package.json
19
+ const packageJsonPath = path_1.default.join(projectPath, 'package.json');
20
+ if (!fs_1.default.existsSync(packageJsonPath))
21
+ return false;
22
+ // Lê o package.json e verifica se há dependência do Next.js
23
+ const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf8'));
24
+ // Verifica nas dependencies e devDependencies
25
+ const hasDependency = packageJson.dependencies?.next !== undefined;
26
+ const hasDevDependency = packageJson.devDependencies?.next !== undefined;
27
+ if (hasDependency || hasDevDependency)
28
+ return true;
29
+ // Verificações adicionais de estrutura Next.js
30
+ const possibleNextFiles = [
31
+ 'next.config.js',
32
+ 'next.config.mjs',
33
+ 'next.config.ts',
34
+ path_1.default.join('src', 'app', 'layout.tsx'),
35
+ path_1.default.join('app', 'layout.tsx')
36
+ ];
37
+ return possibleNextFiles.some(file => fs_1.default.existsSync(path_1.default.join(projectPath, file)));
38
+ }
39
+ catch (error) {
40
+ console.error('Erro ao verificar se é um projeto Next.js:', error);
41
+ return false;
42
+ }
43
+ }
44
+ /**
45
+ * Verifica se o projeto possui uma pasta src
46
+ * @returns {boolean} true se a pasta src existir, false caso contrário
47
+ */
48
+ function hasSrcFolder(projectPath = process.cwd()) {
49
+ try {
50
+ const srcPath = path_1.default.join(projectPath, 'src');
51
+ return fs_1.default.existsSync(srcPath) && fs_1.default.statSync(srcPath).isDirectory();
52
+ }
53
+ catch (error) {
54
+ console.error('Erro ao verificar a pasta src:', error);
55
+ return false;
56
+ }
57
+ }
58
+ /**
59
+ * Retorna o caminho base para o código da aplicação (src/ ou raiz)
60
+ * @returns {string} O caminho base do código
61
+ */
62
+ function getProjectBasePath(projectPath = process.cwd()) {
63
+ return hasSrcFolder(projectPath) ? path_1.default.join(projectPath, 'src') : projectPath;
64
+ }
65
+ /**
66
+ * Retorna o caminho correto para a API do Next.js (com ou sem pasta src)
67
+ * @returns {string} O caminho para a pasta de API
68
+ */
69
+ function getNextApiPath(projectPath = process.cwd()) {
70
+ const basePath = getProjectBasePath(projectPath);
71
+ return path_1.default.join(basePath, 'app', 'api');
72
+ }
73
+ /**
74
+ * Detects the package manager used in the project
75
+ * Priority: packageManager field in package.json > lock files presence
76
+ * @param projectPath Path to the project root
77
+ * @returns The detected package manager or 'npm' as fallback
78
+ */
79
+ function getPackageManager(projectPath = process.cwd()) {
80
+ try {
81
+ const packageJsonPath = path_1.default.join(projectPath, 'package.json');
82
+ // Check package.json packageManager field first
83
+ if (fs_1.default.existsSync(packageJsonPath)) {
84
+ const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf8'));
85
+ if (packageJson.packageManager) {
86
+ const pm = packageJson.packageManager.split('@')[0];
87
+ if (pm === 'npm' || pm === 'yarn' || pm === 'pnpm' || pm === 'bun') {
88
+ return pm;
89
+ }
90
+ }
91
+ }
92
+ // Check for lock files
93
+ const lockFiles = {
94
+ 'bun.lockb': 'bun',
95
+ 'yarn.lock': 'yarn',
96
+ 'pnpm-lock.yaml': 'pnpm',
97
+ 'package-lock.json': 'npm',
98
+ 'deno.lock': 'deno'
99
+ };
100
+ for (const [lockFile, manager] of Object.entries(lockFiles)) {
101
+ if (fs_1.default.existsSync(path_1.default.join(projectPath, lockFile))) {
102
+ return manager;
103
+ }
104
+ }
105
+ // Fallback to npm if no lock file is found
106
+ return 'npm';
107
+ }
108
+ catch (error) {
109
+ console.error('Error detecting package manager:', error);
110
+ return 'npm';
111
+ }
112
+ }
113
+ function getPackageManagerRunner(packageManager) {
114
+ // Check if the package manager is supported
115
+ const runners = {
116
+ npm: 'npx',
117
+ yarn: 'yarn',
118
+ pnpm: 'pnpx',
119
+ bun: 'bunx'
120
+ };
121
+ return runners[packageManager];
122
+ }
123
+ //# sourceMappingURL=project-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-utils.js","sourceRoot":"","sources":["../../src/utils/project-utils.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,10 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.TemplateHandler = void 0;
7
- const handlebars_1 = __importDefault(require("handlebars"));
4
+ const tslib_1 = require("tslib");
5
+ const handlebars_1 = tslib_1.__importDefault(require("handlebars"));
8
6
  const fs_1 = require("fs");
9
- const path_1 = __importDefault(require("path"));
7
+ const path_1 = tslib_1.__importDefault(require("path"));
10
8
  class TemplateHandler {
11
9
  static render(templateName, data, customPath) {
12
10
  if (!templateName.endsWith('.hbs')) {
@@ -31,3 +29,4 @@ class TemplateHandler {
31
29
  }
32
30
  exports.TemplateHandler = TemplateHandler;
33
31
  TemplateHandler.templatesPath = path_1.default.join(__dirname, '..', 'templates');
32
+ //# sourceMappingURL=template-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-handler.js","sourceRoot":"","sources":["../../src/utils/template-handler.ts"],"names":[],"mappings":";;;;AAAA,oEAAoC;AACpC,2BAA4C;AAC5C,wDAAwB;AAExB,MAAa,eAAe;IAG1B,MAAM,CAAC,MAAM,CAAC,YAAoB,EAAE,IAAS,EAAE,UAAmB;QAChE,IAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,YAAY,GAAG,GAAG,YAAY,MAAM,CAAA;QACtC,CAAC;QAED,IAAG,UAAU,EAAE,CAAC;YACd,IAAI,CAAC,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QACjE,MAAM,eAAe,GAAG,IAAA,iBAAY,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,oBAAU,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE9B,mEAAmE;QACnE,IAAI,YAAY,KAAK,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5D,OAAO,IAAI,GAAG,MAAM,CAAC;QACvB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,IAAY,EAAE,EAA6B;QAC/D,oBAAU,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;;AA5BH,0CA6BC;AA5BgB,6BAAa,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@igniter-js/cli",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "Igniter CLI for projects using Igniter Framework",
5
5
  "main": "dist/index.js",
6
6
  "homepage": "https://felipebarcelospro.github.io/igniter",
@@ -43,12 +43,14 @@
43
43
  "commander": "^11.1.0",
44
44
  "handlebars": "^4.7.8",
45
45
  "inquirer": "^8.2.6",
46
+ "is-windows": "^1.0.2",
46
47
  "ora": "^5.4.1",
47
48
  "reflect-metadata": "^0.2.2",
48
49
  "zod": "^3.23.8"
49
50
  },
50
51
  "devDependencies": {
51
52
  "@types/inquirer": "^8.2.10",
53
+ "@types/is-windows": "^1.0.2",
52
54
  "@types/node": "^20.10.2",
53
55
  "@typescript-eslint/eslint-plugin": "^6.13.1",
54
56
  "@typescript-eslint/parser": "^6.13.1",
package/readme.md CHANGED
@@ -18,6 +18,7 @@ Code generation CLI for Igniter.js projects - the essential tool to boost produc
18
18
  * **Framework Integration**: Seamlessly integrates with Next.js and the Igniter Framework
19
19
  * **Developer Experience**: Intuitive commands and helpful error messages
20
20
  * **Productivity Boost**: Automates repetitive tasks and enforces consistency
21
+ * **Cross-Platform**: Works seamlessly on Windows, macOS, and Linux
21
22
 
22
23
  ## 📦 Installation
23
24
 
@@ -32,9 +33,12 @@ npx @igniter-js/cli
32
33
  ## 🚀 Quick Start
33
34
 
34
35
  ```bash
35
- # Initialize a new project with Igniter Framework
36
+ # Initialize a new project with Igniter Framework in the current directory
36
37
  igniter init
37
38
 
39
+ # Initialize a new project in a specific directory
40
+ igniter init -d my-igniter-app
41
+
38
42
  # Generate a new feature
39
43
  igniter generate feature -n users
40
44
 
@@ -49,9 +53,16 @@ igniter generate feature
49
53
  Initializes a new Next.js project with the complete Igniter Framework structure:
50
54
 
51
55
  ```bash
56
+ # Initialize in the current directory
52
57
  igniter init
58
+
59
+ # Initialize in a specific directory (creates the directory if it doesn't exist)
60
+ igniter init -d my-igniter-app
53
61
  ```
54
62
 
63
+ Options:
64
+ - `-d, --dir <directory>`: Directory to initialize the project in
65
+
55
66
  This command:
56
67
  - Creates a Next.js application with TypeScript, Tailwind, and ESLint
57
68
  - Sets up the recommended folder structure for Igniter Framework
@@ -121,6 +132,17 @@ src/
121
132
  │ └── index.ts # Feature exports
122
133
  ```
123
134
 
135
+ ## 🔄 Platform Compatibility
136
+
137
+ Igniter CLI is designed to work seamlessly across different platforms:
138
+
139
+ - **Windows**: Full compatibility with Windows command prompt and PowerShell
140
+ - **macOS/Linux**: Native support for Unix-based terminals
141
+ - **Path handling**: Automatic path normalization across different operating systems
142
+ - **Terminal output**: Adaptive terminal styling based on platform capabilities
143
+
144
+ The CLI automatically detects your operating system and adjusts its behavior accordingly to ensure a consistent experience.
145
+
124
146
  ## 🔧 Advanced Configuration
125
147
 
126
148
  The Igniter CLI can be configured through environment variables: