create-ec-app 0.0.3 → 0.0.4

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/README.md CHANGED
@@ -151,13 +151,13 @@ create-ec-app my-project
151
151
 
152
152
  All applications come with:
153
153
 
154
- - TypeScript configuration
155
- - ESLint and Prettier setup
156
- - Git repository initialization
157
- - Environment configuration
158
- - Build and development scripts
159
- - Enterprise-ready folder structure
160
- - Tailored project README in the generated app root (setup, auth, deployment)
154
+ - TypeScript configuration
155
+ - ESLint and Prettier setup
156
+ - Git repository initialization
157
+ - Environment configuration
158
+ - Build and development scripts
159
+ - Enterprise-ready folder structure
160
+ - Tailored project README in the generated app root (setup, auth, deployment)
161
161
 
162
162
  ### Webresource & Power Pages Apps Include:
163
163
 
@@ -1 +1 @@
1
- {"version":3,"file":"powerpages.d.ts","sourceRoot":"","sources":["../../src/creators/powerpages.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,mBAAmB,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,IAAI,CAoqB3E,CAAC"}
1
+ {"version":3,"file":"powerpages.d.ts","sourceRoot":"","sources":["../../src/creators/powerpages.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,mBAAmB,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,IAAI,CAuwB3E,CAAC"}
@@ -1,10 +1,10 @@
1
+ import { execSync } from "node:child_process";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
1
4
  import chalk from "chalk";
2
- import ora from "ora";
3
5
  import fs from "fs-extra";
4
- import path from "path";
5
- import { execSync } from "child_process";
6
6
  import inquirer from "inquirer";
7
- import { fileURLToPath } from "url";
7
+ import ora from "ora";
8
8
  // Helper function to run commands and show a spinner
9
9
  const runCommand = (command, spinnerMessage) => {
10
10
  const spinner = ora(spinnerMessage).start();
@@ -65,7 +65,7 @@ export const createPowerPagesApp = async (projectName) => {
65
65
  fs.writeJsonSync(packageJsonPath, packageJson, { spaces: 2 });
66
66
  ora("Updated package.json with Vite 7 overrides and custom build script").succeed();
67
67
  // Install dependencies based on UI library choice
68
- let dependencies = [
68
+ const dependencies = [
69
69
  "tailwindcss@^4",
70
70
  "@tailwindcss/vite@^4",
71
71
  "@tanstack/react-query",
@@ -318,7 +318,7 @@ export const AuthButton = () => {
318
318
  <button
319
319
  type="button"
320
320
  className="rounded border border-gray-300 px-3 py-1 text-sm font-medium text-gray-700 transition hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-gray-400 focus:ring-offset-2"
321
- onClick={() => (window.location.href = '/Account/Login/LogOff?returnUrl=%2F')}
321
+ onClick={() => { window.location.href = '/Account/Login/LogOff?returnUrl=%2F'; }}
322
322
  >
323
323
  Logout
324
324
  </button>
@@ -465,7 +465,7 @@ root.render(
465
465
  fs.writeFileSync(tsConfigPath, JSON.stringify(tsConfig, null, 2), "utf8");
466
466
  ora("Updated tsconfig.json with path alias '@'").succeed();
467
467
  }
468
- catch (e) {
468
+ catch (_) {
469
469
  ora("Warning: could not update tsconfig.json with alias").warn();
470
470
  }
471
471
  }
@@ -507,8 +507,15 @@ export const AuthProvider: React.FC<AuthProviderProps> = ({ children }) => {
507
507
  const refreshToken = async (): Promise<void> => {
508
508
  try {
509
509
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
510
- const newToken = await (window as any).shell?.getTokenDeferred();
511
- setToken(newToken || '');
510
+ if ((window as any).shell?.getTokenDeferred) {
511
+ const newToken = await (window as any).shell.getTokenDeferred();
512
+ setToken(newToken || '');
513
+ } else if (import.meta.env.DEV) {
514
+ // Local development: read from token.json via fetch
515
+ const resp = await fetch('/token.json');
516
+ const data = await resp.json();
517
+ setToken(data.accessToken || '');
518
+ }
512
519
  } catch (error) {
513
520
  console.error('Error fetching token:', error);
514
521
  setToken('');
@@ -582,11 +589,96 @@ export const useAuth = (): AuthContextType => {
582
589
  };`;
583
590
  fs.writeFileSync(authContextPath, authContextContent, "utf8");
584
591
  ora("Created AuthContext.tsx in src/context").succeed();
585
- // Create services directory and DataService.ts
592
+ // Create authService.ts for API URL and Auth Headers logic
586
593
  const servicesDir = path.join(projectDir, "src", "services");
587
594
  fs.ensureDirSync(servicesDir);
595
+ const authServicePath = path.join(servicesDir, "authService.ts");
596
+ const authServiceContent = `
597
+ /// <reference types="vite/client" />
598
+ /**
599
+ * AuthService: Helper functions for API URL and Auth headers.
600
+ * Supports Power Pages runtime and local development with token.json.
601
+ */
602
+
603
+ // Returns either '/_api' (Power Pages) or a remote URL (from token.json) in local dev
604
+ export async function getApiUrl(): Promise<string> {
605
+ // Power Pages runtime
606
+ if (typeof window !== 'undefined' && (window as any).shell?.getTokenDeferred) {
607
+ return '/_api';
608
+ }
609
+ // Local dev: fetch token.json to get remoteUrl (if present)
610
+ if (typeof window !== 'undefined' && import.meta.env.DEV) {
611
+ try {
612
+ const resp = await fetch('/token.json');
613
+ const data = await resp.json();
614
+ if (data.remoteUrl) return data.remoteUrl;
615
+ } catch {}
616
+ }
617
+ // fallback
618
+ return '/_api';
619
+ }
620
+
621
+ // Returns authentication headers for fetch requests
622
+ export async function getAuthHeaders(): Promise<HeadersInit> {
623
+ // Power Pages runtime
624
+ if (typeof window !== 'undefined' && (window as any).shell?.getTokenDeferred) {
625
+ const token = await (window as any).shell.getTokenDeferred();
626
+ return {
627
+ Authorization: \`Bearer \${token}\`
628
+ };
629
+ }
630
+ // Local dev: read from token.json
631
+ if (typeof window !== 'undefined' && import.meta.env.DEV) {
632
+ try {
633
+ const resp = await fetch('/token.json');
634
+ const data = await resp.json();
635
+ if (data.accessToken) {
636
+ return {
637
+ Authorization: \`\${data.tokenType || 'Bearer'} \${data.accessToken}\`
638
+ };
639
+ }
640
+ } catch {}
641
+ }
642
+ // fallback
643
+ return {};
644
+ }
645
+ `;
646
+ fs.writeFileSync(authServicePath, authServiceContent, "utf8");
647
+ ora("Created authService.ts in src/services").succeed();
648
+ // Create token.json at project root with placeholder token for local dev
649
+ const tokenJsonPath = path.join(projectDir, "token.json");
650
+ const tokenJsonContent = `{
651
+ "accessToken": "<your-token-here>",
652
+ "expiresIn": "",
653
+ "expires_on": 0,
654
+ "tenant": "",
655
+ "tokenType": "Bearer"
656
+ }
657
+ `;
658
+ fs.writeFileSync(tokenJsonPath, tokenJsonContent, "utf8");
659
+ ora("Created token.json for local development").succeed();
660
+ // Add token.json to .gitignore
661
+ const gitignorePath = path.join(projectDir, ".gitignore");
662
+ let gitignoreContent = "";
663
+ if (fs.existsSync(gitignorePath)) {
664
+ gitignoreContent = fs.readFileSync(gitignorePath, "utf8");
665
+ if (!gitignoreContent.includes("token.json")) {
666
+ gitignoreContent += "\ntoken.json\n";
667
+ fs.writeFileSync(gitignorePath, gitignoreContent, "utf8");
668
+ ora("Added token.json to .gitignore").succeed();
669
+ }
670
+ }
671
+ else {
672
+ fs.writeFileSync(gitignorePath, "token.json\n", "utf8");
673
+ ora("Created .gitignore and added token.json").succeed();
674
+ }
675
+ // Print reminder for user to fill in token.json
676
+ console.log(chalk.yellowBright("\nReminder: For local development, please populate 'token.json' at the project root with a valid access token and remoteUrl if needed.\n"));
677
+ // Create DataService.ts using getApiUrl/getAuthHeaders (for future-proofing)
588
678
  const dataServicePath = path.join(servicesDir, "DataService.ts");
589
- const dataServiceContent = `export interface T {
679
+ const dataServiceContent = `import { getApiUrl, getAuthHeaders } from "./authService";
680
+
681
+ export interface T {
590
682
  entityId: string;
591
683
  [key: string]: unknown;
592
684
  }
@@ -595,12 +687,13 @@ export interface ApiResponse<T> {
595
687
  value: T[];
596
688
  }
597
689
 
598
- const BASE_URL = '/_api';
599
-
600
690
  export async function getEntity(): Promise<T[]> {
601
- const response = await fetch(\`\${BASE_URL}/entity\`, {
691
+ const baseUrl = await getApiUrl();
692
+ const headers = await getAuthHeaders();
693
+ const response = await fetch(\`\${baseUrl}/entity\`, {
602
694
  method: 'GET',
603
695
  headers: {
696
+ ...headers,
604
697
  'Accept': 'application/json',
605
698
  'Content-Type': 'application/json',
606
699
  },
@@ -646,7 +739,7 @@ export async function getEntity(): Promise<T[]> {
646
739
  fs.writeFileSync(path.join(projectDir, "README.md"), readmeContent, "utf8");
647
740
  ora("Added README.md from template").succeed();
648
741
  }
649
- catch (err) {
742
+ catch (_) {
650
743
  ora("Failed to add README.md from template; keeping default README").warn();
651
744
  }
652
745
  // Initialize Git
@@ -1 +1 @@
1
- {"version":3,"file":"powerpages.js","sourceRoot":"","sources":["../../src/creators/powerpages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"powerpages.js","sourceRoot":"","sources":["../../src/creators/powerpages.ts"],"names":[],"mappings":"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"}
@@ -1,56 +1,108 @@
1
- # EC Power Pages App
1
+ # EC Power Pages Single Page Application (SPA)
2
2
 
3
- React + Vite + TypeScript template tailored for Microsoft Power Pages. It includes Tailwind CSS, a choice of UI library (Kendo UI or Shadcn/ui), TanStack Query, and an authentication context designed for the Power Pages runtime.
3
+ This is a Power Pages Single Page Application (SPA) built with React, Vite, and TypeScript, generated by `create-ec-app`. It follows Microsoft’s official Power Pages code site model, providing a modern, scalable, and maintainable frontend architecture tailored specifically for Power Pages environments. The app includes integrated authentication, data fetching, and UI options designed to work seamlessly within the Power Pages runtime.
4
4
 
5
5
  ## Features
6
6
 
7
- - React + Vite + TypeScript
8
- - Tailwind CSS (Kendo preset when using Kendo UI)
9
- - UI choice: Kendo UI (with theme selection) or Shadcn/ui
10
- - TanStack Query provider configured in `src/main.tsx`
11
- - Power Pages `AuthContext` (`src/context/AuthContext.tsx`) that:
12
- - Detects `Microsoft.Dynamic365.Portal.User`
13
- - Retrieves tokens via `window.shell.getTokenDeferred()`
14
- - Example `AuthButton` component in `src/components/shared/AuthButton.tsx`
15
- - Power Pages configuration file `powerpages.config.json`
7
+ - **React + Vite + TypeScript**: Modern frontend stack for fast development and optimized builds.
8
+ - **Tailwind CSS**: Utility-first CSS framework with an optional Kendo UI preset for styling consistency.
9
+ - **UI Library Choice**: Select between Kendo UI (including theme selection) or Shadcn/ui components.
10
+ - **TanStack Query**: Preconfigured React Query provider for efficient data fetching and caching.
11
+ - **Power Pages AuthContext**: Integrated authentication context that detects the Power Pages user (`Microsoft.Dynamics365.Portal.User`) and retrieves tokens via `window.shell.getTokenDeferred()`.
12
+ - **Local Development Support**: Includes a mock token file and configuration to simulate authentication during local development.
13
+ - **Optimized Vite Build Output**: Builds optimized assets tailored for upload to Power Pages code sites.
16
14
 
17
- ## Prerequisites
15
+ ## Auth and API Access
18
16
 
19
- - Node.js 18+ and npm 9+
20
- - Kendo UI license (if applicable)
21
- - Access to a Power Pages site to host the built assets
17
+ This SPA integrates with Power Pages authentication and API access mechanisms. The `AuthContext` handles user detection and token retrieval using the Power Pages runtime API. Tokens are obtained asynchronously through `window.shell.getTokenDeferred()`, enabling authenticated API calls to Power Pages endpoints.
22
18
 
23
- ## Getting Started
19
+ ### Example: API URL and Auth Headers
24
20
 
25
- - Install dependencies: `npm install`
26
- - Activate Kendo license (if used): `npx kendo-ui-license activate`
27
- - Dev server: `npm run dev`
28
- - Production build: `npm run build`
29
- - Development build (easier debugging): `npm run build:dev`
21
+ Here is an example of utility functions to build API URLs and set authentication headers for requests within the Power Pages SPA:
30
22
 
31
- ## Key Files
23
+ ```ts
24
+ // src/utils/api.ts
32
25
 
33
- - `src/context/AuthContext.tsx`: Provides `useAuth()` with `user`, `isAuthenticated`, `tenantId`, `token`, and `refreshToken()`.
34
- - `src/components/shared/AuthButton.tsx`: Sign-in/out button wired for Power Pages.
35
- - `src/services/DataService.ts`: Example service (`getEntity`) using `/_api`.
36
- - `src/main.tsx`: Sets up TanStack Query and, when Kendo UI is selected, imports the chosen Kendo theme CSS.
37
- - `kendo-tw-preset.js` and `tailwind.config.js`: Tailwind + Kendo integration (only present for Kendo projects). For Shadcn/ui, a standard Tailwind config is generated.
26
+ export function getApiUrl(entity: string, query = ''): string {
27
+ // Base path for Power Pages API (adjust if your site uses a different base)
28
+ const baseUrl = '/_api';
29
+ return `${baseUrl}/${entity}${query ? `?${query}` : ''}`;
30
+ }
31
+
32
+ export function getAuthHeaders(token: string) {
33
+ return {
34
+ Authorization: `Bearer ${token}`,
35
+ 'Content-Type': 'application/json',
36
+ Accept: 'application/json',
37
+ };
38
+ }
39
+ ```
40
+
41
+ ### Azure CLI Token Generation for Local Development
42
+
43
+ For local development and debugging outside the Power Pages runtime, you can generate an Azure AD token using the Azure CLI. This token can be used to simulate authenticated requests against your Power Pages environment:
44
+
45
+ ```bash
46
+ az account get-access-token --resource=https://<your-powerpages-environment>.crm.dynamics.com
47
+ ```
48
+
49
+ Replace `<your-powerpages-environment>` with your actual environment URL. Use the obtained token in your local mock token file or directly in API request headers.
50
+
51
+ ## Example Service Using TanStack Query
52
+
53
+ Here is an example of a service module `src/services/contacts.ts` that demonstrates fetching contacts data from the Power Pages API using TanStack Query:
38
54
 
39
- ## Usage Example
55
+ ```ts
56
+ // src/services/contacts.ts
57
+ import { useQuery } from '@tanstack/react-query';
58
+ import { getApiUrl, getAuthHeaders } from '@/utils/api';
59
+ import { useAuth } from '@/context/AuthContext';
40
60
 
41
- Wrap your app in `AuthProvider` (already done in `App.tsx`):
61
+ export interface Contact {
62
+ contactid: string;
63
+ firstname: string;
64
+ lastname: string;
65
+ emailaddress1?: string;
66
+ }
67
+
68
+ async function fetchContacts(token: string): Promise<Contact[]> {
69
+ const response = await fetch(getApiUrl('contacts'), {
70
+ headers: getAuthHeaders(token),
71
+ });
72
+ if (!response.ok) {
73
+ throw new Error('Failed to fetch contacts');
74
+ }
75
+ const data = await response.json();
76
+ return data.value;
77
+ }
42
78
 
43
- ```tsx
44
- import { useAuth } from '@/context/AuthContext'
79
+ export function useContacts() {
80
+ const { token } = useAuth();
45
81
 
46
- export function Profile() {
47
- const { user, isAuthenticated } = useAuth()
48
- if (!isAuthenticated) return null
49
- return <div>{user?.firstName} {user?.lastName}</div>
82
+ return useQuery(['contacts'], () => fetchContacts(token!), {
83
+ enabled: !!token,
84
+ });
50
85
  }
51
86
  ```
52
87
 
88
+ This pattern leverages the `AuthContext` to access the current token and uses TanStack Query to manage caching and background updates.
89
+
53
90
  ## Deployment
54
91
 
55
- - Upload files from `dist` into your Power Pages site as static content and reference them in your pages as needed.
56
- - The `powerpages.config.json` file indicates output location and landing page; adapt to your project conventions.
92
+ To deploy your Power Pages SPA:
93
+
94
+ - Build the project using `npm run build` or `npm run build:dev` for development builds.
95
+ - Upload the contents of the `dist` folder to your Power Pages site’s **code site**. This is a dedicated location for hosting SPA assets as static content.
96
+ - Reference your built JavaScript and CSS files in your Power Pages pages as needed.
97
+
98
+ For detailed guidance on Power Pages code sites and deployment, see the [Microsoft Power Pages documentation on code sites](https://learn.microsoft.com/en-us/power-pages/developer/code-sites).
99
+
100
+ Power Pages code sites support continuous deployment workflows via the Power Platform CLI, enabling streamlined updates and integration with source control.
101
+
102
+ ## Configuration
103
+
104
+ The `powerpages.config.json` file defines your site configuration, including output paths and landing page settings. Adjust this file to match your project and deployment conventions.
105
+
106
+ ---
107
+
108
+ This SPA template provides a robust foundation for building Power Pages applications with modern web development tools and best practices, ensuring smooth integration with the Power Pages platform and scalable, maintainable code.
package/package.json CHANGED
@@ -1,60 +1,60 @@
1
1
  {
2
- "name": "create-ec-app",
3
- "version": "0.0.3",
4
- "description": "Unified CLI tool to create different types of EC applications: Webresource, Portal, Power Pages, and Mobile apps.",
5
- "main": "dist/index.js",
6
- "type": "module",
7
- "bin": {
8
- "create-ec-app": "bin/index.js"
9
- },
10
- "scripts": {
11
- "build": "tsc && node scripts/copy-assets.mjs",
12
- "dev": "tsc --watch",
13
- "test": "node bin/index.js test-app",
14
- "prepublishOnly": "npm run build"
15
- },
16
- "keywords": [
17
- "react",
18
- "vite",
19
- "nextjs",
20
- "expo",
21
- "kendo",
22
- "tailwind",
23
- "cli",
24
- "powerpages",
25
- "portal",
26
- "mobile",
27
- "webresource",
28
- "dynamics",
29
- "ec"
30
- ],
31
- "author": "Schalk Conradie",
32
- "license": "MIT",
33
- "dependencies": {
34
- "chalk": "^5.3.0",
35
- "fs-extra": "^11.2.0",
36
- "inquirer": "^12.6.3",
37
- "ora": "^8.0.1"
38
- },
39
- "devDependencies": {
40
- "@types/node": "^22.8.6",
41
- "@types/fs-extra": "^11.0.4",
42
- "@types/inquirer": "^9.0.7",
43
- "typescript": "^5.6.3"
44
- },
45
- "engines": {
46
- "node": ">=18.0.0"
47
- },
48
- "files": [
49
- "dist/**/*",
50
- "bin/**/*"
51
- ],
52
- "repository": {
53
- "type": "git",
54
- "url": "https://github.com/Enterprisecloud-Pty-Ltd/create-ec-app.git"
55
- },
56
- "bugs": {
57
- "url": "https://github.com/Enterprisecloud-Pty-Ltd/create-ec-app/issues"
58
- },
59
- "homepage": "https://github.com/Enterprisecloud-Pty-Ltd/create-ec-app#readme"
60
- }
2
+ "name": "create-ec-app",
3
+ "version": "0.0.4",
4
+ "description": "Unified CLI tool to create different types of EC applications: Webresource, Portal, Power Pages, and Mobile apps.",
5
+ "main": "dist/index.js",
6
+ "type": "module",
7
+ "bin": {
8
+ "create-ec-app": "bin/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc && node scripts/copy-assets.mjs",
12
+ "dev": "tsc --watch",
13
+ "test": "node bin/index.js test-app",
14
+ "prepublishOnly": "npm run build"
15
+ },
16
+ "keywords": [
17
+ "react",
18
+ "vite",
19
+ "nextjs",
20
+ "expo",
21
+ "kendo",
22
+ "tailwind",
23
+ "cli",
24
+ "powerpages",
25
+ "portal",
26
+ "mobile",
27
+ "webresource",
28
+ "dynamics",
29
+ "ec"
30
+ ],
31
+ "author": "Schalk Conradie",
32
+ "license": "MIT",
33
+ "dependencies": {
34
+ "chalk": "^5.3.0",
35
+ "fs-extra": "^11.2.0",
36
+ "inquirer": "^12.6.3",
37
+ "ora": "^8.0.1"
38
+ },
39
+ "devDependencies": {
40
+ "@types/node": "^22.8.6",
41
+ "@types/fs-extra": "^11.0.4",
42
+ "@types/inquirer": "^9.0.7",
43
+ "typescript": "^5.6.3"
44
+ },
45
+ "engines": {
46
+ "node": ">=18.0.0"
47
+ },
48
+ "files": [
49
+ "dist/**/*",
50
+ "bin/**/*"
51
+ ],
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "https://github.com/Enterprisecloud-Pty-Ltd/create-ec-app.git"
55
+ },
56
+ "bugs": {
57
+ "url": "https://github.com/Enterprisecloud-Pty-Ltd/create-ec-app/issues"
58
+ },
59
+ "homepage": "https://github.com/Enterprisecloud-Pty-Ltd/create-ec-app#readme"
60
+ }