@quantica-apps/create-quantica-app 0.1.3
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/doctor.d.ts +21 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +218 -0
- package/dist/doctor.js.map +1 -0
- package/dist/generateApp.d.ts +33 -0
- package/dist/generateApp.d.ts.map +1 -0
- package/dist/generateApp.js +632 -0
- package/dist/generateApp.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +108 -0
- package/dist/index.js.map +1 -0
- package/dist/interactive.d.ts +19 -0
- package/dist/interactive.d.ts.map +1 -0
- package/dist/interactive.js +109 -0
- package/dist/interactive.js.map +1 -0
- package/dist/platformRoot.d.ts +3 -0
- package/dist/platformRoot.d.ts.map +1 -0
- package/dist/platformRoot.js +37 -0
- package/dist/platformRoot.js.map +1 -0
- package/dist/smoke.d.ts +2 -0
- package/dist/smoke.d.ts.map +1 -0
- package/dist/smoke.js +96 -0
- package/dist/smoke.js.map +1 -0
- package/package.json +31 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { execSync } from 'node:child_process';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { buildAppSlug } from '@quantica-apps/platform-app-core';
|
|
7
|
+
import { collectGeneratorAnswers, DEFAULT_FRONTEND_PORT, DEFAULT_HUB_URL, } from './interactive.js';
|
|
8
|
+
import { findPlatformRoot, tryFindPlatformRoot } from './platformRoot.js';
|
|
9
|
+
import { generateApp, printGenerationPreview, supportedIcons, } from './generateApp.js';
|
|
10
|
+
import { runDoctor } from './doctor.js';
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = path.dirname(__filename);
|
|
13
|
+
const localPlatformRoot = tryFindPlatformRoot(__dirname);
|
|
14
|
+
const runNpmCommand = (command, cwd) => {
|
|
15
|
+
const executableCommand = process.platform === 'win32' ? `cmd /d /s /c "${command}"` : command;
|
|
16
|
+
execSync(executableCommand, {
|
|
17
|
+
cwd,
|
|
18
|
+
stdio: 'inherit',
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
const parseSidebarItemFlag = (value) => {
|
|
22
|
+
const [key, label, routePath, icon, roles] = value.split('|');
|
|
23
|
+
if (!key || !label || !routePath || !icon) {
|
|
24
|
+
throw new Error('Sidebar item flag must follow key|label|path|icon|role1,role2.');
|
|
25
|
+
}
|
|
26
|
+
if (!supportedIcons.includes(icon)) {
|
|
27
|
+
throw new Error(`Unsupported icon "${icon}".`);
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
icon: icon,
|
|
31
|
+
key: buildAppSlug(key),
|
|
32
|
+
label,
|
|
33
|
+
path: routePath,
|
|
34
|
+
requiredClientRoles: roles
|
|
35
|
+
? roles
|
|
36
|
+
.split(',')
|
|
37
|
+
.map((role) => role.trim())
|
|
38
|
+
.filter(Boolean)
|
|
39
|
+
: [],
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
const program = new Command();
|
|
43
|
+
program
|
|
44
|
+
.name('create-quantica-app')
|
|
45
|
+
.description('Generate and inspect Quantica frontend app repos without copying product code.');
|
|
46
|
+
program
|
|
47
|
+
.command('doctor')
|
|
48
|
+
.description('Inspect a generated Quantica app without changing files.')
|
|
49
|
+
.option('--cwd <directory>', 'Generated app repository root', process.cwd())
|
|
50
|
+
.option('--platform-version <version>', 'Expected @quantica-apps/platform-* version in registry mode')
|
|
51
|
+
.action((flags) => {
|
|
52
|
+
process.exitCode = runDoctor({
|
|
53
|
+
cwd: path.resolve(flags.cwd),
|
|
54
|
+
expectedPlatformVersion: flags.platformVersion,
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
program
|
|
58
|
+
.option('--name <slug>', 'App slug without qc- prefix and -app suffix')
|
|
59
|
+
.option('--display-name <name>', 'Display name used in the UI')
|
|
60
|
+
.option('--dependency-mode <mode>', 'Platform dependency mode: local for workspace development or registry for CI/production')
|
|
61
|
+
.option('--out <directory>', 'Output directory for the generated repo')
|
|
62
|
+
.option('--frontend-port <port>', `Frontend dev server port (default: ${DEFAULT_FRONTEND_PORT})`, (value) => Number(value))
|
|
63
|
+
.option('--hub-origin <url>', `Hub URL used by the shell (default: ${DEFAULT_HUB_URL})`)
|
|
64
|
+
.option('--platform-version <version>', 'Platform package version used in registry mode', 'latest')
|
|
65
|
+
.option('--default-route <path>', 'Default route path')
|
|
66
|
+
.option('--platform-root <directory>', 'Platform repository root used only in local dependency mode')
|
|
67
|
+
.option('--sidebar-item <item>', 'Sidebar entry in key|label|path|icon|role1,role2 format', (value, previous = []) => [...previous, parseSidebarItemFlag(value)])
|
|
68
|
+
.option('--install', 'Install dependencies after generating files', false)
|
|
69
|
+
.option('--no-example-pages', 'Generate minimal placeholder pages instead of descriptive placeholders')
|
|
70
|
+
.action(async (flags) => {
|
|
71
|
+
const cliFlags = {
|
|
72
|
+
appDisplayName: flags.displayName,
|
|
73
|
+
appSlug: flags.name,
|
|
74
|
+
dependencyMode: flags.dependencyMode === 'registry'
|
|
75
|
+
? 'registry'
|
|
76
|
+
: flags.dependencyMode === 'local'
|
|
77
|
+
? 'local'
|
|
78
|
+
: undefined,
|
|
79
|
+
defaultRoute: flags.defaultRoute,
|
|
80
|
+
frontendPort: flags.frontendPort,
|
|
81
|
+
hubOrigin: flags.hubOrigin,
|
|
82
|
+
includeExamplePages: flags.examplePages,
|
|
83
|
+
installDependencies: flags.install,
|
|
84
|
+
outDir: flags.out,
|
|
85
|
+
platformPackageVersion: flags.platformVersion,
|
|
86
|
+
platformRoot: flags.platformRoot
|
|
87
|
+
? path.resolve(flags.platformRoot)
|
|
88
|
+
: localPlatformRoot,
|
|
89
|
+
sidebarItems: flags.sidebarItem,
|
|
90
|
+
};
|
|
91
|
+
const answers = await collectGeneratorAnswers(cliFlags);
|
|
92
|
+
const platformRoot = answers.dependencyMode === 'local'
|
|
93
|
+
? findPlatformRoot(answers.platformRoot)
|
|
94
|
+
: answers.platformRoot;
|
|
95
|
+
const generationOptions = {
|
|
96
|
+
...answers,
|
|
97
|
+
platformRoot,
|
|
98
|
+
};
|
|
99
|
+
printGenerationPreview(generationOptions);
|
|
100
|
+
const result = generateApp(generationOptions);
|
|
101
|
+
console.log(`Generated ${result.appId} in ${result.appRoot}`);
|
|
102
|
+
if (!answers.installDependencies) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
runNpmCommand('npm install', result.appRoot);
|
|
106
|
+
});
|
|
107
|
+
void program.parseAsync(process.argv);
|
|
108
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { GenerateAppOptions, SidebarAnswer } from './generateApp.js';
|
|
2
|
+
export declare const DEFAULT_FRONTEND_PORT = 5174;
|
|
3
|
+
export declare const DEFAULT_HUB_URL = "https://apps.evokenet.org";
|
|
4
|
+
export interface CliFlags {
|
|
5
|
+
readonly appDisplayName?: string;
|
|
6
|
+
readonly appSlug?: string;
|
|
7
|
+
readonly dependencyMode?: 'local' | 'registry';
|
|
8
|
+
readonly defaultRoute?: string;
|
|
9
|
+
readonly frontendPort?: number;
|
|
10
|
+
readonly hubOrigin?: string;
|
|
11
|
+
readonly includeExamplePages?: boolean;
|
|
12
|
+
readonly installDependencies?: boolean;
|
|
13
|
+
readonly outDir?: string;
|
|
14
|
+
readonly platformPackageVersion?: string;
|
|
15
|
+
readonly platformRoot?: string;
|
|
16
|
+
readonly sidebarItems?: readonly SidebarAnswer[];
|
|
17
|
+
}
|
|
18
|
+
export declare function collectGeneratorAnswers(flags: CliFlags): Promise<GenerateAppOptions>;
|
|
19
|
+
//# sourceMappingURL=interactive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE1E,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC/C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CAClD;AAWD,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA+D1F"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { confirm, input, number, select } from '@inquirer/prompts';
|
|
3
|
+
import { buildAppSlug, iconNames } from '@quantica-apps/platform-app-core';
|
|
4
|
+
export const DEFAULT_FRONTEND_PORT = 5174;
|
|
5
|
+
export const DEFAULT_HUB_URL = 'https://apps.evokenet.org';
|
|
6
|
+
const defaultDependencyMode = (flags) => flags.dependencyMode ?? (flags.platformRoot ? 'local' : 'registry');
|
|
7
|
+
const toLabel = (value) => value
|
|
8
|
+
.split('-')
|
|
9
|
+
.map((segment) => `${segment.charAt(0).toUpperCase()}${segment.slice(1)}`)
|
|
10
|
+
.join(' ');
|
|
11
|
+
export async function collectGeneratorAnswers(flags) {
|
|
12
|
+
const dependencyMode = defaultDependencyMode(flags);
|
|
13
|
+
const appSlug = flags.appSlug ??
|
|
14
|
+
buildAppSlug(await input({
|
|
15
|
+
message: 'App slug (sem prefixo qc- e sem -app)',
|
|
16
|
+
default: 'sample',
|
|
17
|
+
}));
|
|
18
|
+
const appDisplayName = flags.appDisplayName ??
|
|
19
|
+
(await input({
|
|
20
|
+
message: 'Nome exibido na UI',
|
|
21
|
+
default: toLabel(appSlug),
|
|
22
|
+
}));
|
|
23
|
+
const frontendPort = flags.frontendPort ?? DEFAULT_FRONTEND_PORT;
|
|
24
|
+
const hubOrigin = flags.hubOrigin ?? DEFAULT_HUB_URL;
|
|
25
|
+
const outDir = flags.outDir ??
|
|
26
|
+
path.resolve(await input({
|
|
27
|
+
message: 'Diretorio de saida',
|
|
28
|
+
default: path.resolve(process.cwd(), `qc-${appSlug}-app`),
|
|
29
|
+
}));
|
|
30
|
+
const sidebarItems = flags.sidebarItems ?? (await askSidebarItems());
|
|
31
|
+
const defaultRoute = flags.defaultRoute ??
|
|
32
|
+
(await select({
|
|
33
|
+
message: 'Rota inicial',
|
|
34
|
+
choices: sidebarItems.map((item) => ({
|
|
35
|
+
name: `${item.label} (${item.path})`,
|
|
36
|
+
value: item.path,
|
|
37
|
+
})),
|
|
38
|
+
}));
|
|
39
|
+
const includeExamplePages = flags.includeExamplePages ??
|
|
40
|
+
(await confirm({
|
|
41
|
+
message: 'Gerar telas placeholder com texto de exemplo?',
|
|
42
|
+
default: true,
|
|
43
|
+
}));
|
|
44
|
+
const installDependencies = flags.installDependencies ??
|
|
45
|
+
(await confirm({
|
|
46
|
+
message: 'Instalar dependencias apos gerar os arquivos?',
|
|
47
|
+
default: false,
|
|
48
|
+
}));
|
|
49
|
+
return {
|
|
50
|
+
appDisplayName,
|
|
51
|
+
appSlug,
|
|
52
|
+
dependencyMode,
|
|
53
|
+
defaultRoute,
|
|
54
|
+
frontendPort,
|
|
55
|
+
hubOrigin,
|
|
56
|
+
includeExamplePages,
|
|
57
|
+
installDependencies,
|
|
58
|
+
outDir,
|
|
59
|
+
platformPackageVersion: flags.platformPackageVersion ?? 'latest',
|
|
60
|
+
platformRoot: flags.platformRoot ?? process.cwd(),
|
|
61
|
+
sidebarItems,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async function askSidebarItems() {
|
|
65
|
+
const sidebarItemCount = await number({
|
|
66
|
+
message: 'Quantidade inicial de itens da sidebar',
|
|
67
|
+
default: 2,
|
|
68
|
+
});
|
|
69
|
+
const resolvedSidebarItemCount = sidebarItemCount ?? 2;
|
|
70
|
+
const items = [];
|
|
71
|
+
for (let index = 0; index < resolvedSidebarItemCount; index += 1) {
|
|
72
|
+
const keyInput = await input({
|
|
73
|
+
message: `Sidebar item ${index + 1} key`,
|
|
74
|
+
default: index === 0 ? 'dashboard' : `section-${index + 1}`,
|
|
75
|
+
});
|
|
76
|
+
const key = buildAppSlug(keyInput);
|
|
77
|
+
const label = await input({
|
|
78
|
+
message: `Sidebar item ${index + 1} label`,
|
|
79
|
+
default: toLabel(key),
|
|
80
|
+
});
|
|
81
|
+
const routePath = await input({
|
|
82
|
+
message: `Sidebar item ${index + 1} path`,
|
|
83
|
+
default: index === 0 ? '/' : `/${key}`,
|
|
84
|
+
});
|
|
85
|
+
const icon = (await select({
|
|
86
|
+
message: `Sidebar item ${index + 1} icon`,
|
|
87
|
+
choices: iconNames.map((iconName) => ({
|
|
88
|
+
name: iconName,
|
|
89
|
+
value: iconName,
|
|
90
|
+
})),
|
|
91
|
+
}));
|
|
92
|
+
const roles = await input({
|
|
93
|
+
message: `Sidebar item ${index + 1} required client roles (csv, opcional)`,
|
|
94
|
+
default: '',
|
|
95
|
+
});
|
|
96
|
+
items.push({
|
|
97
|
+
icon,
|
|
98
|
+
key,
|
|
99
|
+
label,
|
|
100
|
+
path: routePath,
|
|
101
|
+
requiredClientRoles: roles
|
|
102
|
+
.split(',')
|
|
103
|
+
.map((role) => role.trim())
|
|
104
|
+
.filter(Boolean),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return items;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=interactive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platformRoot.d.ts","sourceRoot":"","sources":["../src/platformRoot.ts"],"names":[],"mappings":"AAqBA,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAgB1D;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMzE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
const isPlatformRoot = (candidatePath) => {
|
|
4
|
+
const packageJsonPath = path.join(candidatePath, 'package.json');
|
|
5
|
+
if (!existsSync(packageJsonPath)) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
try {
|
|
9
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
|
|
10
|
+
return packageJson.name === 'quantica-app-platform';
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export function findPlatformRoot(startPath) {
|
|
17
|
+
let currentPath = startPath;
|
|
18
|
+
while (true) {
|
|
19
|
+
if (isPlatformRoot(currentPath)) {
|
|
20
|
+
return currentPath;
|
|
21
|
+
}
|
|
22
|
+
const parentPath = path.dirname(currentPath);
|
|
23
|
+
if (parentPath === currentPath) {
|
|
24
|
+
throw new Error('Unable to resolve quantica-app-platform root.');
|
|
25
|
+
}
|
|
26
|
+
currentPath = parentPath;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function tryFindPlatformRoot(startPath) {
|
|
30
|
+
try {
|
|
31
|
+
return findPlatformRoot(startPath);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=platformRoot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platformRoot.js","sourceRoot":"","sources":["../src/platformRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,cAAc,GAAG,CAAC,aAAqB,EAAE,EAAE;IAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAEjE,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAEnE,CAAC;QAEF,OAAO,WAAW,CAAC,IAAI,KAAK,uBAAuB,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,IAAI,WAAW,GAAG,SAAS,CAAC;IAE5B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE7C,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,WAAW,GAAG,UAAU,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
package/dist/smoke.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smoke.d.ts","sourceRoot":"","sources":["../src/smoke.ts"],"names":[],"mappings":""}
|
package/dist/smoke.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { existsSync, mkdtempSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { cleanupGeneratedApp, generateApp } from './generateApp.js';
|
|
6
|
+
import { inspectApp } from './doctor.js';
|
|
7
|
+
import { findPlatformRoot } from './platformRoot.js';
|
|
8
|
+
const platformRoot = findPlatformRoot(process.cwd());
|
|
9
|
+
const tmpRoot = mkdtempSync(path.join(tmpdir(), 'quantica-app-platform-'));
|
|
10
|
+
const appRoot = path.join(tmpRoot, 'qc-smoke-app');
|
|
11
|
+
const registryAppRoot = path.join(tmpRoot, 'qc-smoke-registry-app');
|
|
12
|
+
const runNpmCommand = (command, cwd) => {
|
|
13
|
+
const executableCommand = process.platform === 'win32' ? `cmd /d /s /c "${command}"` : command;
|
|
14
|
+
execSync(executableCommand, {
|
|
15
|
+
cwd,
|
|
16
|
+
stdio: 'inherit',
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
try {
|
|
20
|
+
generateApp({
|
|
21
|
+
appDisplayName: 'Smoke App',
|
|
22
|
+
appSlug: 'smoke',
|
|
23
|
+
dependencyMode: 'local',
|
|
24
|
+
defaultRoute: '/',
|
|
25
|
+
frontendPort: 5189,
|
|
26
|
+
hubOrigin: 'http://localhost:3000',
|
|
27
|
+
includeExamplePages: true,
|
|
28
|
+
installDependencies: false,
|
|
29
|
+
outDir: appRoot,
|
|
30
|
+
platformPackageVersion: '0.1.0',
|
|
31
|
+
platformRoot,
|
|
32
|
+
sidebarItems: [
|
|
33
|
+
{
|
|
34
|
+
icon: 'house',
|
|
35
|
+
key: 'home',
|
|
36
|
+
label: 'Home',
|
|
37
|
+
path: '/',
|
|
38
|
+
requiredClientRoles: [],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
icon: 'list',
|
|
42
|
+
key: 'reports',
|
|
43
|
+
label: 'Reports',
|
|
44
|
+
path: '/reports',
|
|
45
|
+
requiredClientRoles: [],
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
});
|
|
49
|
+
runNpmCommand('npm install', appRoot);
|
|
50
|
+
runNpmCommand('npm run type-check', appRoot);
|
|
51
|
+
runNpmCommand('npm run build', appRoot);
|
|
52
|
+
const localDoctorResult = inspectApp({ cwd: appRoot });
|
|
53
|
+
if (localDoctorResult.issues.some((issue) => issue.status === 'FAIL')) {
|
|
54
|
+
throw new Error('Doctor reported failures for the local smoke app.');
|
|
55
|
+
}
|
|
56
|
+
generateApp({
|
|
57
|
+
appDisplayName: 'Smoke Registry App',
|
|
58
|
+
appSlug: 'smoke-registry',
|
|
59
|
+
dependencyMode: 'registry',
|
|
60
|
+
defaultRoute: '/',
|
|
61
|
+
frontendPort: 5191,
|
|
62
|
+
hubOrigin: 'https://apps.evokenet.org',
|
|
63
|
+
includeExamplePages: false,
|
|
64
|
+
installDependencies: false,
|
|
65
|
+
outDir: registryAppRoot,
|
|
66
|
+
platformPackageVersion: '0.1.0',
|
|
67
|
+
platformRoot,
|
|
68
|
+
sidebarItems: [
|
|
69
|
+
{
|
|
70
|
+
icon: 'house',
|
|
71
|
+
key: 'home',
|
|
72
|
+
label: 'Home',
|
|
73
|
+
path: '/',
|
|
74
|
+
requiredClientRoles: [],
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
});
|
|
78
|
+
const registryFrontendPackage = readFileSync(path.join(registryAppRoot, 'frontend', 'package.json'), 'utf8');
|
|
79
|
+
if (registryFrontendPackage.includes('file:')) {
|
|
80
|
+
throw new Error('Registry smoke app must not contain file: dependencies.');
|
|
81
|
+
}
|
|
82
|
+
if (!existsSync(path.join(registryAppRoot, '.github', 'workflows', 'ci.yml'))) {
|
|
83
|
+
throw new Error('Generated app must include a CI workflow.');
|
|
84
|
+
}
|
|
85
|
+
const registryDoctorResult = inspectApp({
|
|
86
|
+
cwd: registryAppRoot,
|
|
87
|
+
expectedPlatformVersion: '0.1.0',
|
|
88
|
+
});
|
|
89
|
+
if (registryDoctorResult.issues.some((issue) => issue.status === 'FAIL')) {
|
|
90
|
+
throw new Error('Doctor reported failures for the registry smoke app.');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
cleanupGeneratedApp(tmpRoot);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=smoke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smoke.js","sourceRoot":"","sources":["../src/smoke.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACrD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;AAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AACnD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;AACpE,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,GAAW,EAAE,EAAE;IACrD,MAAM,iBAAiB,GACrB,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,iBAAiB,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;IAEvE,QAAQ,CAAC,iBAAiB,EAAE;QAC1B,GAAG;QACH,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,IAAI,CAAC;IACH,WAAW,CAAC;QACV,cAAc,EAAE,WAAW;QAC3B,OAAO,EAAE,OAAO;QAChB,cAAc,EAAE,OAAO;QACvB,YAAY,EAAE,GAAG;QACjB,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,uBAAuB;QAClC,mBAAmB,EAAE,IAAI;QACzB,mBAAmB,EAAE,KAAK;QAC1B,MAAM,EAAE,OAAO;QACf,sBAAsB,EAAE,OAAO;QAC/B,YAAY;QACZ,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,OAAO;gBACb,GAAG,EAAE,MAAM;gBACX,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,GAAG;gBACT,mBAAmB,EAAE,EAAE;aACxB;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,UAAU;gBAChB,mBAAmB,EAAE,EAAE;aACxB;SACF;KACF,CAAC,CAAC;IAEH,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACtC,aAAa,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAC7C,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAExC,MAAM,iBAAiB,GAAG,UAAU,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACvD,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,WAAW,CAAC;QACV,cAAc,EAAE,oBAAoB;QACpC,OAAO,EAAE,gBAAgB;QACzB,cAAc,EAAE,UAAU;QAC1B,YAAY,EAAE,GAAG;QACjB,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,2BAA2B;QACtC,mBAAmB,EAAE,KAAK;QAC1B,mBAAmB,EAAE,KAAK;QAC1B,MAAM,EAAE,eAAe;QACvB,sBAAsB,EAAE,OAAO;QAC/B,YAAY;QACZ,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,OAAO;gBACb,GAAG,EAAE,MAAM;gBACX,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,GAAG;gBACT,mBAAmB,EAAE,EAAE;aACxB;SACF;KACF,CAAC,CAAC;IAEH,MAAM,uBAAuB,GAAG,YAAY,CAC1C,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,cAAc,CAAC,EACtD,MAAM,CACP,CAAC;IACF,IAAI,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,oBAAoB,GAAG,UAAU,CAAC;QACtC,GAAG,EAAE,eAAe;QACpB,uBAAuB,EAAE,OAAO;KACjC,CAAC,CAAC;IACH,IAAI,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;QAAS,CAAC;IACT,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@quantica-apps/create-quantica-app",
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"bin": {
|
|
6
|
+
"create-quantica-app": "./dist/index.js"
|
|
7
|
+
},
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/generateApp.d.ts",
|
|
14
|
+
"default": "./dist/generateApp.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc -p tsconfig.build.json",
|
|
19
|
+
"type-check": "tsc -p tsconfig.build.json --noEmit",
|
|
20
|
+
"smoke": "node ./dist/smoke.js"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@inquirer/prompts": "^7.5.1",
|
|
24
|
+
"@quantica-apps/platform-app-core": "0.1.1",
|
|
25
|
+
"commander": "^13.1.0"
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|