From 44b8d62722cde6eb86fa7636a766f17f7e5eda2d Mon Sep 17 00:00:00 2001 From: bengizmo Date: Tue, 25 Mar 2025 14:28:26 -0300 Subject: [PATCH] docs: update Memory Bank and implementation plan with development environment progress - Update activeContext.md with current focus and status - Add development environment decisions to decisionLog.md - Update progress.md with completed tasks - Add development patterns to systemPatterns.md - Update productContext.md with environment details - Add Development Environment Setup section to implementation plan" --- docs/design_guidance.md | 229 ++++++++++++++++++ wordpress-dev/Dockerfile | 35 +-- wordpress-dev/bin/run-tests.sh | 19 +- wordpress-dev/docker-compose.yml | 5 - wordpress-dev/package-lock.json | 30 +++ wordpress-dev/package.json | 18 ++ wordpress-dev/php-fpm.conf | 14 ++ wordpress-dev/php.ini/custom.ini | 4 + wordpress-dev/playwright-report/index.html | 71 ++++++ wordpress-dev/tests/e2e/playwright.config.ts | 30 +++ wordpress-dev/tests/e2e/tests/login.spec.ts | 45 ++++ .../tests/test-results/e2e-results.xml | 120 +++++++++ wordpress-dev/tsconfig.json | 113 +++++++++ 13 files changed, 700 insertions(+), 33 deletions(-) create mode 100644 docs/design_guidance.md create mode 100644 wordpress-dev/package-lock.json create mode 100644 wordpress-dev/package.json create mode 100644 wordpress-dev/php-fpm.conf create mode 100644 wordpress-dev/php.ini/custom.ini create mode 100644 wordpress-dev/playwright-report/index.html create mode 100644 wordpress-dev/tests/e2e/playwright.config.ts create mode 100644 wordpress-dev/tests/e2e/tests/login.spec.ts create mode 100644 wordpress-dev/tests/test-results/e2e-results.xml create mode 100644 wordpress-dev/tsconfig.json diff --git a/docs/design_guidance.md b/docs/design_guidance.md new file mode 100644 index 00000000..e8feed28 --- /dev/null +++ b/docs/design_guidance.md @@ -0,0 +1,229 @@ +# Design Guidance for HVAC Community Events + +This document provides design guidance for implementing the HVAC Community Events Management System based on the design references and WordPress theme integration requirements. + +## Design Reference Analysis + +The design references in the `design_references/` directory provide valuable insights into the desired user interface and experience. These references should be used as guides for implementing the various pages of the plugin. + +## Core UI Elements and Patterns + +### 1. Navigation and Header Elements + +- **Global Header**: The site uses the standard Upskill HVAC header with main navigation +- **Sub-navigation**: Pages have contextual navigation with clear action buttons +- **Breadcrumbs**: Event Summary page includes breadcrumb navigation (Trainer Home > Event Summary) +- **Action Buttons**: Consistently styled blue buttons with icons for primary actions + +### 2. Layout Patterns + +- **Card-based Layout**: Information is organized in clean card sections with white backgrounds +- **Section Headers**: Clear typographic hierarchy with section titles +- **Grid Structure**: Responsive grid layout for statistics cards and information sections +- **Table Layout**: Clean tables with clear headers and alternating row colors +- **Form Layout**: Well-structured forms with logical grouping and clear labels + +### 3. Visual Elements + +- **Color Scheme**: Light blue page backgrounds with white cards and blue accents +- **Typography**: Consistent heading hierarchy and paragraph styling +- **Icons**: Used to enhance recognition of statistics and action buttons +- **Spacing**: Consistent padding and margin patterns throughout + +## WordPress Theme Integration + +### 1. Leveraging Astra Theme + +The Upskill HVAC site uses a child theme of Astra (4.9.0). To ensure consistency: + +- Use Astra's hook system: + - `astra_header_before`/`astra_header_after` for header content + - `astra_primary_content_top`/`astra_primary_content_bottom` for main content area + - `astra_entry_content_before`/`astra_entry_content_after` for content containers + +- Use Astra's styling classes: + - `.ast-container` for main content containers + - `.ast-row` for grid layouts + - `.ast-col-*` for column structures + - `.ast-button` and variants for button styling + +### 2. Essential Blocks and Spectra Pro Integration + +- **Content Blocks**: Use Essential Blocks for advanced content structures when appropriate +- **Layout Elements**: Leverage Spectra Pro's advanced layout options for complex page sections +- **Component Styling**: Apply Spectra's pre-styled components rather than custom CSS when possible + +### 3. Custom Templates + +When creating custom templates, follow these guidelines: + +1. Start by extending default theme templates: + ```php + // Example template hierarchy + get_header(); + ?> +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + ``` + +## Page-Specific Implementation Guidelines + +### 1. Trainer Dashboard + +Based on `upskillhvac.com_hce-dashboard_ (4).png`: + +- **Page Structure**: + - Top navigation bar with action buttons + - "Your Stats" section with 5 stat cards in a responsive grid + - "Your Events" section with tabbed filtering and table display + +- **Theme Integration**: + ```php + // Stat cards implementation example + echo '
'; + foreach ($stats as $stat) { + echo '
'; + echo '
'; + // Card content + echo '
'; + echo '
'; + } + echo '
'; + ``` + +- **Responsive Behavior**: + - Statistics cards stack on mobile (1 column) + - Table becomes scrollable on smaller screens + - Action buttons adapt to mobile layout + +### 2. Event Summary Page + +Based on `upskillhvac.com_hce-event-summary__event_id=1662 (1).png`: + +- **Page Structure**: + - Breadcrumb navigation + - Event title with action buttons + - Event details section with 4 info cards + - Event description with formatted sections + - Transactions table + +- **Theme Integration**: + ```php + // Event details cards implementation example + echo '
'; + echo '
'; + echo '
'; + echo '

