create-absolutejs 0.13.6 → 0.13.8
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/generators/angular/generateAngularPage.d.ts +2 -2
- package/dist/generators/angular/generateAngularPage.js +29 -2
- package/dist/generators/angular/scaffoldAngular.d.ts +1 -1
- package/dist/generators/angular/scaffoldAngular.js +13 -5
- package/dist/generators/html/generateHTMLPage.d.ts +1 -1
- package/dist/generators/html/generateHTMLPage.js +18 -1
- package/dist/generators/html/scaffoldHTML.d.ts +1 -1
- package/dist/generators/html/scaffoldHTML.js +10 -4
- package/dist/generators/htmx/generateHTMXPage.d.ts +1 -1
- package/dist/generators/htmx/generateHTMXPage.js +22 -1
- package/dist/generators/htmx/scaffoldHTMX.d.ts +1 -1
- package/dist/generators/htmx/scaffoldHTMX.js +13 -6
- package/dist/generators/project/scaffoldFrontends.d.ts +2 -2
- package/dist/generators/project/scaffoldFrontends.js +7 -1
- package/dist/generators/react/generateReactComponents.d.ts +1 -1
- package/dist/generators/react/generateReactComponents.js +25 -1
- package/dist/generators/react/scaffoldReact.d.ts +1 -1
- package/dist/generators/react/scaffoldReact.js +10 -2
- package/dist/generators/svelte/generateSveltePage.d.ts +1 -1
- package/dist/generators/svelte/generateSveltePage.js +22 -1
- package/dist/generators/svelte/scaffoldSvelte.d.ts +1 -1
- package/dist/generators/svelte/scaffoldSvelte.js +11 -5
- package/dist/generators/vue/generateVuePage.d.ts +1 -1
- package/dist/generators/vue/generateVuePage.js +23 -1
- package/dist/generators/vue/scaffoldVue.d.ts +1 -1
- package/dist/generators/vue/scaffoldVue.js +10 -4
- package/dist/messages.d.ts +1 -1
- package/dist/messages.js +3 -1
- package/dist/prompt.js +4 -0
- package/dist/questions/includeExamples.d.ts +1 -0
- package/dist/questions/includeExamples.js +11 -0
- package/dist/scaffold.d.ts +1 -1
- package/dist/scaffold.js +2 -1
- package/dist/types.d.ts +2 -0
- package/dist/utils/parseCommandLineOptions.js +3 -0
- package/dist/versions.d.ts +1 -1
- package/dist/versions.js +1 -1
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Frontend } from '../../types';
|
|
2
|
-
export declare const generateAngularPage: (_frontends: Frontend[]) =>
|
|
3
|
-
export declare const generateAngularPageHtml: () =>
|
|
2
|
+
export declare const generateAngularPage: (_frontends: Frontend[], includeExamples: boolean) => "import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { defineAngularPage } from '@absolutejs/absolute/angular';\n\ntype AngularPageProps = {\n\tinitialCount: number;\n};\n\n@Component({\n\timports: [CommonModule],\n\tselector: 'angular-page',\n\tstandalone: true,\n\ttemplateUrl: '../templates/angular-example.html'\n})\nexport class AngularExampleComponent {}\n\nexport const page = defineAngularPage<AngularPageProps>({\n\tcomponent: AngularExampleComponent\n});\n" | "import { Component, inject, InjectionToken } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { defineAngularPage } from '@absolutejs/absolute/angular';\nimport { DropdownComponent } from '../components/dropdown.component';\nimport { AppComponent } from '../components/app.component';\n\nexport const INITIAL_COUNT = new InjectionToken<number>('INITIAL_COUNT');\n\ntype AngularPageProps = {\n\tinitialCount: number;\n};\n\n@Component({\n\timports: [CommonModule, DropdownComponent, AppComponent],\n\tselector: 'angular-page',\n\tstandalone: true,\n\ttemplateUrl: '../templates/angular-example.html'\n})\nexport class AngularExampleComponent {\n\tinitialCount: number = 0;\n\n\tconstructor() {\n\t\tconst initialCountToken = inject(INITIAL_COUNT, { optional: true });\n\t\tthis.initialCount = initialCountToken ?? 0;\n\t}\n}\n\nexport const page = defineAngularPage<AngularPageProps>({\n\tcomponent: AngularExampleComponent\n});\n";
|
|
3
|
+
export declare const generateAngularPageHtml: (includeExamples: boolean) => "<main></main>\n" | "<header>\n\t<a href=\"/\">AbsoluteJS</a>\n\t<app-dropdown></app-dropdown>\n</header>\n<app-root [initialCount]=\"initialCount\"></app-root>\n";
|
|
4
4
|
export declare const generateAppComponent: (isSingleFrontend: boolean) => string;
|
|
5
5
|
export declare const generateAppComponentCss: () => string;
|
|
6
6
|
export declare const generateAppComponentHtml: (frontends: Frontend[], editBasePath: string) => string;
|
|
@@ -1,6 +1,28 @@
|
|
|
1
1
|
import { formatNavLink } from '../../utils/formatNavLink';
|
|
2
2
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
3
|
-
export const generateAngularPage = (_frontends) =>
|
|
3
|
+
export const generateAngularPage = (_frontends, includeExamples) => {
|
|
4
|
+
if (!includeExamples)
|
|
5
|
+
return `import { Component } from '@angular/core';
|
|
6
|
+
import { CommonModule } from '@angular/common';
|
|
7
|
+
import { defineAngularPage } from '@absolutejs/absolute/angular';
|
|
8
|
+
|
|
9
|
+
type AngularPageProps = {
|
|
10
|
+
initialCount: number;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
@Component({
|
|
14
|
+
imports: [CommonModule],
|
|
15
|
+
selector: 'angular-page',
|
|
16
|
+
standalone: true,
|
|
17
|
+
templateUrl: '../templates/angular-example.html'
|
|
18
|
+
})
|
|
19
|
+
export class AngularExampleComponent {}
|
|
20
|
+
|
|
21
|
+
export const page = defineAngularPage<AngularPageProps>({
|
|
22
|
+
component: AngularExampleComponent
|
|
23
|
+
});
|
|
24
|
+
`;
|
|
25
|
+
return `import { Component, inject, InjectionToken } from '@angular/core';
|
|
4
26
|
import { CommonModule } from '@angular/common';
|
|
5
27
|
import { defineAngularPage } from '@absolutejs/absolute/angular';
|
|
6
28
|
import { DropdownComponent } from '../components/dropdown.component';
|
|
@@ -31,12 +53,17 @@ export const page = defineAngularPage<AngularPageProps>({
|
|
|
31
53
|
component: AngularExampleComponent
|
|
32
54
|
});
|
|
33
55
|
`;
|
|
34
|
-
|
|
56
|
+
};
|
|
57
|
+
export const generateAngularPageHtml = (includeExamples) => {
|
|
58
|
+
if (!includeExamples)
|
|
59
|
+
return `<main></main>\n`;
|
|
60
|
+
return `<header>
|
|
35
61
|
<a href="/">AbsoluteJS</a>
|
|
36
62
|
<app-dropdown></app-dropdown>
|
|
37
63
|
</header>
|
|
38
64
|
<app-root [initialCount]="initialCount"></app-root>
|
|
39
65
|
`;
|
|
66
|
+
};
|
|
40
67
|
export const generateAppComponent = (isSingleFrontend) => `import { Component, Input, ViewEncapsulation } from '@angular/core';
|
|
41
68
|
import { CommonModule } from '@angular/common';
|
|
42
69
|
import { CounterComponent } from './counter.component';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { ScaffoldFrontendProps } from '../../types';
|
|
2
|
-
export declare const scaffoldAngular: ({ editBasePath, isSingleFrontend, targetDirectory, frontends, templatesDirectory, projectAssetsDirectory, stylesDirectory, stylesIndexesDirectory }: ScaffoldFrontendProps) => void;
|
|
2
|
+
export declare const scaffoldAngular: ({ editBasePath, includeExamples, isSingleFrontend, targetDirectory, frontends, templatesDirectory, projectAssetsDirectory, stylesDirectory, stylesIndexesDirectory }: ScaffoldFrontendProps) => void;
|
|
@@ -2,16 +2,24 @@ import { copyFileSync, mkdirSync, writeFileSync } from 'fs';
|
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import { generateMarkupCSS } from '../project/generateMarkupCSS';
|
|
4
4
|
import { generateAngularPage, generateAngularPageHtml, generateAppComponent, generateAppComponentCss, generateAppComponentHtml, generateCounterComponent, generateCounterComponentCss, generateCounterComponentHtml, generateDropdownComponent, generateDropdownComponentHtml } from './generateAngularPage';
|
|
5
|
-
export const scaffoldAngular = ({ editBasePath, isSingleFrontend, targetDirectory, frontends, templatesDirectory, projectAssetsDirectory, stylesDirectory, stylesIndexesDirectory }) => {
|
|
5
|
+
export const scaffoldAngular = ({ editBasePath, includeExamples, isSingleFrontend, targetDirectory, frontends, templatesDirectory, projectAssetsDirectory, stylesDirectory, stylesIndexesDirectory }) => {
|
|
6
|
+
const pagesDirectory = join(targetDirectory, 'pages');
|
|
7
|
+
const templatesDir = join(targetDirectory, 'templates');
|
|
8
|
+
if (!includeExamples) {
|
|
9
|
+
mkdirSync(pagesDirectory, { recursive: true });
|
|
10
|
+
mkdirSync(templatesDir, { recursive: true });
|
|
11
|
+
writeFileSync(join(pagesDirectory, 'angular-example.ts'), generateAngularPage(frontends, false), 'utf-8');
|
|
12
|
+
writeFileSync(join(templatesDir, 'angular-example.html'), generateAngularPageHtml(false), 'utf-8');
|
|
13
|
+
writeFileSync(join(stylesIndexesDirectory, 'angular-example.css'), `@import url('../reset.css');\n\nangular-page {\n\tdisplay: flex;\n\tflex: 1;\n\tflex-direction: column;\n}\n`, 'utf-8');
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
6
16
|
copyFileSync(join(templatesDirectory, 'assets', 'svg', 'angular.svg'), join(projectAssetsDirectory, 'svg', 'angular.svg'));
|
|
7
17
|
const componentsDirectory = join(targetDirectory, 'components');
|
|
8
18
|
mkdirSync(componentsDirectory, { recursive: true });
|
|
9
|
-
const pagesDirectory = join(targetDirectory, 'pages');
|
|
10
19
|
mkdirSync(pagesDirectory, { recursive: true });
|
|
11
|
-
const templatesDir = join(targetDirectory, 'templates');
|
|
12
20
|
mkdirSync(templatesDir, { recursive: true });
|
|
13
|
-
writeFileSync(join(pagesDirectory, 'angular-example.ts'), generateAngularPage(frontends), 'utf-8');
|
|
14
|
-
writeFileSync(join(templatesDir, 'angular-example.html'), generateAngularPageHtml(), 'utf-8');
|
|
21
|
+
writeFileSync(join(pagesDirectory, 'angular-example.ts'), generateAngularPage(frontends, true), 'utf-8');
|
|
22
|
+
writeFileSync(join(templatesDir, 'angular-example.html'), generateAngularPageHtml(true), 'utf-8');
|
|
15
23
|
writeFileSync(join(componentsDirectory, 'dropdown.component.ts'), generateDropdownComponent(frontends), 'utf-8');
|
|
16
24
|
writeFileSync(join(templatesDir, 'dropdown.component.html'), generateDropdownComponentHtml(frontends), 'utf-8');
|
|
17
25
|
writeFileSync(join(componentsDirectory, 'app.component.ts'), generateAppComponent(isSingleFrontend), 'utf-8');
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { CreateConfiguration, Frontend } from '../../types';
|
|
2
|
-
export declare const generateHTMLPage: (frontends: Frontend[], useHTMLScripts: CreateConfiguration["useHTMLScripts"], editBasePath: string, isSingleFrontend: boolean) => string;
|
|
2
|
+
export declare const generateHTMLPage: (frontends: Frontend[], useHTMLScripts: CreateConfiguration["useHTMLScripts"], editBasePath: string, isSingleFrontend: boolean, includeExamples: boolean) => string;
|
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
import { formatNavLink } from '../../utils/formatNavLink';
|
|
2
|
-
export const generateHTMLPage = (frontends, useHTMLScripts, editBasePath, isSingleFrontend) => {
|
|
2
|
+
export const generateHTMLPage = (frontends, useHTMLScripts, editBasePath, isSingleFrontend, includeExamples) => {
|
|
3
|
+
const cssHref = `${isSingleFrontend ? '../../' : '../../../'}styles/indexes/html-example.css`;
|
|
4
|
+
if (!includeExamples) {
|
|
5
|
+
return `<!doctype html>
|
|
6
|
+
<html>
|
|
7
|
+
<head>
|
|
8
|
+
<title>AbsoluteJS + HTML</title>
|
|
9
|
+
<meta charset="utf-8" />
|
|
10
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
11
|
+
<link rel="stylesheet" type="text/css" href="${cssHref}" />
|
|
12
|
+
<link rel="icon" href="/assets/ico/favicon.ico" />
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
<main></main>
|
|
16
|
+
</body>
|
|
17
|
+
</html>
|
|
18
|
+
`;
|
|
19
|
+
}
|
|
3
20
|
const navLinks = frontends.map(formatNavLink).join('\n\t\t\t');
|
|
4
21
|
const initialCount = useHTMLScripts ? '0' : 'disabled';
|
|
5
22
|
const scriptTagBlock = useHTMLScripts
|
|
@@ -2,5 +2,5 @@ import { ScaffoldFrontendProps } from '../../types';
|
|
|
2
2
|
type ScaffoldHTMLProps = ScaffoldFrontendProps & {
|
|
3
3
|
useHTMLScripts: boolean;
|
|
4
4
|
};
|
|
5
|
-
export declare const scaffoldHTML: ({ editBasePath, isSingleFrontend, targetDirectory, frontends, useHTMLScripts, templatesDirectory, projectAssetsDirectory, stylesIndexesDirectory }: ScaffoldHTMLProps) => void;
|
|
5
|
+
export declare const scaffoldHTML: ({ editBasePath, includeExamples, isSingleFrontend, targetDirectory, frontends, useHTMLScripts, templatesDirectory, projectAssetsDirectory, stylesIndexesDirectory }: ScaffoldHTMLProps) => void;
|
|
6
6
|
export {};
|
|
@@ -2,10 +2,17 @@ import { copyFileSync, cpSync, mkdirSync, writeFileSync } from 'fs';
|
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import { generateMarkupCSS } from '../project/generateMarkupCSS';
|
|
4
4
|
import { generateHTMLPage } from './generateHTMLPage';
|
|
5
|
-
export const scaffoldHTML = ({ editBasePath, isSingleFrontend, targetDirectory, frontends, useHTMLScripts, templatesDirectory, projectAssetsDirectory, stylesIndexesDirectory }) => {
|
|
6
|
-
copyFileSync(join(templatesDirectory, 'assets', 'svg', 'HTML5_Badge.svg'), join(projectAssetsDirectory, 'svg', 'HTML5_Badge.svg'));
|
|
7
|
-
const htmlPage = generateHTMLPage(frontends, useHTMLScripts, editBasePath, isSingleFrontend);
|
|
5
|
+
export const scaffoldHTML = ({ editBasePath, includeExamples, isSingleFrontend, targetDirectory, frontends, useHTMLScripts, templatesDirectory, projectAssetsDirectory, stylesIndexesDirectory }) => {
|
|
8
6
|
const pagesDirectory = join(targetDirectory, 'pages');
|
|
7
|
+
const cssOutputFile = join(stylesIndexesDirectory, 'html-example.css');
|
|
8
|
+
if (!includeExamples) {
|
|
9
|
+
mkdirSync(pagesDirectory, { recursive: true });
|
|
10
|
+
writeFileSync(join(pagesDirectory, 'HTMLExample.html'), generateHTMLPage(frontends, useHTMLScripts, editBasePath, isSingleFrontend, false), 'utf-8');
|
|
11
|
+
writeFileSync(cssOutputFile, `@import url('../reset.css');`, 'utf-8');
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
copyFileSync(join(templatesDirectory, 'assets', 'svg', 'HTML5_Badge.svg'), join(projectAssetsDirectory, 'svg', 'HTML5_Badge.svg'));
|
|
15
|
+
const htmlPage = generateHTMLPage(frontends, useHTMLScripts, editBasePath, isSingleFrontend, true);
|
|
9
16
|
mkdirSync(pagesDirectory, { recursive: true });
|
|
10
17
|
const htmlFilePath = join(pagesDirectory, 'HTMLExample.html');
|
|
11
18
|
writeFileSync(htmlFilePath, htmlPage, 'utf-8');
|
|
@@ -13,7 +20,6 @@ export const scaffoldHTML = ({ editBasePath, isSingleFrontend, targetDirectory,
|
|
|
13
20
|
cpSync(join(templatesDirectory, 'html', 'scripts'), scriptsDirectory, {
|
|
14
21
|
recursive: true
|
|
15
22
|
});
|
|
16
|
-
const cssOutputFile = join(stylesIndexesDirectory, 'html-example.css');
|
|
17
23
|
const htmlCSS = generateMarkupCSS('html', '#e34f26');
|
|
18
24
|
writeFileSync(cssOutputFile, htmlCSS, 'utf-8');
|
|
19
25
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { Frontend } from '../../types';
|
|
2
|
-
export declare const generateHTMXPage: (isSingle: boolean, frontends: Frontend[], editBasePath: string) => string;
|
|
2
|
+
export declare const generateHTMXPage: (isSingle: boolean, frontends: Frontend[], editBasePath: string, includeExamples: boolean) => string;
|
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
import { formatNavLink } from '../../utils/formatNavLink';
|
|
2
|
-
export const generateHTMXPage = (isSingle, frontends, editBasePath) => {
|
|
2
|
+
export const generateHTMXPage = (isSingle, frontends, editBasePath, includeExamples) => {
|
|
3
|
+
if (!includeExamples) {
|
|
4
|
+
return `<!doctype html>
|
|
5
|
+
<html>
|
|
6
|
+
<head>
|
|
7
|
+
<title>AbsoluteJS + HTMX</title>
|
|
8
|
+
<meta charset="utf-8" />
|
|
9
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
10
|
+
<link
|
|
11
|
+
rel="stylesheet"
|
|
12
|
+
type="text/css"
|
|
13
|
+
href="${isSingle ? '../../' : '../../../'}styles/indexes/htmx-example.css"
|
|
14
|
+
/>
|
|
15
|
+
<link rel="icon" href="/assets/ico/favicon.ico" />
|
|
16
|
+
<script src="${isSingle ? '' : '/htmx'}/htmx.min.js"></script>
|
|
17
|
+
</head>
|
|
18
|
+
<body>
|
|
19
|
+
<main></main>
|
|
20
|
+
</body>
|
|
21
|
+
</html>
|
|
22
|
+
`;
|
|
23
|
+
}
|
|
3
24
|
const navLinks = frontends.map(formatNavLink).join('\n\t\t\t');
|
|
4
25
|
return `<!doctype html>
|
|
5
26
|
<html>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { ScaffoldFrontendProps } from '../../types';
|
|
2
|
-
export declare const scaffoldHTMX: ({ editBasePath, targetDirectory, templatesDirectory, projectAssetsDirectory, frontends, isSingleFrontend, stylesIndexesDirectory }: ScaffoldFrontendProps) => void;
|
|
2
|
+
export declare const scaffoldHTMX: ({ editBasePath, includeExamples, targetDirectory, templatesDirectory, projectAssetsDirectory, frontends, isSingleFrontend, stylesIndexesDirectory }: ScaffoldFrontendProps) => void;
|
|
@@ -3,9 +3,10 @@ import { join } from 'path';
|
|
|
3
3
|
import { Glob } from 'bun';
|
|
4
4
|
import { generateMarkupCSS } from '../project/generateMarkupCSS';
|
|
5
5
|
import { generateHTMXPage } from './generateHTMXPage';
|
|
6
|
-
export const scaffoldHTMX = ({ editBasePath, targetDirectory, templatesDirectory, projectAssetsDirectory, frontends, isSingleFrontend, stylesIndexesDirectory }) => {
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
export const scaffoldHTMX = ({ editBasePath, includeExamples, targetDirectory, templatesDirectory, projectAssetsDirectory, frontends, isSingleFrontend, stylesIndexesDirectory }) => {
|
|
7
|
+
const pagesDirectory = join(targetDirectory, 'pages');
|
|
8
|
+
const cssOutputFile = join(stylesIndexesDirectory, 'htmx-example.css');
|
|
9
|
+
// htmx.min.js is the framework runtime, copied in both modes.
|
|
9
10
|
const glob = new Glob('htmx*.min.js');
|
|
10
11
|
for (const relativePath of glob.scanSync({
|
|
11
12
|
cwd: join(templatesDirectory, 'htmx')
|
|
@@ -15,12 +16,18 @@ export const scaffoldHTMX = ({ editBasePath, targetDirectory, templatesDirectory
|
|
|
15
16
|
copyFileSync(src, dest);
|
|
16
17
|
break;
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
if (!includeExamples) {
|
|
20
|
+
mkdirSync(pagesDirectory, { recursive: true });
|
|
21
|
+
writeFileSync(join(pagesDirectory, 'HTMXExample.html'), generateHTMXPage(isSingleFrontend, frontends, editBasePath, false), 'utf-8');
|
|
22
|
+
writeFileSync(cssOutputFile, `@import url('../reset.css');`, 'utf-8');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
copyFileSync(join(templatesDirectory, 'assets', 'svg', 'htmx-logo-black.svg'), join(projectAssetsDirectory, 'svg', 'htmx-logo-black.svg'));
|
|
26
|
+
copyFileSync(join(templatesDirectory, 'assets', 'svg', 'htmx-logo-white.svg'), join(projectAssetsDirectory, 'svg', 'htmx-logo-white.svg'));
|
|
27
|
+
const htmxPage = generateHTMXPage(isSingleFrontend, frontends, editBasePath, true);
|
|
20
28
|
mkdirSync(pagesDirectory, { recursive: true });
|
|
21
29
|
const htmxFilePath = join(pagesDirectory, 'HTMXExample.html');
|
|
22
30
|
writeFileSync(htmxFilePath, htmxPage, 'utf-8');
|
|
23
|
-
const cssOutputFile = join(stylesIndexesDirectory, 'htmx-example.css');
|
|
24
31
|
const htmxCSS = generateMarkupCSS('htmx', '#3465a4');
|
|
25
32
|
writeFileSync(cssOutputFile, htmxCSS, 'utf-8');
|
|
26
33
|
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { CreateConfiguration } from '../../types';
|
|
2
|
-
type ScaffoldFrontendsProps = Pick<CreateConfiguration, 'useHTMLScripts' | 'frontendDirectories' | 'assetsDirectory' | 'frontends' | 'authOption' | 'absProviders' | 'useTailwind'> & {
|
|
2
|
+
type ScaffoldFrontendsProps = Pick<CreateConfiguration, 'useHTMLScripts' | 'frontendDirectories' | 'assetsDirectory' | 'frontends' | 'authOption' | 'absProviders' | 'includeExamples' | 'useTailwind'> & {
|
|
3
3
|
frontendDirectory: string;
|
|
4
4
|
templatesDirectory: string;
|
|
5
5
|
projectAssetsDirectory: string;
|
|
6
6
|
typesDirectory: string;
|
|
7
7
|
};
|
|
8
|
-
export declare const scaffoldFrontends: ({ frontendDirectory, assetsDirectory, absProviders, authOption, templatesDirectory, projectAssetsDirectory, typesDirectory, useHTMLScripts, useTailwind, frontendDirectories, frontends }: ScaffoldFrontendsProps) => void;
|
|
8
|
+
export declare const scaffoldFrontends: ({ frontendDirectory, assetsDirectory, absProviders, authOption, includeExamples, templatesDirectory, projectAssetsDirectory, typesDirectory, useHTMLScripts, useTailwind, frontendDirectories, frontends }: ScaffoldFrontendsProps) => void;
|
|
9
9
|
export {};
|
|
@@ -6,7 +6,7 @@ import { scaffoldHTMX } from '../htmx/scaffoldHTMX';
|
|
|
6
6
|
import { scaffoldReact } from '../react/scaffoldReact';
|
|
7
7
|
import { scaffoldSvelte } from '../svelte/scaffoldSvelte';
|
|
8
8
|
import { scaffoldVue } from '../vue/scaffoldVue';
|
|
9
|
-
export const scaffoldFrontends = ({ frontendDirectory, assetsDirectory, absProviders, authOption, templatesDirectory, projectAssetsDirectory, typesDirectory, useHTMLScripts, useTailwind, frontendDirectories, frontends }) => {
|
|
9
|
+
export const scaffoldFrontends = ({ frontendDirectory, assetsDirectory, absProviders, authOption, includeExamples, templatesDirectory, projectAssetsDirectory, typesDirectory, useHTMLScripts, useTailwind, frontendDirectories, frontends }) => {
|
|
10
10
|
const srcDirectory = dirname(frontendDirectory);
|
|
11
11
|
const globalStylesDirectory = join(srcDirectory, 'styles');
|
|
12
12
|
const stylesIndexesDirectory = join(globalStylesDirectory, 'indexes');
|
|
@@ -42,6 +42,7 @@ export const scaffoldFrontends = ({ frontendDirectory, assetsDirectory, absProvi
|
|
|
42
42
|
authOption,
|
|
43
43
|
editBasePath,
|
|
44
44
|
frontends,
|
|
45
|
+
includeExamples,
|
|
45
46
|
isSingleFrontend,
|
|
46
47
|
projectAssetsDirectory,
|
|
47
48
|
stylesDirectory: stylesTargetDirectory,
|
|
@@ -57,6 +58,7 @@ export const scaffoldFrontends = ({ frontendDirectory, assetsDirectory, absProvi
|
|
|
57
58
|
authOption,
|
|
58
59
|
editBasePath,
|
|
59
60
|
frontends,
|
|
61
|
+
includeExamples,
|
|
60
62
|
isSingleFrontend,
|
|
61
63
|
projectAssetsDirectory,
|
|
62
64
|
stylesDirectory: stylesTargetDirectory,
|
|
@@ -72,6 +74,7 @@ export const scaffoldFrontends = ({ frontendDirectory, assetsDirectory, absProvi
|
|
|
72
74
|
authOption,
|
|
73
75
|
editBasePath,
|
|
74
76
|
frontends,
|
|
77
|
+
includeExamples,
|
|
75
78
|
projectAssetsDirectory,
|
|
76
79
|
stylesDirectory: stylesTargetDirectory,
|
|
77
80
|
stylesIndexesDirectory,
|
|
@@ -87,6 +90,7 @@ export const scaffoldFrontends = ({ frontendDirectory, assetsDirectory, absProvi
|
|
|
87
90
|
authOption,
|
|
88
91
|
editBasePath,
|
|
89
92
|
frontends,
|
|
93
|
+
includeExamples,
|
|
90
94
|
isSingleFrontend,
|
|
91
95
|
projectAssetsDirectory,
|
|
92
96
|
stylesDirectory: stylesTargetDirectory,
|
|
@@ -102,6 +106,7 @@ export const scaffoldFrontends = ({ frontendDirectory, assetsDirectory, absProvi
|
|
|
102
106
|
authOption,
|
|
103
107
|
editBasePath,
|
|
104
108
|
frontends,
|
|
109
|
+
includeExamples,
|
|
105
110
|
isSingleFrontend,
|
|
106
111
|
projectAssetsDirectory,
|
|
107
112
|
stylesDirectory: stylesTargetDirectory,
|
|
@@ -118,6 +123,7 @@ export const scaffoldFrontends = ({ frontendDirectory, assetsDirectory, absProvi
|
|
|
118
123
|
authOption,
|
|
119
124
|
editBasePath,
|
|
120
125
|
frontends,
|
|
126
|
+
includeExamples,
|
|
121
127
|
isSingleFrontend,
|
|
122
128
|
projectAssetsDirectory,
|
|
123
129
|
stylesDirectory: stylesTargetDirectory,
|
|
@@ -2,5 +2,5 @@ import { ProviderOption } from '@absolutejs/auth';
|
|
|
2
2
|
import { AuthOption, Frontend } from '../../types';
|
|
3
3
|
export declare const generateAppComponent: (frontends: Frontend[], editBasePath: string) => string;
|
|
4
4
|
export declare const generateDropdownComponent: (frontends: Frontend[]) => string;
|
|
5
|
-
export declare const generateReactExamplePage: (authOption: AuthOption) => string;
|
|
5
|
+
export declare const generateReactExamplePage: (authOption: AuthOption, includeExamples: boolean) => string;
|
|
6
6
|
export declare const generateSignInComponent: (absProviders: ProviderOption[] | undefined) => string;
|
|
@@ -73,7 +73,31 @@ export const generateDropdownComponent = (frontends) => {
|
|
|
73
73
|
);
|
|
74
74
|
`;
|
|
75
75
|
};
|
|
76
|
-
export const generateReactExamplePage = (authOption) => {
|
|
76
|
+
export const generateReactExamplePage = (authOption, includeExamples) => {
|
|
77
|
+
if (!includeExamples) {
|
|
78
|
+
const authImports = authOption === 'abs'
|
|
79
|
+
? `import type { User } from '../../../types/databaseTypes';\nimport type { ProviderConfiguration } from '@absolutejs/auth';\n`
|
|
80
|
+
: '';
|
|
81
|
+
const authProps = authOption === 'abs'
|
|
82
|
+
? '\n\tuser: User | null;\n\tproviderConfiguration: ProviderConfiguration | undefined;'
|
|
83
|
+
: '';
|
|
84
|
+
return `${authImports}import { Head } from '../components/Head';
|
|
85
|
+
|
|
86
|
+
type ReactExampleProps = {
|
|
87
|
+
initialCount: number;
|
|
88
|
+
cssPath: string;${authProps}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export const ReactExample = ({ cssPath }: ReactExampleProps) => (
|
|
92
|
+
<html>
|
|
93
|
+
<Head cssPath={cssPath} />
|
|
94
|
+
<body>
|
|
95
|
+
<main></main>
|
|
96
|
+
</body>
|
|
97
|
+
</html>
|
|
98
|
+
);
|
|
99
|
+
`;
|
|
100
|
+
}
|
|
77
101
|
const useBlockReturn = authOption === 'abs';
|
|
78
102
|
const propsType = `
|
|
79
103
|
type ReactExampleProps = {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { ScaffoldFrontendProps } from '../../types';
|
|
2
|
-
export declare const scaffoldReact: ({ authOption, editBasePath, targetDirectory, templatesDirectory, frontends, projectAssetsDirectory, absProviders, stylesIndexesDirectory }: ScaffoldFrontendProps) => void;
|
|
2
|
+
export declare const scaffoldReact: ({ authOption, editBasePath, includeExamples, targetDirectory, templatesDirectory, frontends, projectAssetsDirectory, absProviders, stylesIndexesDirectory }: ScaffoldFrontendProps) => void;
|
|
@@ -2,7 +2,15 @@ import { copyFileSync, cpSync, mkdirSync, writeFileSync } from 'fs';
|
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import { generateMarkupCSS } from '../project/generateMarkupCSS';
|
|
4
4
|
import { generateAppComponent, generateDropdownComponent, generateReactExamplePage, generateSignInComponent } from './generateReactComponents';
|
|
5
|
-
export const scaffoldReact = ({ authOption, editBasePath, targetDirectory, templatesDirectory, frontends, projectAssetsDirectory, absProviders, stylesIndexesDirectory }) => {
|
|
5
|
+
export const scaffoldReact = ({ authOption, editBasePath, includeExamples, targetDirectory, templatesDirectory, frontends, projectAssetsDirectory, absProviders, stylesIndexesDirectory }) => {
|
|
6
|
+
if (!includeExamples) {
|
|
7
|
+
mkdirSync(join(targetDirectory, 'components'), { recursive: true });
|
|
8
|
+
copyFileSync(join(templatesDirectory, 'react', 'components', 'Head.tsx'), join(targetDirectory, 'components', 'Head.tsx'));
|
|
9
|
+
mkdirSync(join(targetDirectory, 'pages'), { recursive: true });
|
|
10
|
+
writeFileSync(join(targetDirectory, 'pages', 'ReactExample.tsx'), generateReactExamplePage(authOption, false), 'utf-8');
|
|
11
|
+
writeFileSync(join(stylesIndexesDirectory, 'react-example.css'), `@import url('../reset.css');`, 'utf-8');
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
6
14
|
mkdirSync(join(projectAssetsDirectory, 'svg'), { recursive: true });
|
|
7
15
|
copyFileSync(join(templatesDirectory, 'assets', 'svg', 'react.svg'), join(projectAssetsDirectory, 'svg', 'react.svg'));
|
|
8
16
|
copyFileSync(join(templatesDirectory, 'assets', 'svg', 'google-logo.svg'), join(projectAssetsDirectory, 'svg', 'google-logo.svg'));
|
|
@@ -17,7 +25,7 @@ export const scaffoldReact = ({ authOption, editBasePath, targetDirectory, templ
|
|
|
17
25
|
const signInComponent = generateSignInComponent(absProviders);
|
|
18
26
|
writeFileSync(join(targetDirectory, 'components', 'SignIn.tsx'), signInComponent, 'utf-8');
|
|
19
27
|
}
|
|
20
|
-
const pageComponent = generateReactExamplePage(authOption);
|
|
28
|
+
const pageComponent = generateReactExamplePage(authOption, true);
|
|
21
29
|
mkdirSync(join(targetDirectory, 'pages'), { recursive: true });
|
|
22
30
|
writeFileSync(join(targetDirectory, 'pages', 'ReactExample.tsx'), pageComponent, 'utf-8');
|
|
23
31
|
const cssOutputFile = join(stylesIndexesDirectory, 'react-example.css');
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { Frontend } from '../../types';
|
|
2
|
-
export declare const generateSveltePage: (frontends: Frontend[], editBasePath: string) => string;
|
|
2
|
+
export declare const generateSveltePage: (frontends: Frontend[], editBasePath: string, includeExamples: boolean) => string;
|
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
import { formatNavLink } from '../../utils/formatNavLink';
|
|
2
|
-
export const generateSveltePage = (frontends, editBasePath) => {
|
|
2
|
+
export const generateSveltePage = (frontends, editBasePath, includeExamples) => {
|
|
3
|
+
if (!includeExamples) {
|
|
4
|
+
return `<script lang="ts">
|
|
5
|
+
type SvelteExampleProps = {
|
|
6
|
+
initialCount: number;
|
|
7
|
+
cssPath: string;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
let { cssPath }: SvelteExampleProps = $props();
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<svelte:head>
|
|
14
|
+
<meta charset="utf-8" />
|
|
15
|
+
<title>AbsoluteJS + Svelte</title>
|
|
16
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
17
|
+
<link rel="icon" href="/assets/ico/favicon.ico" />
|
|
18
|
+
<link rel="stylesheet" href={cssPath} type="text/css" />
|
|
19
|
+
</svelte:head>
|
|
20
|
+
|
|
21
|
+
<main></main>
|
|
22
|
+
`;
|
|
23
|
+
}
|
|
3
24
|
const navLinks = frontends.map(formatNavLink).join('\n\t\t\t');
|
|
4
25
|
return `<script lang="ts">
|
|
5
26
|
type SvelteExampleProps = {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { ScaffoldFrontendProps } from '../../types';
|
|
2
|
-
export declare const scaffoldSvelte: ({ editBasePath, targetDirectory, frontends, templatesDirectory, projectAssetsDirectory, stylesIndexesDirectory }: ScaffoldFrontendProps) => void;
|
|
2
|
+
export declare const scaffoldSvelte: ({ editBasePath, includeExamples, targetDirectory, frontends, templatesDirectory, projectAssetsDirectory, stylesIndexesDirectory }: ScaffoldFrontendProps) => void;
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import { copyFileSync, cpSync, mkdirSync, writeFileSync } from 'fs';
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import { generateSveltePage } from './generateSveltePage';
|
|
4
|
-
export const scaffoldSvelte = ({ editBasePath, targetDirectory, frontends, templatesDirectory, projectAssetsDirectory, stylesIndexesDirectory }) => {
|
|
4
|
+
export const scaffoldSvelte = ({ editBasePath, includeExamples, targetDirectory, frontends, templatesDirectory, projectAssetsDirectory, stylesIndexesDirectory }) => {
|
|
5
|
+
const pagesDirectory = join(targetDirectory, 'pages');
|
|
6
|
+
const cssOutputFile = join(stylesIndexesDirectory, 'svelte-example.css');
|
|
7
|
+
const svelteCSS = `@import url('../reset.css');`;
|
|
8
|
+
if (!includeExamples) {
|
|
9
|
+
mkdirSync(pagesDirectory, { recursive: true });
|
|
10
|
+
writeFileSync(join(pagesDirectory, 'SvelteExample.svelte'), generateSveltePage(frontends, editBasePath, false), 'utf-8');
|
|
11
|
+
writeFileSync(cssOutputFile, svelteCSS, 'utf-8');
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
5
14
|
copyFileSync(join(templatesDirectory, 'assets', 'svg', 'svelte-logo.svg'), join(projectAssetsDirectory, 'svg', 'svelte-logo.svg'));
|
|
6
15
|
cpSync(join(templatesDirectory, 'svelte'), targetDirectory, {
|
|
7
16
|
recursive: true
|
|
8
17
|
});
|
|
9
|
-
const sveltePage = generateSveltePage(frontends, editBasePath);
|
|
10
|
-
const pagesDirectory = join(targetDirectory, 'pages');
|
|
18
|
+
const sveltePage = generateSveltePage(frontends, editBasePath, true);
|
|
11
19
|
mkdirSync(pagesDirectory, { recursive: true });
|
|
12
20
|
const svelteFilePath = join(pagesDirectory, 'SvelteExample.svelte');
|
|
13
21
|
writeFileSync(svelteFilePath, sveltePage, 'utf-8');
|
|
14
|
-
const cssOutputFile = join(stylesIndexesDirectory, 'svelte-example.css');
|
|
15
|
-
const svelteCSS = `@import url('../reset.css');`;
|
|
16
22
|
writeFileSync(cssOutputFile, svelteCSS, 'utf-8');
|
|
17
23
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { Frontend } from '../../types';
|
|
2
|
-
export declare const generateVuePage: (frontends: Frontend[], editBasePath: string) => string;
|
|
2
|
+
export declare const generateVuePage: (frontends: Frontend[], editBasePath: string, includeExamples: boolean) => string;
|
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
import { formatNavLink } from '../../utils/formatNavLink';
|
|
2
|
-
export const generateVuePage = (frontends, editBasePath) => {
|
|
2
|
+
export const generateVuePage = (frontends, editBasePath, includeExamples) => {
|
|
3
|
+
if (!includeExamples) {
|
|
4
|
+
return `<script setup lang="ts">
|
|
5
|
+
defineProps<{
|
|
6
|
+
initialCount: number;
|
|
7
|
+
}>();
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<main></main>
|
|
12
|
+
</template>
|
|
13
|
+
|
|
14
|
+
<style scoped>
|
|
15
|
+
:global(#root) {
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
margin: 0 auto;
|
|
19
|
+
height: 100%;
|
|
20
|
+
width: 100%;
|
|
21
|
+
}
|
|
22
|
+
</style>
|
|
23
|
+
`;
|
|
24
|
+
}
|
|
3
25
|
const navLinks = frontends.map(formatNavLink).join('\n\t\t\t');
|
|
4
26
|
return `<script setup lang="ts">
|
|
5
27
|
import CountButton from '../components/CountButton.vue';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ScaffoldFrontendProps } from '../../types';
|
|
2
2
|
type ScaffoldVueProps = Omit<ScaffoldFrontendProps, 'isSingleFrontend'>;
|
|
3
|
-
export declare const scaffoldVue: ({ editBasePath, targetDirectory, templatesDirectory, frontends, projectAssetsDirectory, stylesIndexesDirectory }: ScaffoldVueProps) => void;
|
|
3
|
+
export declare const scaffoldVue: ({ editBasePath, includeExamples, targetDirectory, templatesDirectory, frontends, projectAssetsDirectory, stylesIndexesDirectory }: ScaffoldVueProps) => void;
|
|
4
4
|
export {};
|
|
@@ -2,17 +2,23 @@ import { cpSync, copyFileSync, mkdirSync, writeFileSync } from 'fs';
|
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import { generateMarkupCSS } from '../project/generateMarkupCSS';
|
|
4
4
|
import { generateVuePage } from './generateVuePage';
|
|
5
|
-
export const scaffoldVue = ({ editBasePath, targetDirectory, templatesDirectory, frontends, projectAssetsDirectory, stylesIndexesDirectory }) => {
|
|
5
|
+
export const scaffoldVue = ({ editBasePath, includeExamples, targetDirectory, templatesDirectory, frontends, projectAssetsDirectory, stylesIndexesDirectory }) => {
|
|
6
|
+
const cssOutputFile = join(stylesIndexesDirectory, 'vue-example.css');
|
|
7
|
+
const pagesDirectory = join(targetDirectory, 'pages');
|
|
8
|
+
if (!includeExamples) {
|
|
9
|
+
mkdirSync(pagesDirectory, { recursive: true });
|
|
10
|
+
writeFileSync(join(pagesDirectory, 'VueExample.vue'), generateVuePage(frontends, editBasePath, false), 'utf-8');
|
|
11
|
+
writeFileSync(cssOutputFile, `@import url('../reset.css');`, 'utf-8');
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
6
14
|
copyFileSync(join(templatesDirectory, 'assets', 'svg', 'vue-logo.svg'), join(projectAssetsDirectory, 'svg', 'vue-logo.svg'));
|
|
7
15
|
cpSync(join(templatesDirectory, 'vue'), targetDirectory, {
|
|
8
16
|
recursive: true
|
|
9
17
|
});
|
|
10
|
-
const vuePage = generateVuePage(frontends, editBasePath);
|
|
11
|
-
const pagesDirectory = join(targetDirectory, 'pages');
|
|
18
|
+
const vuePage = generateVuePage(frontends, editBasePath, true);
|
|
12
19
|
mkdirSync(pagesDirectory, { recursive: true });
|
|
13
20
|
const vueFilePath = join(pagesDirectory, 'VueExample.vue');
|
|
14
21
|
writeFileSync(vueFilePath, vuePage, 'utf-8');
|
|
15
|
-
const cssOutputFile = join(stylesIndexesDirectory, 'vue-example.css');
|
|
16
22
|
const vueCSS = generateMarkupCSS('vue', '#42b883');
|
|
17
23
|
writeFileSync(cssOutputFile, vueCSS, 'utf-8');
|
|
18
24
|
};
|
package/dist/messages.d.ts
CHANGED
|
@@ -10,5 +10,5 @@ type DebugMessageProps = {
|
|
|
10
10
|
response: CreateConfiguration;
|
|
11
11
|
packageManager: string;
|
|
12
12
|
};
|
|
13
|
-
export declare const getDebugMessage: ({ response: { projectName, codeQualityTool, directoryConfig, useTailwind, tailwind, frontends, useHTMLScripts, frontendDirectories, buildDirectory, assetsDirectory, databaseEngine, databaseHost, databaseDirectory, orm, authOption, plugins, initializeGitNow, installDependenciesNow }, packageManager }: DebugMessageProps) => string;
|
|
13
|
+
export declare const getDebugMessage: ({ response: { projectName, codeQualityTool, directoryConfig, useTailwind, tailwind, frontends, includeExamples, useHTMLScripts, frontendDirectories, buildDirectory, assetsDirectory, databaseEngine, databaseHost, databaseDirectory, orm, authOption, plugins, initializeGitNow, installDependenciesNow }, packageManager }: DebugMessageProps) => string;
|
|
14
14
|
export {};
|
package/dist/messages.js
CHANGED
|
@@ -31,6 +31,7 @@ Options:
|
|
|
31
31
|
${cyan('--htmx-dir')} ${dim(cyan('<directory>'))} Specify the directory for and use the HTMX frontend
|
|
32
32
|
${cyan('--install')} Use the same package manager to install dependencies
|
|
33
33
|
${cyan('--lts')} Use LTS versions of required packages
|
|
34
|
+
${cyan('--no-examples')} Generate a bare, bootable skeleton without example pages, components, or demo styles
|
|
34
35
|
${cyan('--orm')} ${dim(cyan('<orm>'))} ORM to configure: "drizzle" | "prisma" | 'none'
|
|
35
36
|
${cyan('--plugin')} ${dim(cyan('<plugin>'))} Elysia plugin(s) to include (repeatable); 'none' skips plugin setup
|
|
36
37
|
${cyan('--react')} Include a React frontend
|
|
@@ -48,7 +49,7 @@ export const getOutroMessage = ({ projectName, packageManager, installDependenci
|
|
|
48
49
|
`${cyan('cd')} ${projectName}\n` +
|
|
49
50
|
`${installDependenciesNow ? '' : `${cyan(`${packageManager} install`)}\n`}` +
|
|
50
51
|
`${cyan(`${packageManager} dev`)}`; // TODO: Some package managers need run
|
|
51
|
-
export const getDebugMessage = ({ response: { projectName, codeQualityTool, directoryConfig, useTailwind, tailwind, frontends, useHTMLScripts, frontendDirectories, buildDirectory, assetsDirectory, databaseEngine, databaseHost, databaseDirectory, orm, authOption, plugins, initializeGitNow, installDependenciesNow }, packageManager }) => {
|
|
52
|
+
export const getDebugMessage = ({ response: { projectName, codeQualityTool, directoryConfig, useTailwind, tailwind, frontends, includeExamples, useHTMLScripts, frontendDirectories, buildDirectory, assetsDirectory, databaseEngine, databaseHost, databaseDirectory, orm, authOption, plugins, initializeGitNow, installDependenciesNow }, packageManager }) => {
|
|
52
53
|
const htmlScriptingValue = useHTMLScripts
|
|
53
54
|
? blueBright('TypeScript')
|
|
54
55
|
: dim('None');
|
|
@@ -68,6 +69,7 @@ export const getDebugMessage = ({ response: { projectName, codeQualityTool, dire
|
|
|
68
69
|
['Tailwind Configuration', tailwindSection],
|
|
69
70
|
[frontends.length === 1 ? 'Frontend' : 'Frontends', frontends.map((name) => frontendLabels[name]).join(', ')],
|
|
70
71
|
['HTML Scripting', frontends.includes('html') ? htmlScriptingValue : dim('None')],
|
|
72
|
+
['Example Content', includeExamples ? green('Yes') : red('No')],
|
|
71
73
|
['Build Directory', buildDirectory],
|
|
72
74
|
['Assets Directory', assetsDirectory],
|
|
73
75
|
['Database Engine', databaseEngine && databaseEngine !== 'none' ? databaseEngine : dim('None')],
|
package/dist/prompt.js
CHANGED
|
@@ -8,6 +8,7 @@ import { getFrontendDirectoryConfigurations } from './questions/frontendDirector
|
|
|
8
8
|
import { getFrontends } from './questions/frontends';
|
|
9
9
|
import { getGithubLink } from './questions/githubLink';
|
|
10
10
|
import { getHtmlScriptingOption } from './questions/htmlScriptingOption';
|
|
11
|
+
import { getIncludeExamples } from './questions/includeExamples';
|
|
11
12
|
import { getInitializeGit } from './questions/initializeGitNow';
|
|
12
13
|
import { getInstallDependencies } from './questions/installDependenciesNow';
|
|
13
14
|
import { getORM } from './questions/orm';
|
|
@@ -28,6 +29,8 @@ export const prompt = async (argumentConfiguration) => {
|
|
|
28
29
|
? (argumentConfiguration.useHTMLScripts ??
|
|
29
30
|
(await getHtmlScriptingOption()))
|
|
30
31
|
: false;
|
|
32
|
+
// 5b. Include example pages/components, or generate a bare skeleton
|
|
33
|
+
const includeExamples = argumentConfiguration.includeExamples ?? (await getIncludeExamples());
|
|
31
34
|
// 6. Database engine
|
|
32
35
|
const databaseEngine = argumentConfiguration.databaseEngine ?? (await getDatabaseEngine());
|
|
33
36
|
// 7. Database host
|
|
@@ -94,6 +97,7 @@ export const prompt = async (argumentConfiguration) => {
|
|
|
94
97
|
githubLink,
|
|
95
98
|
githubRepoUrl,
|
|
96
99
|
githubVisibility,
|
|
100
|
+
includeExamples,
|
|
97
101
|
initializeGitNow,
|
|
98
102
|
installDependenciesNow,
|
|
99
103
|
orm,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getIncludeExamples: () => Promise<boolean>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { confirm, isCancel } from '@clack/prompts';
|
|
2
|
+
import { abort } from '../utils/abort';
|
|
3
|
+
export const getIncludeExamples = async () => {
|
|
4
|
+
const includeExamples = await confirm({
|
|
5
|
+
initialValue: true,
|
|
6
|
+
message: 'Include example pages and components?'
|
|
7
|
+
});
|
|
8
|
+
if (isCancel(includeExamples))
|
|
9
|
+
abort();
|
|
10
|
+
return includeExamples;
|
|
11
|
+
};
|
package/dist/scaffold.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ type ScaffoldProps = {
|
|
|
5
5
|
latest: boolean;
|
|
6
6
|
envVariables: string[] | undefined;
|
|
7
7
|
};
|
|
8
|
-
export declare const scaffold: ({ response: { projectName, codeQualityTool, initializeGitNow, githubLink, githubRepoUrl, githubVisibility, databaseEngine, databaseHost, useHTMLScripts, useTailwind, databaseDirectory, absProviders, orm, frontends, plugins, authOption, buildDirectory, assetsDirectory, tailwind, installDependenciesNow, frontendDirectories }, latest, envVariables, packageManager }: ScaffoldProps) => Promise<{
|
|
8
|
+
export declare const scaffold: ({ response: { projectName, codeQualityTool, initializeGitNow, githubLink, githubRepoUrl, githubVisibility, databaseEngine, databaseHost, useHTMLScripts, useTailwind, databaseDirectory, absProviders, includeExamples, orm, frontends, plugins, authOption, buildDirectory, assetsDirectory, tailwind, installDependenciesNow, frontendDirectories }, latest, envVariables, packageManager }: ScaffoldProps) => Promise<{
|
|
9
9
|
dockerFreshInstall: boolean;
|
|
10
10
|
}>;
|
|
11
11
|
export {};
|
package/dist/scaffold.js
CHANGED
|
@@ -10,7 +10,7 @@ import { scaffoldConfigurationFiles } from './generators/configurations/scaffold
|
|
|
10
10
|
import { scaffoldDatabase } from './generators/db/scaffoldDatabase';
|
|
11
11
|
import { scaffoldBackend } from './generators/project/scaffoldBackend';
|
|
12
12
|
import { scaffoldFrontends } from './generators/project/scaffoldFrontends';
|
|
13
|
-
export const scaffold = async ({ response: { projectName, codeQualityTool, initializeGitNow, githubLink, githubRepoUrl, githubVisibility, databaseEngine, databaseHost, useHTMLScripts, useTailwind, databaseDirectory, absProviders, orm, frontends, plugins, authOption, buildDirectory, assetsDirectory, tailwind, installDependenciesNow, frontendDirectories }, latest, envVariables, packageManager }) => {
|
|
13
|
+
export const scaffold = async ({ response: { projectName, codeQualityTool, initializeGitNow, githubLink, githubRepoUrl, githubVisibility, databaseEngine, databaseHost, useHTMLScripts, useTailwind, databaseDirectory, absProviders, includeExamples, orm, frontends, plugins, authOption, buildDirectory, assetsDirectory, tailwind, installDependenciesNow, frontendDirectories }, latest, envVariables, packageManager }) => {
|
|
14
14
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
15
15
|
const templatesDirectory = join(__dirname, '/templates');
|
|
16
16
|
const { frontendDirectory, backendDirectory, projectAssetsDirectory, typesDirectory } = initalizeRoot(projectName, templatesDirectory);
|
|
@@ -76,6 +76,7 @@ export const scaffold = async ({ response: { projectName, codeQualityTool, initi
|
|
|
76
76
|
frontendDirectories,
|
|
77
77
|
frontendDirectory,
|
|
78
78
|
frontends,
|
|
79
|
+
includeExamples,
|
|
79
80
|
projectAssetsDirectory,
|
|
80
81
|
templatesDirectory,
|
|
81
82
|
typesDirectory,
|
package/dist/types.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export type ScaffoldFrontendProps = {
|
|
|
5
5
|
assetsDirectory: string;
|
|
6
6
|
authOption: AuthOption;
|
|
7
7
|
editBasePath: string;
|
|
8
|
+
includeExamples: boolean;
|
|
8
9
|
targetDirectory: string;
|
|
9
10
|
templatesDirectory: string;
|
|
10
11
|
projectAssetsDirectory: string;
|
|
@@ -50,6 +51,7 @@ export type CreateConfiguration = {
|
|
|
50
51
|
databaseEngine: DatabaseEngine;
|
|
51
52
|
frontendDirectories: FrontendDirectories;
|
|
52
53
|
frontends: Frontend[];
|
|
54
|
+
includeExamples: boolean;
|
|
53
55
|
useHTMLScripts: boolean;
|
|
54
56
|
initializeGitNow: boolean;
|
|
55
57
|
githubLink: GithubLinkOption;
|
|
@@ -25,6 +25,7 @@ export const parseCommandLineOptions = () => {
|
|
|
25
25
|
directory: { type: 'string' },
|
|
26
26
|
env: { multiple: true, type: 'string' },
|
|
27
27
|
'eslint+prettier': { type: 'boolean' },
|
|
28
|
+
examples: { type: 'boolean' },
|
|
28
29
|
git: { type: 'boolean' },
|
|
29
30
|
github: { type: 'string' },
|
|
30
31
|
help: { default: false, short: 'h', type: 'boolean' },
|
|
@@ -236,6 +237,7 @@ export const parseCommandLineOptions = () => {
|
|
|
236
237
|
validEnv.push(entry);
|
|
237
238
|
}
|
|
238
239
|
values.env = validEnv.length ? validEnv : undefined;
|
|
240
|
+
const includeExamples = values.examples ?? (values.skip ? true : undefined);
|
|
239
241
|
const repoVisibility = values['repo-visibility'];
|
|
240
242
|
const githubVisibility = repoVisibility === 'public' || repoVisibility === 'private'
|
|
241
243
|
? repoVisibility
|
|
@@ -257,6 +259,7 @@ export const parseCommandLineOptions = () => {
|
|
|
257
259
|
: undefined,
|
|
258
260
|
githubRepoUrl: normalizeRepoInput(values.repo)?.httpsUrl,
|
|
259
261
|
githubVisibility,
|
|
262
|
+
includeExamples,
|
|
260
263
|
initializeGitNow: values.git,
|
|
261
264
|
installDependenciesNow: values.install,
|
|
262
265
|
orm,
|
package/dist/versions.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Run `bun run check-versions` to compare against latest npm versions.
|
|
5
5
|
*/
|
|
6
6
|
export declare const versions: {
|
|
7
|
-
readonly '@absolutejs/absolute': "0.19.0-beta.
|
|
7
|
+
readonly '@absolutejs/absolute': "0.19.0-beta.1081";
|
|
8
8
|
readonly '@absolutejs/auth': "0.22.7";
|
|
9
9
|
readonly '@angular/common': "21.2.0";
|
|
10
10
|
readonly '@angular/compiler': "21.2.0";
|
package/dist/versions.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export const versions = {
|
|
7
7
|
/* ── Core ─────────────────────────────────────────────── */
|
|
8
|
-
'@absolutejs/absolute': '0.19.0-beta.
|
|
8
|
+
'@absolutejs/absolute': '0.19.0-beta.1081',
|
|
9
9
|
'@absolutejs/auth': '0.22.7',
|
|
10
10
|
/* ── Angular ─────────────────────────────────────────── */
|
|
11
11
|
'@angular/common': '21.2.0',
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
},
|
|
11
11
|
"description": "A CLI tool to create a new AbsoluteJS project",
|
|
12
12
|
"devDependencies": {
|
|
13
|
-
"@absolutejs/absolute": "0.19.0-beta.
|
|
13
|
+
"@absolutejs/absolute": "0.19.0-beta.1081",
|
|
14
14
|
"@eslint/compat": "2.0.2",
|
|
15
15
|
"@stylistic/eslint-plugin": "5.9.0",
|
|
16
16
|
"@types/bun": "1.3.8",
|
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
"typecheck": "bun run tsc --noEmit"
|
|
53
53
|
},
|
|
54
54
|
"type": "module",
|
|
55
|
-
"version": "0.13.
|
|
55
|
+
"version": "0.13.8"
|
|
56
56
|
}
|