diff --git a/.czvinylrc.yaml b/.czvinylrc.yaml index 63b84bcc..e5b033d7 100644 --- a/.czvinylrc.yaml +++ b/.czvinylrc.yaml @@ -1,4 +1,4 @@ -bodyFormat: "{body}\n\n\n[[{ticket_id}](https://contentful.atlassian.net/browse/{ticket_id})]" +bodyFormat: "{body}\n \n[[{ticket_id}](https://contentful.atlassian.net/browse/{ticket_id})]" headerFormat: '{emoji} {type}({scope}): {subject}' skipScope: false ticketIdQuestion: 'Enter the JIRA ID' diff --git a/.github/workflows/main-pipeline.yaml b/.github/workflows/main-pipeline.yaml index a790a254..e9ef1e28 100644 --- a/.github/workflows/main-pipeline.yaml +++ b/.github/workflows/main-pipeline.yaml @@ -1,7 +1,7 @@ name: Main Pipeline -# This is a pre-NX workflow. Everything is checked for format, linting and type safety. Everything -# also requires a build step before each kind of test. +# This is a pre-NX workflow. Packages are checked for format, linting, type safety and unit tests +# are run. # # NX integration and/or other optimizations will happen separately. @@ -112,12 +112,12 @@ jobs: path: node_modules key: ${{ runner.os }}-node-modules-pnpm-${{ hashFiles('pnpm-lock.yaml') }} - - run: pnpm build:all + - run: pnpm build type-check: name: Type Check ๐Ÿ”ท runs-on: ubuntu-latest - needs: build + needs: setup timeout-minutes: 15 steps: - uses: actions/checkout@v4 @@ -135,13 +135,12 @@ jobs: path: node_modules key: ${{ runner.os }}-node-modules-pnpm-${{ hashFiles('pnpm-lock.yaml') }} - - run: pnpm build:all - run: pnpm typecheck lint: name: Lint ๐ŸŽจ runs-on: ubuntu-latest - needs: build + needs: setup timeout-minutes: 15 steps: - uses: actions/checkout@v4 @@ -159,15 +158,39 @@ jobs: path: node_modules key: ${{ runner.os }}-node-modules-pnpm-${{ hashFiles('pnpm-lock.yaml') }} - - run: pnpm build:all - run: pnpm lint:check test: name: Test ๐Ÿงช runs-on: ubuntu-latest timeout-minutes: 15 - needs: build + needs: setup + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + + - uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + + - run: pnpm i + + - uses: actions/cache@v4 + with: + path: node_modules + key: ${{ runner.os }}-node-modules-pnpm-${{ hashFiles('pnpm-lock.yaml') }} + + - run: pnpm test:unit + + e2e: + name: E2E Test ๐Ÿ–ฅ๏ธ + runs-on: ubuntu-latest + timeout-minutes: 15 + needs: setup steps: + - uses: docker/setup-compose-action@v1 + - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 @@ -183,5 +206,5 @@ jobs: path: node_modules key: ${{ runner.os }}-node-modules-pnpm-${{ hashFiles('pnpm-lock.yaml') }} - - run: pnpm build:all - - run: pnpm test:unit:all + - run: pnpx playwright install --with-deps + - run: pnpm test:e2e diff --git a/implementations/node/tsconfig.json b/implementations/node/tsconfig.json index 91fb6be7..e7ce3263 100644 --- a/implementations/node/tsconfig.json +++ b/implementations/node/tsconfig.json @@ -1,10 +1,14 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "baseUrl": "./", "module": "CommonJS", "noEmit": false, - "outDir": "./dist" + "outDir": "./dist", + "paths": { + "@contentful/optimization-core": ["../../platforms/javascript/core/src/index.ts"], + "@contentful/optimization-node": ["../../platforms/javascript/node/src/index.ts"] + } }, "include": ["./e2e", "./src"] } diff --git a/implementations/node/vitest.config.ts b/implementations/node/vitest.config.ts index 1de6c98f..477a5d99 100644 --- a/implementations/node/vitest.config.ts +++ b/implementations/node/vitest.config.ts @@ -4,7 +4,14 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ resolve: { alias: { - '@contentful/optimization-node': path.resolve(__dirname, '../../platforms/javascript/node/'), + '@contentful/optimization-core': path.resolve( + __dirname, + '../../platforms/javascript/core/src/', + ), + '@contentful/optimization-node': path.resolve( + __dirname, + '../../platforms/javascript/node/src/', + ), }, }, test: { diff --git a/implementations/web-vanilla/package.json b/implementations/web-vanilla/package.json index 776efeb2..30a94eb1 100644 --- a/implementations/web-vanilla/package.json +++ b/implementations/web-vanilla/package.json @@ -5,10 +5,10 @@ "license": "MIT", "scripts": { "build": "pnpm clean; pnpm build:sdk", - "build:sdk": "pnpm --filter @contentful/optimization-web build && cp -r ../../platforms/javascript/web/dist ./public/dist", + "build:sdk": "pnpm --filter '../../platforms/javascript/(core|web)' build && cp -r ../../platforms/javascript/web/dist ./public/dist", "clean": "rimraf ./public/dist ./coverage ./playwright-report ./test-results tsconfig.tsbuildinfo", - "serve": "pnpm build && docker-compose up -d", - "serve:stop": "docker-compose down", + "serve": "pnpm build && docker compose up -d", + "serve:stop": "docker compose down", "test:e2e": "pnpm serve && playwright test; E2E_RESULT=$?; pnpm serve:stop; exit $E2E_RESULT", "test:e2e:codegen": "playwright codegen", "test:e2e:report": "playwright show-report", diff --git a/implementations/web-vanilla/tsconfig.json b/implementations/web-vanilla/tsconfig.json index f3bf676b..88c69345 100644 --- a/implementations/web-vanilla/tsconfig.json +++ b/implementations/web-vanilla/tsconfig.json @@ -1,9 +1,13 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "baseUrl": "./", "module": "CommonJS", - "outDir": "./dist" + "outDir": "./dist", + "paths": { + "@contentful/optimization-core": ["../../platforms/javascript/core/src/index.ts"], + "@contentful/optimization-web": ["../../platforms/javascript/web/src/index.ts"] + } }, - "include": ["./*.ts", "e2e/**/*", "e2e/**/*.json", "src/**/*", "src/**/*.json"] + "include": ["./*.ts", "./e2e", "./src/**/*", "./src/**/*.json"] } diff --git a/package.json b/package.json index 10b41d8c..bf10e056 100644 --- a/package.json +++ b/package.json @@ -6,15 +6,16 @@ "scripts": { "prepare": "husky", "build": "pnpm --filter @contentful/* build", - "build:all": "pnpm -r build", + "build:implementations": "pnpm --filter @implementation/* build", "clean": "pnpm -r --parallel clean", "docs:generate": "typedoc", "format:check": "prettier . --check", "format:fix": "prettier . --check --write", "lint:check": "eslint .", "lint:fix": "eslint . --fix", + "test:e2e": "pnpm --filter @implementation/* test:e2e", "test:unit": "pnpm --filter @contentful/* test:unit", - "test:unit:all": "pnpm -r test:unit", + "test:unit:implementations": "pnpm --filter @implementation/* test:unit", "typecheck": "pnpm -r typecheck", "version:node": "node -v", "version:pnpm": "pnpm -v" diff --git a/platforms/javascript/core/tsconfig.build.json b/platforms/javascript/core/tsconfig.build.json index ff153692..7457423e 100644 --- a/platforms/javascript/core/tsconfig.build.json +++ b/platforms/javascript/core/tsconfig.build.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { "baseUrl": "./src", "emitDeclarationOnly": true, @@ -7,5 +7,5 @@ "outDir": "dist", "rootDir": "./src" }, - "include": ["src/**/*", "src/**/*.json"] + "include": ["./src/**/*", "./src/**/*.json"] } diff --git a/platforms/javascript/core/tsconfig.json b/platforms/javascript/core/tsconfig.json index c1115f86..8eb42c10 100644 --- a/platforms/javascript/core/tsconfig.json +++ b/platforms/javascript/core/tsconfig.json @@ -1,8 +1,4 @@ { - "extends": "../../../tsconfig.json", - "compilerOptions": { - "baseUrl": ".", - "outDir": "dist" - }, - "include": ["./*.ts", "src/**/*", "src/**/*.json"] + "extends": "../../../tsconfig.base.json", + "include": ["./src/**/*", "./src/**/*.json"] } diff --git a/platforms/javascript/node/tsconfig.build.json b/platforms/javascript/node/tsconfig.build.json index ff153692..7457423e 100644 --- a/platforms/javascript/node/tsconfig.build.json +++ b/platforms/javascript/node/tsconfig.build.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { "baseUrl": "./src", "emitDeclarationOnly": true, @@ -7,5 +7,5 @@ "outDir": "dist", "rootDir": "./src" }, - "include": ["src/**/*", "src/**/*.json"] + "include": ["./src/**/*", "./src/**/*.json"] } diff --git a/platforms/javascript/node/tsconfig.json b/platforms/javascript/node/tsconfig.json index c1115f86..8eb42c10 100644 --- a/platforms/javascript/node/tsconfig.json +++ b/platforms/javascript/node/tsconfig.json @@ -1,8 +1,4 @@ { - "extends": "../../../tsconfig.json", - "compilerOptions": { - "baseUrl": ".", - "outDir": "dist" - }, - "include": ["./*.ts", "src/**/*", "src/**/*.json"] + "extends": "../../../tsconfig.base.json", + "include": ["./src/**/*", "./src/**/*.json"] } diff --git a/platforms/javascript/node/vitest.config.ts b/platforms/javascript/node/vitest.config.ts index 1f3cb01f..3043aa4c 100644 --- a/platforms/javascript/node/vitest.config.ts +++ b/platforms/javascript/node/vitest.config.ts @@ -4,7 +4,7 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ resolve: { alias: { - '@contentful/optimization-core': path.resolve(__dirname, '../core/dist/'), + '@contentful/optimization-core': path.resolve(__dirname, '../core/src/'), }, }, test: { diff --git a/platforms/javascript/web/tsconfig.build.json b/platforms/javascript/web/tsconfig.build.json index ff153692..7457423e 100644 --- a/platforms/javascript/web/tsconfig.build.json +++ b/platforms/javascript/web/tsconfig.build.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { "baseUrl": "./src", "emitDeclarationOnly": true, @@ -7,5 +7,5 @@ "outDir": "dist", "rootDir": "./src" }, - "include": ["src/**/*", "src/**/*.json"] + "include": ["./src/**/*", "./src/**/*.json"] } diff --git a/platforms/javascript/web/tsconfig.json b/platforms/javascript/web/tsconfig.json index c1115f86..8eb42c10 100644 --- a/platforms/javascript/web/tsconfig.json +++ b/platforms/javascript/web/tsconfig.json @@ -1,8 +1,4 @@ { - "extends": "../../../tsconfig.json", - "compilerOptions": { - "baseUrl": ".", - "outDir": "dist" - }, - "include": ["./*.ts", "src/**/*", "src/**/*.json"] + "extends": "../../../tsconfig.base.json", + "include": ["./src/**/*", "./src/**/*.json"] } diff --git a/platforms/javascript/web/vitest.config.ts b/platforms/javascript/web/vitest.config.ts index 1f3cb01f..3043aa4c 100644 --- a/platforms/javascript/web/vitest.config.ts +++ b/platforms/javascript/web/vitest.config.ts @@ -4,7 +4,7 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ resolve: { alias: { - '@contentful/optimization-core': path.resolve(__dirname, '../core/dist/'), + '@contentful/optimization-core': path.resolve(__dirname, '../core/src/'), }, }, test: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5229802a..a743d5f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -76,33 +76,6 @@ importers: specifier: ^3.2.4 version: 3.2.4(@types/node@24.0.15)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) - configs/rollup: - dependencies: - '@rollup/plugin-commonjs': - specifier: ^28.0.6 - version: 28.0.6(rollup@4.45.1) - '@rollup/plugin-node-resolve': - specifier: ^16.0.1 - version: 16.0.1(rollup@4.45.1) - '@rollup/plugin-swc': - specifier: ^0.4.0 - version: 0.4.0(@swc/core@1.13.1)(rollup@4.45.1) - '@rollup/plugin-terser': - specifier: ^0.4.4 - version: 0.4.4(rollup@4.45.1) - '@swc/core': - specifier: 'catalog:' - version: 1.13.1 - browserslist: - specifier: 'catalog:' - version: 4.25.1 - rollup: - specifier: ^4.44.1 - version: 4.45.1 - tslib: - specifier: 'catalog:' - version: 2.8.1 - implementations/node: dependencies: '@contentful/optimization-node': @@ -169,7 +142,7 @@ importers: devDependencies: '@config/rollup-config': specifier: workspace:* - version: link:../../../configs/rollup + version: link:../../../rollup '@vitest/coverage-v8': specifier: 'catalog:' version: 3.2.4(vitest@3.2.4(@types/node@24.0.15)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) @@ -198,7 +171,7 @@ importers: devDependencies: '@config/rollup-config': specifier: workspace:* - version: link:../../../configs/rollup + version: link:../../../rollup '@vitest/coverage-v8': specifier: 'catalog:' version: 3.2.4(vitest@3.2.4(@types/node@24.0.15)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) @@ -227,7 +200,7 @@ importers: devDependencies: '@config/rollup-config': specifier: workspace:* - version: link:../../../configs/rollup + version: link:../../../rollup '@vitest/coverage-v8': specifier: 'catalog:' version: 3.2.4(vitest@3.2.4(@types/node@24.0.15)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) @@ -248,6 +221,33 @@ importers: version: 3.2.4(@types/node@24.0.15)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) publishDirectory: dist + rollup: + dependencies: + '@rollup/plugin-commonjs': + specifier: ^28.0.6 + version: 28.0.6(rollup@4.45.1) + '@rollup/plugin-node-resolve': + specifier: ^16.0.1 + version: 16.0.1(rollup@4.45.1) + '@rollup/plugin-swc': + specifier: ^0.4.0 + version: 0.4.0(@swc/core@1.13.1)(rollup@4.45.1) + '@rollup/plugin-terser': + specifier: ^0.4.4 + version: 0.4.4(rollup@4.45.1) + '@swc/core': + specifier: 'catalog:' + version: 1.13.1 + browserslist: + specifier: 'catalog:' + version: 4.25.1 + rollup: + specifier: ^4.44.1 + version: 4.45.1 + tslib: + specifier: 'catalog:' + version: 2.8.1 + packages: '@ampproject/remapping@2.3.0': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 9b6f0843..07256569 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,7 +1,7 @@ packages: - - configs/* - implementations/* - platforms/javascript/* + - rollup catalog: '@playwright/test': ^1.54.0 diff --git a/configs/rollup/index.mjs b/rollup/index.mjs similarity index 100% rename from configs/rollup/index.mjs rename to rollup/index.mjs diff --git a/configs/rollup/package.json b/rollup/package.json similarity index 100% rename from configs/rollup/package.json rename to rollup/package.json diff --git a/configs/rollup/swcrc.json b/rollup/swcrc.json similarity index 100% rename from configs/rollup/swcrc.json rename to rollup/swcrc.json diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 00000000..599d4836 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "allowJs": true, + "declaration": true, + "declarationMap": true, + "emitDecoratorMetadata": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "importHelpers": true, + "isolatedModules": true, + "jsx": "react", + "lib": ["dom", "esnext"], + "module": "esnext", + "moduleResolution": "node", + "noEmit": true, + "paths": { + "@contentful/optimization-core": ["./platforms/javascript/core/src/index.ts"], + "@contentful/optimization-node": ["./platforms/javascript/node/src/index.ts"], + "@contentful/optimization-web": ["./platforms/javascript/web/src/index.ts"] + }, + "removeComments": false, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "es2020", + "types": ["vitest/globals"] + } +} diff --git a/tsconfig.json b/tsconfig.json index 9d23305f..de76929d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,25 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "declaration": true, - "declarationMap": true, - "emitDecoratorMetadata": true, - "esModuleInterop": true, - "experimentalDecorators": true, - "importHelpers": true, - "isolatedModules": true, - "jsx": "react", - "lib": ["dom", "esnext"], - "module": "esnext", - "moduleResolution": "node", - "noEmit": true, - "removeComments": false, - "resolveJsonModule": true, - "skipLibCheck": true, - "sourceMap": true, - "strict": true, - "target": "es2020", - "types": ["vitest/globals"] - }, + "extends": "./tsconfig.base.json", "exclude": ["**/dist", "**/node_modules"] }