Date & Time

'; + // Card content + echo '
'; + echo '
'; + // Repeat for other cards + echo '
'; + ``` + +- **Typography**: + - Use theme's heading hierarchy: `

` for event title, `

` for main sections, `

` for subsections + - Follow theme's paragraph styling for descriptions + +### 3. Login Page + +Based on `upskillhvac.com_hce-login_.png`: + +- **Form Styling**: + - Center-aligned form on a card background + - Standard form field spacing + - Consistent button styling + +- **Theme Integration**: + - Use Astra's form styling classes + - Maintain consistent padding and margin with theme + +### 4. Modify Event Page + +Based on `upskillhvac.com_hce-modify-event__event_id=1662.png`: + +- **Form Structure**: + - Clearly labeled sections + - Logical grouping of related fields + - Consistent form element styling + +- **Theme Integration**: + - Use theme's form element styling + - Follow theme's spacing patterns + +## Responsive Design Guidelines + +1. **Breakpoints**: Use Astra theme's breakpoints: + - Mobile: < 544px + - Tablet: 544px - 921px + - Desktop: > 921px + +2. **Mobile Adaptations**: + - Cards stack vertically + - Tables become scrollable + - Form fields expand to full width + - Navigation adapts to mobile patterns + +3. **Testing across Devices**: + - Test on multiple screen sizes + - Verify theme's responsive behavior is maintained + - Ensure tap targets are appropriately sized on mobile + +## Theme Compatibility Testing + +1. **Visual Regression Testing**: + - Test across different screen sizes + - Compare against design references + - Verify consistent spacing and alignment + +2. **Plugin Compatibility**: + - Test with all active plugins: + - The Events Calendar suite + - Spectra Pro + - Essential Blocks + - Premium Starter Templates + +3. **Performance Testing**: + - Check load times with theme integration + - Monitor CSS specificity conflicts + - Test JavaScript interactions + +## Best Practices + +1. **CSS Approach**: + - Use theme's CSS variables when available + - Avoid overriding theme styles with `!important` + - Use the WordPress CSS specificity cascade appropriately + - Keep custom CSS minimal and targeted + +2. **JavaScript Integration**: + - Follow theme's JavaScript patterns and dependencies + - Initialize components after DOM is ready + - Use event delegation for dynamically loaded content + - Namespace custom JavaScript functions + +3. **Template Organization**: + - Keep templates modular and reusable + - Use get_template_part() for component reuse + - Follow Astra's naming conventions for consistency + +By following these guidelines, the implementation will maintain consistency with the existing WordPress theme while achieving the design goals shown in the reference screenshots. \ No newline at end of file diff --git a/wordpress-dev/Dockerfile b/wordpress-dev/Dockerfile index fa38b5c2..5c227c5d 100644 --- a/wordpress-dev/Dockerfile +++ b/wordpress-dev/Dockerfile @@ -1,28 +1,15 @@ -FROM php:7.4-fpm -WORKDIR /var/www/html +FROM wordpress:6.7.2-php8.1-fpm -# Install system dependencies -RUN apt-get update && \ - apt-get install -y \ - git \ - unzip \ - libpng-dev \ - libjpeg-dev \ - libpq-dev \ +# Install dependencies +RUN apt-get update && apt-get install -y \ + vim \ libzip-dev \ - mariadb-client \ - && docker-php-ext-configure gd --with-jpeg \ - && docker-php-ext-install -j$(nproc) gd mysqli pdo_mysql zip + procps \ + net-tools \ + && rm -rf /var/lib/apt/lists/* -# Install Composer -RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer +# Install PHP extensions +RUN docker-php-ext-install mysqli pdo pdo_mysql zip -# Copy composer files first to cache dependencies -COPY composer.json composer.lock ./ -RUN composer install --no-dev --no-scripts --no-autoloader - -# Copy remaining files -COPY . . - -# Finish composer setup -RUN composer dump-autoload --optimize \ No newline at end of file +# Verify PDO MySQL installation +RUN php -r "if (!extension_loaded('pdo_mysql')) { exit(1); }" \ No newline at end of file diff --git a/wordpress-dev/bin/run-tests.sh b/wordpress-dev/bin/run-tests.sh index d60305f6..a9a105d8 100755 --- a/wordpress-dev/bin/run-tests.sh +++ b/wordpress-dev/bin/run-tests.sh @@ -1,12 +1,13 @@ #!/bin/bash # Load environment variables -if [ ! -f ../.env ]; then +if [ ! -f ./.env ]; then echo "Error: .env file not found!" exit 1 fi -source ../.env +echo "Sourcing .env file from: $(pwd)/.env" +source ./.env # Colors for output GREEN='\033[0;32m' @@ -19,6 +20,7 @@ RUN_UNIT=false RUN_INTEGRATION=false RUN_E2E=false DEBUG=false +TEST_SUITE="" # Parse arguments while [[ $# -gt 0 ]]; do @@ -35,6 +37,11 @@ while [[ $# -gt 0 ]]; do RUN_E2E=true shift ;; + --login) + RUN_E2E=true + TEST_SUITE="login" + shift + ;; --debug) DEBUG=true shift @@ -87,5 +94,9 @@ fi # Run E2E tests if $RUN_E2E; then - run_tests "E2E" "npx playwright test --config=tests/e2e/playwright.config.ts" -fi \ No newline at end of file + if [ -n "$TEST_SUITE" ]; then + run_tests "E2E" "npx playwright test --config=tests/e2e/playwright.config.ts --grep @$TEST_SUITE" + else + run_tests "E2E" "npx playwright test --config=tests/e2e/playwright.config.ts" + fi +fi diff --git a/wordpress-dev/docker-compose.yml b/wordpress-dev/docker-compose.yml index a345437a..9a5d4391 100644 --- a/wordpress-dev/docker-compose.yml +++ b/wordpress-dev/docker-compose.yml @@ -31,11 +31,6 @@ services: - WORDPRESS_DB_NAME=${DEV_DB_NAME} - WORDPRESS_DEBUG=1 - O=${O:-} - - WORDPRESS_CONFIG_EXTRA=| - define('WP_DEBUG_LOG', true); - define('WP_DEBUG_DISPLAY', false); - define('SCRIPT_DEBUG', true); - define('FORCE_SSL_ADMIN', true); nginx: depends_on: diff --git a/wordpress-dev/package-lock.json b/wordpress-dev/package-lock.json new file mode 100644 index 00000000..5dc74a12 --- /dev/null +++ b/wordpress-dev/package-lock.json @@ -0,0 +1,30 @@ +{ + "name": "wordpress-dev", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "wordpress-dev", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "typescript": "^5.8.2" + } + }, + "node_modules/typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + } + } +} diff --git a/wordpress-dev/package.json b/wordpress-dev/package.json new file mode 100644 index 00000000..7dfbcf2b --- /dev/null +++ b/wordpress-dev/package.json @@ -0,0 +1,18 @@ +{ + "name": "wordpress-dev", + "version": "1.0.0", + "description": "**Status**: Active/Authoritative **Last Updated**: March 12, 2025 **Scope**: Development environment setup and configuration", + "main": "index.js", + "directories": { + "test": "tests" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "typescript": "^5.8.2" + } +} diff --git a/wordpress-dev/php-fpm.conf b/wordpress-dev/php-fpm.conf new file mode 100644 index 00000000..d2a34cdc --- /dev/null +++ b/wordpress-dev/php-fpm.conf @@ -0,0 +1,14 @@ +[www] +user = www-data +group = www-data +listen = 0.0.0.0:9000 +pm = dynamic +pm.max_children = 5 +pm.start_servers = 2 +pm.min_spare_servers = 1 +pm.max_spare_servers = 3 + +php_admin_value[error_log] = /proc/self/fd/2 +php_admin_flag[log_errors] = on +php_admin_value[post_max_size] = 64M +php_admin_value[upload_max_filesize] = 64M \ No newline at end of file diff --git a/wordpress-dev/php.ini/custom.ini b/wordpress-dev/php.ini/custom.ini new file mode 100644 index 00000000..aaec1023 --- /dev/null +++ b/wordpress-dev/php.ini/custom.ini @@ -0,0 +1,4 @@ +memory_limit = 256M +post_max_size = 64M +upload_max_filesize = 64M +max_execution_time = 300 diff --git a/wordpress-dev/playwright-report/index.html b/wordpress-dev/playwright-report/index.html new file mode 100644 index 00000000..c9a02d91 --- /dev/null +++ b/wordpress-dev/playwright-report/index.html @@ -0,0 +1,71 @@ + + + + + + + + + Playwright Test Report + + + + +
+ + + \ No newline at end of file diff --git a/wordpress-dev/tests/e2e/playwright.config.ts b/wordpress-dev/tests/e2e/playwright.config.ts new file mode 100644 index 00000000..06cad8d4 --- /dev/null +++ b/wordpress-dev/tests/e2e/playwright.config.ts @@ -0,0 +1,30 @@ +import type { PlaywrightTestConfig } from '@playwright/test'; + +const config: PlaywrightTestConfig = { + testDir: './tests', + timeout: 30000, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['list'], + ['html', { open: 'never' }], + ['junit', { outputFile: '../test-results/e2e-results.xml' }] + ], + use: { + baseURL: process.env.WORDPRESS_URL || 'http://localhost:8080', + trace: 'on-first-retry', + video: 'on-first-retry', + screenshot: 'only-on-failure' + }, + projects: [ + { + name: 'chromium', + use: { + browserName: 'chromium', + }, + }, + ], +}; + +export default config; \ No newline at end of file diff --git a/wordpress-dev/tests/e2e/tests/login.spec.ts b/wordpress-dev/tests/e2e/tests/login.spec.ts new file mode 100644 index 00000000..b5562e4c --- /dev/null +++ b/wordpress-dev/tests/e2e/tests/login.spec.ts @@ -0,0 +1,45 @@ +import { test, expect } from '@playwright/test'; + +test.describe('Login Functionality @login', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/hce-login'); + }); + + test('displays login form', async ({ page }) => { + await expect(page.locator('#trainer-login-form')).toBeVisible(); + await expect(page.locator('input[name="username"]')).toBeVisible(); + await expect(page.locator('input[name="password"]')).toBeVisible(); + await expect(page.locator('input[name="remember"]')).toBeVisible(); + await expect(page.locator('button[type="submit"]')).toBeVisible(); + }); + + test('shows error on invalid credentials', async ({ page }) => { + await page.fill('input[name="username"]', 'invalid@example.com'); + await page.fill('input[name="password"]', 'wrongpassword'); + await page.click('button[type="submit"]'); + + await expect(page.locator('#login-message')).toContainText('Invalid username or password'); + }); + + test('redirects to dashboard on successful login', async ({ page }) => { + await page.fill('input[name="username"]', process.env.WP_ADMIN_USER || 'devadmin'); + await page.fill('input[name="password"]', process.env.WP_ADMIN_PASSWORD || ''); + await page.click('button[type="submit"]'); + + await expect(page).toHaveURL(/.*trainer-dashboard/); + }); + + test('remembers login state', async ({ page, context }) => { + await page.fill('input[name="username"]', process.env.WP_ADMIN_USER || 'devadmin'); + await page.fill('input[name="password"]', process.env.WP_ADMIN_PASSWORD || ''); + await page.check('input[name="remember"]'); + await page.click('button[type="submit"]'); + + await expect(page).toHaveURL(/.*trainer-dashboard/); + + // Create a new page in the same context to verify persistent login + const newPage = await context.newPage(); + await newPage.goto('/trainer-dashboard'); + await expect(newPage).not.toHaveURL(/.*hce-login/); + }); +}); \ No newline at end of file diff --git a/wordpress-dev/tests/test-results/e2e-results.xml b/wordpress-dev/tests/test-results/e2e-results.xml new file mode 100644 index 00000000..05354065 --- /dev/null +++ b/wordpress-dev/tests/test-results/e2e-results.xml @@ -0,0 +1,120 @@ + + + + + { + 4 | test.beforeEach(async ({ page }) => { + > 5 | await page.goto('/hce-login'); + | ^ + 6 | }); + 7 | + 8 | test('displays login form', async ({ page }) => { + at /Users/ben/dev/upskill-event-manager/wordpress-dev/tests/e2e/tests/login.spec.ts:5:16 + + attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── + test-results/login-Login-Functionality-login-displays-login-form-chromium/test-failed-1.png + ──────────────────────────────────────────────────────────────────────────────────────────────── +]]> + + + + + + + + { + 4 | test.beforeEach(async ({ page }) => { + > 5 | await page.goto('/hce-login'); + | ^ + 6 | }); + 7 | + 8 | test('displays login form', async ({ page }) => { + at /Users/ben/dev/upskill-event-manager/wordpress-dev/tests/e2e/tests/login.spec.ts:5:16 + + attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── + test-results/login-Login-Functionality--5805a-rror-on-invalid-credentials-chromium/test-failed-1.png + ──────────────────────────────────────────────────────────────────────────────────────────────── +]]> + + + + + + + + { + 4 | test.beforeEach(async ({ page }) => { + > 5 | await page.goto('/hce-login'); + | ^ + 6 | }); + 7 | + 8 | test('displays login form', async ({ page }) => { + at /Users/ben/dev/upskill-event-manager/wordpress-dev/tests/e2e/tests/login.spec.ts:5:16 + + attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── + test-results/login-Login-Functionality--0d214-shboard-on-successful-login-chromium/test-failed-1.png + ──────────────────────────────────────────────────────────────────────────────────────────────── +]]> + + + + + + + + { + 4 | test.beforeEach(async ({ page }) => { + > 5 | await page.goto('/hce-login'); + | ^ + 6 | }); + 7 | + 8 | test('displays login form', async ({ page }) => { + at /Users/ben/dev/upskill-event-manager/wordpress-dev/tests/e2e/tests/login.spec.ts:5:16 + + attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── + test-results/login-Login-Functionality-login-remembers-login-state-chromium/test-failed-1.png + ──────────────────────────────────────────────────────────────────────────────────────────────── +]]> + + + + + + + \ No newline at end of file diff --git a/wordpress-dev/tsconfig.json b/wordpress-dev/tsconfig.json new file mode 100644 index 00000000..904d43ff --- /dev/null +++ b/wordpress-dev/tsconfig.json @@ -0,0 +1,113 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "libReplacement": true, /* Enable lib replacement. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "erasableSyntaxOnly": true, /* Do not allow runtime constructs that are not part of ECMAScript. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +}