diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 81d1812cba..6664162628 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1403,6 +1403,9 @@ importers: eslint-plugin-qunit: specifier: ^7.3.1 version: 7.3.4(eslint@7.32.0) + js-reporters: + specifier: ^2.1.0 + version: 2.1.0 loader.js: specifier: ^4.7.0 version: 4.7.0 @@ -1412,6 +1415,9 @@ importers: prettier: specifier: ^2.7.1 version: 2.8.8 + puppeteer-chromium-resolver: + specifier: ^21.0.0 + version: 21.0.0 qunit: specifier: ^2.19.1 version: 2.20.1 @@ -1759,7 +1765,7 @@ importers: version: /ember-data@4.12.5(@babel/core@7.23.9)(@ember/string@3.1.1)(ember-source@3.28.12)(webpack@5.90.3) ember-data-beta: specifier: npm:ember-data@beta - version: /ember-data@5.4.0-beta.2(@babel/core@7.23.9)(@ember/string@3.1.1)(ember-source@3.28.12) + version: /ember-data@5.4.0-beta.4(@babel/core@7.23.9)(@ember/string@3.1.1)(ember-source@3.28.12) ember-data-latest: specifier: npm:ember-data@5.3.0 version: /ember-data@5.3.0(@babel/core@7.23.9)(@ember/string@3.1.1)(ember-source@3.28.12) @@ -1783,13 +1789,13 @@ importers: version: /ember-source@4.4.5(@babel/core@7.23.9)(webpack@5.90.3) ember-source-beta: specifier: npm:ember-source@beta - version: /ember-source@5.7.0-beta.2(@babel/core@7.23.9)(webpack@5.90.3) + version: /ember-source@5.8.0-beta.1(@babel/core@7.23.9)(webpack@5.90.3) ember-source-canary: specifier: https://s3.amazonaws.com/builds.emberjs.com/canary/shas/370cf34f9e86df17b880f11fef35a5a0f24ff38a.tgz version: '@s3.amazonaws.com/builds.emberjs.com/canary/shas/370cf34f9e86df17b880f11fef35a5a0f24ff38a.tgz(@babel/core@7.23.9)(webpack@5.90.3)' ember-source-latest: specifier: npm:ember-source@latest - version: /ember-source@5.6.0(@babel/core@7.23.9)(webpack@5.90.3) + version: /ember-source@5.7.0(@babel/core@7.23.9)(webpack@5.90.3) ember-truth-helpers: specifier: ^3.0.0 version: 3.1.1 @@ -1931,12 +1937,18 @@ importers: eslint-plugin-n: specifier: ^16.1.0 version: 16.6.2(eslint@8.57.0) + js-reporters: + specifier: ^2.1.0 + version: 2.1.0 loader.js: specifier: ^4.7.0 version: 4.7.0 prettier: specifier: ^3.0.3 version: 3.2.5 + puppeteer-chromium-resolver: + specifier: ^21.0.0 + version: 21.0.0 qunit: specifier: ^2.19.4 version: 2.20.1 @@ -2299,7 +2311,7 @@ packages: resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} @@ -2416,7 +2428,7 @@ packages: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} @@ -2454,7 +2466,7 @@ packages: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} @@ -2514,7 +2526,7 @@ packages: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} @@ -2540,7 +2552,7 @@ packages: dependencies: '@babel/helper-function-name': 7.23.0 '@babel/template': 7.23.9 - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helpers@7.23.9: resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} @@ -4623,20 +4635,22 @@ packages: - supports-color dev: true - /@ember-data/adapter@5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/legacy-compat@5.4.0-beta.2)(@ember-data/store@5.4.0-beta.2)(@ember/string@3.1.1)(ember-inflector@4.0.2): - resolution: {integrity: sha512-Pj7CP2panjidHiqw4n08h/0S1rmE3GvZ/5AtomO70fl27AZyaNrY8OxZb4DsMv9yzxX9OH/74g4L76xhVeXcrQ==} + /@ember-data/adapter@5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/legacy-compat@5.4.0-beta.4)(@ember-data/store@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4)(ember-inflector@4.0.2): + resolution: {integrity: sha512-9aLhRSGXuR6BkNImaE60LmZ2JCKhGOl8XXvPbuXjnREOPmy1vyVSvuG/cx7VjaI+Ni+O8cE3i5r9cYQX2YOOfQ==} engines: {node: '>= 18.19.1'} peerDependencies: - '@ember-data/legacy-compat': 5.4.0-beta.2 - '@ember-data/store': 5.4.0-beta.2 + '@ember-data/legacy-compat': 5.4.0-beta.4 + '@ember-data/store': 5.4.0-beta.4 '@ember/string': ^3.1.1 + '@warp-drive/core-types': 0.0.0-beta.4 ember-inflector: ^4.0.2 dependencies: - '@ember-data/legacy-compat': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.2)(@ember-data/json-api@5.4.0-beta.2)(@ember-data/request@5.4.0-beta.2)(@ember-data/store@5.4.0-beta.2)(@warp-drive/core-types@0.0.0-beta.2) - '@ember-data/private-build-infra': 5.4.0-beta.2 - '@ember-data/store': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.2)(@ember-data/tracking@5.4.0-beta.2)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.2) + '@ember-data/legacy-compat': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.4)(@ember-data/json-api@5.4.0-beta.4)(@ember-data/request@5.4.0-beta.4)(@ember-data/store@5.4.0-beta.4)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/private-build-infra': 5.4.0-beta.4 + '@ember-data/store': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.4)(@ember-data/tracking@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4) '@ember/string': 3.1.1 '@embroider/macros': 1.13.5(@glint/template@1.3.0) + '@warp-drive/core-types': 0.0.0-beta.4(@babel/core@7.23.9) ember-cli-babel: 8.2.0(@babel/core@7.23.9) ember-cli-test-info: 1.0.0 ember-inflector: 4.0.2 @@ -4692,19 +4706,21 @@ packages: - webpack-cli dev: true - /@ember-data/debug@5.4.0-beta.2(@ember-data/store@5.4.0-beta.2)(@ember/string@3.1.1): - resolution: {integrity: sha512-72J08ZUJrab0MDQPIQSZCrlf337pGZ9Dlh0XwABm18F+9nJF3FF632xVipaF4/eE0gOvd4v4GS1DnK1OZ2jofA==} + /@ember-data/debug@5.4.0-beta.4(@ember-data/store@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4): + resolution: {integrity: sha512-JmHu5KcOrS0K65yOcctJ1UwHxpFd/nGivFKUd5M3Rr211WY7g3j0OsvnEIb4YQOnzPP24MfhCcvKrkCe7+4R0w==} engines: {node: '>= 18.19.1'} peerDependencies: - '@ember-data/store': 5.4.0-beta.2 + '@ember-data/store': 5.4.0-beta.4 '@ember/string': ^3.1.1 + '@warp-drive/core-types': 0.0.0-beta.4 dependencies: '@babel/core': 7.24.4 - '@ember-data/private-build-infra': 5.4.0-beta.2 - '@ember-data/store': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.2)(@ember-data/tracking@5.4.0-beta.2)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.2) + '@ember-data/private-build-infra': 5.4.0-beta.4 + '@ember-data/store': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.4)(@ember-data/tracking@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4) '@ember/edition-utils': 1.2.0 '@ember/string': 3.1.1 '@embroider/macros': 1.13.5(@glint/template@1.3.0) + '@warp-drive/core-types': 0.0.0-beta.4(@babel/core@7.23.9) ember-auto-import: 2.7.2(@glint/template@1.3.0)(webpack@5.90.3) ember-cli-babel: 8.2.0(@babel/core@7.24.4) pnpm-sync-dependencies-meta-injected: 0.0.10 @@ -4751,18 +4767,18 @@ packages: - supports-color dev: true - /@ember-data/graph@5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/store@5.4.0-beta.2)(@warp-drive/core-types@0.0.0-beta.2): - resolution: {integrity: sha512-wwSrkw1T1y4KFzacHUQOijwB6v4E+46Zo0MUjI4B0zVRY6G5JzAyklR97w7qILPqGvwImD6oWARgcdhTBIrxaA==} + /@ember-data/graph@5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/store@5.4.0-beta.4)(@warp-drive/core-types@0.0.0-beta.4): + resolution: {integrity: sha512-o8lhP8tVXlEFW7xrZopF/nUHGpC4wEJ7rLKBHR5HEqGJDuYDF8e1l0q/vYLcoSrRrXMxeKSSNyARKlhW+qy24Q==} engines: {node: '>= 18.19.1'} peerDependencies: - '@ember-data/store': 5.4.0-beta.2 - '@warp-drive/core-types': 0.0.0-beta.2 + '@ember-data/store': 5.4.0-beta.4 + '@warp-drive/core-types': 0.0.0-beta.4 dependencies: - '@ember-data/private-build-infra': 5.4.0-beta.2 - '@ember-data/store': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.2)(@ember-data/tracking@5.4.0-beta.2)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.2) + '@ember-data/private-build-infra': 5.4.0-beta.4 + '@ember-data/store': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.4)(@ember-data/tracking@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4) '@ember/edition-utils': 1.2.0 '@embroider/macros': 1.13.5(@glint/template@1.3.0) - '@warp-drive/core-types': 0.0.0-beta.2(@babel/core@7.23.9) + '@warp-drive/core-types': 0.0.0-beta.4(@babel/core@7.23.9) ember-cli-babel: 8.2.0(@babel/core@7.23.9) pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: @@ -4812,26 +4828,26 @@ packages: - supports-color dev: true - /@ember-data/json-api@5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.2)(@ember-data/request-utils@5.4.0-beta.2)(@ember-data/store@5.4.0-beta.2)(@warp-drive/core-types@0.0.0-beta.2)(ember-inflector@4.0.2): - resolution: {integrity: sha512-vqj7sEPKG42c6DFJK0wu9wbtWHJDwCqVfQBMje+WXN/C0EjcuWEkKXXMCcl8tMbn0wJXeL81gNAiVnaLGDNZ+Q==} + /@ember-data/json-api@5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.4)(@ember-data/request-utils@5.4.0-beta.4)(@ember-data/store@5.4.0-beta.4)(@warp-drive/core-types@0.0.0-beta.4)(ember-inflector@4.0.2): + resolution: {integrity: sha512-Mtb1YQPRuNJYP59M99BozN9FtCpFJJtNZ1+ttRVqqLHgPrnZFy3Ol1tkRLDsXa2s8zfdawiqeohMbTam3CG4Kw==} engines: {node: '>= 18.19.1'} peerDependencies: - '@ember-data/graph': 5.4.0-beta.2 - '@ember-data/request-utils': 5.4.0-beta.2 - '@ember-data/store': 5.4.0-beta.2 - '@warp-drive/core-types': 0.0.0-beta.2 + '@ember-data/graph': 5.4.0-beta.4 + '@ember-data/request-utils': 5.4.0-beta.4 + '@ember-data/store': 5.4.0-beta.4 + '@warp-drive/core-types': 0.0.0-beta.4 ember-inflector: ^4.0.2 peerDependenciesMeta: '@ember-data/request-utils': optional: true dependencies: - '@ember-data/graph': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/store@5.4.0-beta.2)(@warp-drive/core-types@0.0.0-beta.2) - '@ember-data/private-build-infra': 5.4.0-beta.2 - '@ember-data/request-utils': 5.4.0-beta.2(@babel/core@7.23.9)(@warp-drive/core-types@0.0.0-beta.2) - '@ember-data/store': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.2)(@ember-data/tracking@5.4.0-beta.2)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.2) + '@ember-data/graph': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/store@5.4.0-beta.4)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/private-build-infra': 5.4.0-beta.4 + '@ember-data/request-utils': 5.4.0-beta.4(@babel/core@7.23.9)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/store': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.4)(@ember-data/tracking@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4) '@ember/edition-utils': 1.2.0 '@embroider/macros': 1.13.5(@glint/template@1.3.0) - '@warp-drive/core-types': 0.0.0-beta.2(@babel/core@7.23.9) + '@warp-drive/core-types': 0.0.0-beta.4(@babel/core@7.23.9) ember-cli-babel: 8.2.0(@babel/core@7.23.9) ember-inflector: 4.0.2 pnpm-sync-dependencies-meta-injected: 0.0.10 @@ -4888,28 +4904,28 @@ packages: - supports-color dev: true - /@ember-data/legacy-compat@5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.2)(@ember-data/json-api@5.4.0-beta.2)(@ember-data/request@5.4.0-beta.2)(@ember-data/store@5.4.0-beta.2)(@warp-drive/core-types@0.0.0-beta.2): - resolution: {integrity: sha512-Ke1lpkw8ZqAB0xpbQW/J5hSmrzW/S4hAII0XesoZPAcNnXUtJv1RgNhsxMAkl3DvIq0mdZ0fCx+6rDI5zGAeCw==} + /@ember-data/legacy-compat@5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.4)(@ember-data/json-api@5.4.0-beta.4)(@ember-data/request@5.4.0-beta.4)(@ember-data/store@5.4.0-beta.4)(@warp-drive/core-types@0.0.0-beta.4): + resolution: {integrity: sha512-uaqRkA8ad704rTfoKjkfdUC4PW+//SlCS0V8GwKnaClBqZ2+JaWzdeXK5V1HMLnsHhV9XdaAOREIbWNMli7V3A==} engines: {node: '>= 18.19.1'} peerDependencies: - '@ember-data/graph': 5.4.0-beta.2 - '@ember-data/json-api': 5.4.0-beta.2 - '@ember-data/request': 5.4.0-beta.2 - '@ember-data/store': 5.4.0-beta.2 - '@warp-drive/core-types': 0.0.0-beta.2 + '@ember-data/graph': 5.4.0-beta.4 + '@ember-data/json-api': 5.4.0-beta.4 + '@ember-data/request': 5.4.0-beta.4 + '@ember-data/store': 5.4.0-beta.4 + '@warp-drive/core-types': 0.0.0-beta.4 peerDependenciesMeta: '@ember-data/graph': optional: true '@ember-data/json-api': optional: true dependencies: - '@ember-data/graph': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/store@5.4.0-beta.2)(@warp-drive/core-types@0.0.0-beta.2) - '@ember-data/json-api': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.2)(@ember-data/request-utils@5.4.0-beta.2)(@ember-data/store@5.4.0-beta.2)(@warp-drive/core-types@0.0.0-beta.2)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': 5.4.0-beta.2 - '@ember-data/request': 5.4.0-beta.2(@babel/core@7.23.9)(@warp-drive/core-types@0.0.0-beta.2) - '@ember-data/store': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.2)(@ember-data/tracking@5.4.0-beta.2)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.2) + '@ember-data/graph': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/store@5.4.0-beta.4)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/json-api': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.4)(@ember-data/request-utils@5.4.0-beta.4)(@ember-data/store@5.4.0-beta.4)(@warp-drive/core-types@0.0.0-beta.4)(ember-inflector@4.0.2) + '@ember-data/private-build-infra': 5.4.0-beta.4 + '@ember-data/request': 5.4.0-beta.4(@babel/core@7.23.9)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/store': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.4)(@ember-data/tracking@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4) '@embroider/macros': 1.13.5(@glint/template@1.3.0) - '@warp-drive/core-types': 0.0.0-beta.2(@babel/core@7.23.9) + '@warp-drive/core-types': 0.0.0-beta.4(@babel/core@7.23.9) ember-cli-babel: 8.2.0(@babel/core@7.23.9) pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: @@ -5004,18 +5020,18 @@ packages: - supports-color dev: true - /@ember-data/model@5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/debug@5.4.0-beta.2)(@ember-data/graph@5.4.0-beta.2)(@ember-data/json-api@5.4.0-beta.2)(@ember-data/legacy-compat@5.4.0-beta.2)(@ember-data/store@5.4.0-beta.2)(@ember-data/tracking@5.4.0-beta.2)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.2)(ember-inflector@4.0.2): - resolution: {integrity: sha512-fJfWGz1ZnVGLeVXO1E9mq8540W9iOxvUJhr8wNxoKHGBGA0WBoIiQ86xx/poeRnuqAIiaO/aKwDiV8fuyQhyFQ==} + /@ember-data/model@5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/debug@5.4.0-beta.4)(@ember-data/graph@5.4.0-beta.4)(@ember-data/json-api@5.4.0-beta.4)(@ember-data/legacy-compat@5.4.0-beta.4)(@ember-data/store@5.4.0-beta.4)(@ember-data/tracking@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4)(ember-inflector@4.0.2): + resolution: {integrity: sha512-Q7LOq1tkrJ1iAJQtdZy4F374ZNlzlTHqwkU5WYbzVjpyqJiWuI709wLeHK63fqnmTfivGn7yQ6vnwY+ro9KCFg==} engines: {node: '>= 18.19.1'} peerDependencies: - '@ember-data/debug': 5.4.0-beta.2 - '@ember-data/graph': 5.4.0-beta.2 - '@ember-data/json-api': 5.4.0-beta.2 - '@ember-data/legacy-compat': 5.4.0-beta.2 - '@ember-data/store': 5.4.0-beta.2 - '@ember-data/tracking': 5.4.0-beta.2 + '@ember-data/debug': 5.4.0-beta.4 + '@ember-data/graph': 5.4.0-beta.4 + '@ember-data/json-api': 5.4.0-beta.4 + '@ember-data/legacy-compat': 5.4.0-beta.4 + '@ember-data/store': 5.4.0-beta.4 + '@ember-data/tracking': 5.4.0-beta.4 '@ember/string': ^3.1.1 - '@warp-drive/core-types': 0.0.0-beta.2 + '@warp-drive/core-types': 0.0.0-beta.4 ember-inflector: ^4.0.2 peerDependenciesMeta: '@ember-data/debug': @@ -5025,17 +5041,17 @@ packages: '@ember-data/json-api': optional: true dependencies: - '@ember-data/debug': 5.4.0-beta.2(@ember-data/store@5.4.0-beta.2)(@ember/string@3.1.1) - '@ember-data/graph': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/store@5.4.0-beta.2)(@warp-drive/core-types@0.0.0-beta.2) - '@ember-data/json-api': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.2)(@ember-data/request-utils@5.4.0-beta.2)(@ember-data/store@5.4.0-beta.2)(@warp-drive/core-types@0.0.0-beta.2)(ember-inflector@4.0.2) - '@ember-data/legacy-compat': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.2)(@ember-data/json-api@5.4.0-beta.2)(@ember-data/request@5.4.0-beta.2)(@ember-data/store@5.4.0-beta.2)(@warp-drive/core-types@0.0.0-beta.2) - '@ember-data/private-build-infra': 5.4.0-beta.2 - '@ember-data/store': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.2)(@ember-data/tracking@5.4.0-beta.2)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.2) - '@ember-data/tracking': 5.4.0-beta.2(@babel/core@7.23.9)(ember-source@3.28.12) + '@ember-data/debug': 5.4.0-beta.4(@ember-data/store@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/graph': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/store@5.4.0-beta.4)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/json-api': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.4)(@ember-data/request-utils@5.4.0-beta.4)(@ember-data/store@5.4.0-beta.4)(@warp-drive/core-types@0.0.0-beta.4)(ember-inflector@4.0.2) + '@ember-data/legacy-compat': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.4)(@ember-data/json-api@5.4.0-beta.4)(@ember-data/request@5.4.0-beta.4)(@ember-data/store@5.4.0-beta.4)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/private-build-infra': 5.4.0-beta.4 + '@ember-data/store': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.4)(@ember-data/tracking@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/tracking': 5.4.0-beta.4(@babel/core@7.23.9)(ember-source@3.28.12) '@ember/edition-utils': 1.2.0 '@ember/string': 3.1.1 '@embroider/macros': 1.13.5(@glint/template@1.3.0) - '@warp-drive/core-types': 0.0.0-beta.2(@babel/core@7.23.9) + '@warp-drive/core-types': 0.0.0-beta.4(@babel/core@7.23.9) ember-cli-babel: 8.2.0(@babel/core@7.23.9) ember-cli-string-utils: 1.1.0 ember-cli-test-info: 1.0.0 @@ -5113,8 +5129,8 @@ packages: - supports-color dev: true - /@ember-data/private-build-infra@5.4.0-beta.2: - resolution: {integrity: sha512-ax8cMP4eyUFzKS0Yz6ZcNYJ49xBIw1fuMvSvR+S/sb/7TRjGTqm47HwTQB3m/1NQABOzkf7mjmoARhhCiLVRxQ==} + /@ember-data/private-build-infra@5.4.0-beta.4: + resolution: {integrity: sha512-xUh/YhgdNuWHgi2Y/9mmc53CnEw8bpXLpPoM+Rpdf6UTWbxLBBUXpwZqU43j+7K30MMt0+HwnRneu6YvFA0bMA==} engines: {node: '>= 18.19.1'} dependencies: '@babel/core': 7.24.4 @@ -5155,13 +5171,13 @@ packages: - supports-color dev: true - /@ember-data/request-utils@5.4.0-beta.2(@babel/core@7.23.9)(@warp-drive/core-types@0.0.0-beta.2): - resolution: {integrity: sha512-UKQATOYbLdK5HQAy5LbojIAaMRaWGwS8ARzSf/5o3Z0Fj9jRFxb4e/wWRBZceFTpyAL8PsGbsmIODTMPNaqHXg==} + /@ember-data/request-utils@5.4.0-beta.4(@babel/core@7.23.9)(@warp-drive/core-types@0.0.0-beta.4): + resolution: {integrity: sha512-7JrIoK358kefQz+JvPksgxRAJbfKT9116bel495cAWbr3X6C6uZz5FhmIx7Y3WQWfnTynbPXCJhOEyJ+eEgRvw==} engines: {node: '>= 18.19.1'} peerDependencies: - '@warp-drive/core-types': 0.0.0-beta.2 + '@warp-drive/core-types': 0.0.0-beta.4 dependencies: - '@warp-drive/core-types': 0.0.0-beta.2(@babel/core@7.23.9) + '@warp-drive/core-types': 0.0.0-beta.4(@babel/core@7.23.9) ember-cli-babel: 8.2.0(@babel/core@7.23.9) pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: @@ -5196,16 +5212,16 @@ packages: - supports-color dev: true - /@ember-data/request@5.4.0-beta.2(@babel/core@7.23.9)(@warp-drive/core-types@0.0.0-beta.2): - resolution: {integrity: sha512-85X1bjXaw8Di7EzOGERJ+vdsi5Hus92/Ga9gbuaWAlgFzRdSXu37hJE4268tetCCk14aQVWVBS/Cd5T2ZbwkbQ==} + /@ember-data/request@5.4.0-beta.4(@babel/core@7.23.9)(@warp-drive/core-types@0.0.0-beta.4): + resolution: {integrity: sha512-pnua6aHUTnToAg/cRbYX3qRs+2lUTE+hSrLGJN5dWGbfuIroBkOuhj1yQsHw3YieEWc/aC5k/Uoll2XiSHvtWg==} engines: {node: '>= 18.19.1'} peerDependencies: - '@warp-drive/core-types': 0.0.0-beta.2 + '@warp-drive/core-types': 0.0.0-beta.4 dependencies: - '@ember-data/private-build-infra': 5.4.0-beta.2 + '@ember-data/private-build-infra': 5.4.0-beta.4 '@ember/test-waiters': 3.1.0 '@embroider/macros': 1.13.5(@glint/template@1.3.0) - '@warp-drive/core-types': 0.0.0-beta.2(@babel/core@7.23.9) + '@warp-drive/core-types': 0.0.0-beta.4(@babel/core@7.23.9) ember-cli-babel: 8.2.0(@babel/core@7.23.9) pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: @@ -5256,18 +5272,18 @@ packages: - supports-color dev: true - /@ember-data/serializer@5.4.0-beta.2(@babel/core@7.23.9)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.2)(ember-inflector@4.0.2): - resolution: {integrity: sha512-HxwuJFm856MtNyCV5dWhimr9QoOi2fokYyq2bADzbxPSDE3Ap2IpQHI0lzHmeR6r8t28upvStc1be8otPpiZpg==} + /@ember-data/serializer@5.4.0-beta.4(@babel/core@7.23.9)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4)(ember-inflector@4.0.2): + resolution: {integrity: sha512-mFIt53D6zVTgRrhHpHGDCEgJOQE68sxybZ+Rd+3CBHOoYA9WKvuJQOosnCFtAFQiy544fGJXvtMyflbhz1MytA==} engines: {node: '>= 18.19.1'} peerDependencies: '@ember/string': ^3.1.1 - '@warp-drive/core-types': 0.0.0-beta.2 + '@warp-drive/core-types': 0.0.0-beta.4 ember-inflector: ^4.0.2 dependencies: - '@ember-data/private-build-infra': 5.4.0-beta.2 + '@ember-data/private-build-infra': 5.4.0-beta.4 '@ember/string': 3.1.1 '@embroider/macros': 1.13.5(@glint/template@1.3.0) - '@warp-drive/core-types': 0.0.0-beta.2(@babel/core@7.23.9) + '@warp-drive/core-types': 0.0.0-beta.4(@babel/core@7.23.9) ember-cli-babel: 8.2.0(@babel/core@7.23.9) ember-cli-test-info: 1.0.0 ember-inflector: 4.0.2 @@ -5337,21 +5353,21 @@ packages: - supports-color dev: true - /@ember-data/store@5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.2)(@ember-data/tracking@5.4.0-beta.2)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.2): - resolution: {integrity: sha512-oHoFJJzTEG4PBKU6KiZOFQIRi9PkDd9Bs6Bbkkwnm8z+M8qfB28is/ZkS8gB35kKHlXACK+LkE/GEBzZpKUTJw==} + /@ember-data/store@5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.4)(@ember-data/tracking@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4): + resolution: {integrity: sha512-dikCOoKS0JqYrCg1og2Sf812tbHpagRYli368WTHuA3gdOeMgVG7oxi48kdMbs6Z5j94Jx8Rc9HFOBIVpZD0eA==} engines: {node: '>= 18.19.1'} peerDependencies: - '@ember-data/request': 5.4.0-beta.2 - '@ember-data/tracking': 5.4.0-beta.2 + '@ember-data/request': 5.4.0-beta.4 + '@ember-data/tracking': 5.4.0-beta.4 '@ember/string': ^3.1.1 - '@warp-drive/core-types': 0.0.0-beta.2 + '@warp-drive/core-types': 0.0.0-beta.4 dependencies: - '@ember-data/private-build-infra': 5.4.0-beta.2 - '@ember-data/request': 5.4.0-beta.2(@babel/core@7.23.9)(@warp-drive/core-types@0.0.0-beta.2) - '@ember-data/tracking': 5.4.0-beta.2(@babel/core@7.23.9)(ember-source@3.28.12) + '@ember-data/private-build-infra': 5.4.0-beta.4 + '@ember-data/request': 5.4.0-beta.4(@babel/core@7.23.9)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/tracking': 5.4.0-beta.4(@babel/core@7.23.9)(ember-source@3.28.12) '@ember/string': 3.1.1 '@embroider/macros': 1.13.5(@glint/template@1.3.0) - '@warp-drive/core-types': 0.0.0-beta.2(@babel/core@7.23.9) + '@warp-drive/core-types': 0.0.0-beta.4(@babel/core@7.23.9) ember-cli-babel: 8.2.0(@babel/core@7.23.9) pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: @@ -5385,11 +5401,11 @@ packages: - supports-color dev: true - /@ember-data/tracking@5.4.0-beta.2(@babel/core@7.23.9)(ember-source@3.28.12): - resolution: {integrity: sha512-RnSTk+0kIJreI9nKuEJnRvm2tQ5eujEtuTXDDAZZarHb7J79eFvBZtOP6joQY22l2GxhdNW3IPVydo8y+fo2qA==} + /@ember-data/tracking@5.4.0-beta.4(@babel/core@7.23.9)(ember-source@3.28.12): + resolution: {integrity: sha512-04e1oxjPalptCyWG/jcBLqHyTxP+yPeRvDjGzOw83tbNBpEr4SXZIgmX9XHhWGc4m8fveTpRU5YkoxN7GJuoqQ==} engines: {node: '>= 18.19.1'} dependencies: - '@ember-data/private-build-infra': 5.4.0-beta.2 + '@ember-data/private-build-infra': 5.4.0-beta.4 '@embroider/macros': 1.13.5(@glint/template@1.3.0) ember-cached-decorator-polyfill: 1.0.2(@babel/core@7.23.9)(ember-source@3.28.12) ember-cli-babel: 8.2.0(@babel/core@7.23.9) @@ -6716,17 +6732,6 @@ packages: '@simple-dom/interface': 1.4.0 dev: true - /@glimmer/compiler@0.85.13: - resolution: {integrity: sha512-To8a+yScHAHE9/PpwuHyz2yYTBM2+m1Z6l4B9A6LgjkKeu0K7plv2c03V9JpsA3mMJBROJ1mfxOUuQsvTidEkg==} - engines: {node: '>= 16.0.0'} - dependencies: - '@glimmer/interfaces': 0.85.13 - '@glimmer/syntax': 0.85.13 - '@glimmer/util': 0.85.13 - '@glimmer/vm': 0.85.13 - '@glimmer/wire-format': 0.85.13 - dev: true - /@glimmer/compiler@0.87.1: resolution: {integrity: sha512-7qXrOv55cH/YW+Vs4dFkNJsNXAW/jP+7kZLhKcH8wCduPfBCQxb9HNh1lBESuFej2rCks6h9I1qXeZHkc/oWxQ==} engines: {node: '>= 16.0.0'} @@ -6783,14 +6788,6 @@ packages: - supports-color dev: true - /@glimmer/debug@0.85.13: - resolution: {integrity: sha512-BguKA6RXbCskyRHfJn+Tm/z0aBwefgYQ4RFz/0lVqYB3lJz8Oo02SDrtHQTwBMC9x/nF9GVA//60R4P47aryWg==} - dependencies: - '@glimmer/interfaces': 0.85.13 - '@glimmer/util': 0.85.13 - '@glimmer/vm': 0.85.13 - dev: true - /@glimmer/debug@0.87.1: resolution: {integrity: sha512-rja9/Hofv1NEjIqp8P2eQuHY3+orlS3BL4fbFyvrE+Pw4lRwQPLm6UdgCMHZGGe9yweZAGvNVH6CimDBq7biwA==} dependencies: @@ -6808,15 +6805,6 @@ packages: '@glimmer/util': 0.84.2 dev: true - /@glimmer/destroyable@0.85.13: - resolution: {integrity: sha512-fE3bhjDAzYsYQ+rm1qlu+6kP8f0CClHYynp1CWhskDc+qM0Jt7Up08htZK8/Ttaw7RXgi43Fe7FrQtOMUlrVlg==} - dependencies: - '@glimmer/env': 0.1.7 - '@glimmer/global-context': 0.85.13 - '@glimmer/interfaces': 0.85.13 - '@glimmer/util': 0.85.13 - dev: true - /@glimmer/destroyable@0.87.1: resolution: {integrity: sha512-v9kdMq/FCSMcXK4gIKxPCSEcYXjDAnapKVY2o9fCgqky+mbpd0XuGoxaXa35nFwDk69L/9/8B3vXQOpa6ThikA==} dependencies: @@ -6837,13 +6825,6 @@ packages: '@glimmer/vm': 0.84.2 dev: true - /@glimmer/encoder@0.85.13: - resolution: {integrity: sha512-GukVAeHxDAucbiExjl8lV8BYQXTkV2Co8IXnX5vKaomcZ+fwudGmvzbo2myq+WZ1llqnkZ45DVcqa9BVh9eNWg==} - dependencies: - '@glimmer/interfaces': 0.85.13 - '@glimmer/vm': 0.85.13 - dev: true - /@glimmer/encoder@0.87.1: resolution: {integrity: sha512-5oZEkdtYcAbkiWuXFQ8ofSEGH5uzqi86WK9/IXb7Qn4t6o7ixadWk8nhtORRpVS1u4FpAjhsAysnzRFoNqJwbQ==} dependencies: @@ -6872,10 +6853,6 @@ packages: '@glimmer/env': 0.1.7 dev: true - /@glimmer/global-context@0.85.13: - resolution: {integrity: sha512-JY/TQ+9dyukQVuTwKlF3jVXaWUwxx676KtclYf6SphtJQu2/mysxqj9XIAowOahhi9m7E7hzHkxAl9bm2FXXjQ==} - dev: true - /@glimmer/global-context@0.87.1: resolution: {integrity: sha512-Mitr7pBeVDTplFWlohyzxWLpFll7ffMZN+fnkBmUj8HiDLbD790Lb8lR9B2nL3t4RGnh6W9kDkCnZB+hvDm/eQ==} dev: true @@ -6897,12 +6874,6 @@ packages: dependencies: '@simple-dom/interface': 1.4.0 - /@glimmer/interfaces@0.85.13: - resolution: {integrity: sha512-qOEdvFgCQX1g+Gfi/nA2zbKYPmEkEbhFgzZ5esgmlQNOSQx4j8nyGiBvnG/vepHrh4wUzTvIynrCQpfr3SiKXg==} - dependencies: - '@simple-dom/interface': 1.4.0 - dev: true - /@glimmer/interfaces@0.87.1: resolution: {integrity: sha512-2lbwLY4Bt9i2SvwT4hhY0TgEYKhOMQBgYvRiraq2BYHwO8iLKh3lC8iO3d+rQ3VgDtQ9i/sP6HG848VNRyVHxA==} dependencies: @@ -6931,20 +6902,6 @@ packages: '@glimmer/validator': 0.84.2 dev: true - /@glimmer/manager@0.85.13: - resolution: {integrity: sha512-HwJoD9qAVPQ6hHNMUFTvQtJi5NIO1JzOT0kauyln754G6ggT07IFmi+b1R4WeJJJndZpuR3Ad4PS4usRnI89Zw==} - dependencies: - '@glimmer/debug': 0.85.13 - '@glimmer/destroyable': 0.85.13 - '@glimmer/env': 0.1.7 - '@glimmer/global-context': 0.85.13 - '@glimmer/interfaces': 0.85.13 - '@glimmer/reference': 0.85.13 - '@glimmer/util': 0.85.13 - '@glimmer/validator': 0.85.13 - '@glimmer/vm': 0.85.13 - dev: true - /@glimmer/manager@0.87.1: resolution: {integrity: sha512-jEUZZQWcuxKg+Ri/A1HGURm9pBrx13JDHx1djYCnPo96yjtQFYxEG0VcwLq2EtAEpFrekwfO1b6m3JZiFqmtGg==} dependencies: @@ -6969,15 +6926,6 @@ packages: '@simple-dom/interface': 1.4.0 dev: true - /@glimmer/node@0.85.13: - resolution: {integrity: sha512-Lb/0zPoucm8hQ/qd6A8RYgdoLSC5tulZJ7LahAq1/bpG42vJyQMGYBjxVL2ffQv+Yxao/nEQxUP5ssoLXS+gvw==} - dependencies: - '@glimmer/interfaces': 0.85.13 - '@glimmer/runtime': 0.85.13 - '@glimmer/util': 0.85.13 - '@simple-dom/document': 1.4.0 - dev: true - /@glimmer/node@0.87.1: resolution: {integrity: sha512-peESyArA08Va9f3gpBnhO+RNkK4Oe0Q8sMPQILCloAukNe2+DQOhTvDgVjRUKmVXMJCWoSgmJtxkiB3ZE193vw==} dependencies: @@ -6999,21 +6947,6 @@ packages: '@glimmer/wire-format': 0.84.2 dev: true - /@glimmer/opcode-compiler@0.85.13: - resolution: {integrity: sha512-EySW/IsMoO+lWW2TC31zsHqanST/5lTGoZOrB9zy7FmiUaPGD0RxeOEBU8rTRHzYxNzoJAsX7l3Hv6Y0y2ABZg==} - dependencies: - '@glimmer/debug': 0.85.13 - '@glimmer/encoder': 0.85.13 - '@glimmer/env': 0.1.7 - '@glimmer/global-context': 0.85.13 - '@glimmer/interfaces': 0.85.13 - '@glimmer/manager': 0.85.13 - '@glimmer/reference': 0.85.13 - '@glimmer/util': 0.85.13 - '@glimmer/vm': 0.85.13 - '@glimmer/wire-format': 0.85.13 - dev: true - /@glimmer/opcode-compiler@0.87.1: resolution: {integrity: sha512-D9OFrH3CrGNXfGtgcVWvu3xofpQZPoYFkqj3RrcDwnsSIYPSqUYTIOO6dwpxTbPlzkASidq0B2htXK7WkCERVw==} dependencies: @@ -7035,12 +6968,6 @@ packages: '@glimmer/util': 0.84.2 dev: true - /@glimmer/owner@0.85.13: - resolution: {integrity: sha512-4FhMR9qHuKu7sZIIsulqBvzP9UWYFtjxzF+eQ5cxmr+0uxjJN8/rZbRG8vPbJs3OoV2k+vHj4BYhLyflSjRaZw==} - dependencies: - '@glimmer/util': 0.85.13 - dev: true - /@glimmer/owner@0.87.1: resolution: {integrity: sha512-ayYjznPMSGpgygNT7XlTXeel6Cl/fafm4WJeRRgdPxG1EZMjKPlfpfAyNzf9peEIlW3WMbPu3RAIYrf54aThWQ==} dependencies: @@ -7058,19 +6985,6 @@ packages: '@glimmer/util': 0.84.2 dev: true - /@glimmer/program@0.85.13: - resolution: {integrity: sha512-E+89jmD+52fB2/HqeOW2vim1x8wNTkpfPpzsGeVFlyZHxBaMR95zw1+rgl2aE1pyRoZR3csL4qSBaJb26Sp6Pw==} - dependencies: - '@glimmer/encoder': 0.85.13 - '@glimmer/env': 0.1.7 - '@glimmer/interfaces': 0.85.13 - '@glimmer/manager': 0.85.13 - '@glimmer/opcode-compiler': 0.85.13 - '@glimmer/util': 0.85.13 - '@glimmer/vm': 0.85.13 - '@glimmer/wire-format': 0.85.13 - dev: true - /@glimmer/program@0.87.1: resolution: {integrity: sha512-+r1Dz5Da0zyYwBhPmqoXiw3qmDamqqhVmSCtJLLcZ6exXXC2ZjGoNdynfos80A91dx+PFqYgHg+5lfa5STT9iQ==} dependencies: @@ -7114,16 +7028,6 @@ packages: '@glimmer/validator': 0.84.3 dev: true - /@glimmer/reference@0.85.13: - resolution: {integrity: sha512-rkMlY6RUkwZwfO7fQodKQw5WOLCKNZPkVAloaVJSqpyKjHRNjMaD3TZhfNmlGIVdNgVRRsOWSWdTL5CUUzDlwQ==} - dependencies: - '@glimmer/env': 0.1.7 - '@glimmer/global-context': 0.85.13 - '@glimmer/interfaces': 0.85.13 - '@glimmer/util': 0.85.13 - '@glimmer/validator': 0.85.13 - dev: true - /@glimmer/reference@0.87.1: resolution: {integrity: sha512-KJwKYDnds6amsmVB1YxmFhJGI/TNCNmsFBWKUH8K0odmiggUCjt3AwUoOKztkwh3xxy/jpq+5AahIuV+uBgW7A==} dependencies: @@ -7152,23 +7056,6 @@ packages: '@simple-dom/interface': 1.4.0 dev: true - /@glimmer/runtime@0.85.13: - resolution: {integrity: sha512-jum5u2mX0WOAAF3L0pVZ/AOAMjJRKfGIqcStUYldmnf/xCFucKsh2WzSBS5KxlHDt4OGs00GflkpoTZkqPnCmg==} - dependencies: - '@glimmer/destroyable': 0.85.13 - '@glimmer/env': 0.1.7 - '@glimmer/global-context': 0.85.13 - '@glimmer/interfaces': 0.85.13 - '@glimmer/manager': 0.85.13 - '@glimmer/owner': 0.85.13 - '@glimmer/program': 0.85.13 - '@glimmer/reference': 0.85.13 - '@glimmer/util': 0.85.13 - '@glimmer/validator': 0.85.13 - '@glimmer/vm': 0.85.13 - '@glimmer/wire-format': 0.85.13 - dev: true - /@glimmer/runtime@0.87.1: resolution: {integrity: sha512-7QBONxRFesnHzelCiUahZjRj3nhbUxPg0F+iD+3rALrXaWfB1pkhngMTK2DYEmsJ7kq04qVzwBnTSrqsmLzOTg==} dependencies: @@ -7212,16 +7099,6 @@ packages: '@handlebars/parser': 2.0.0 simple-html-tokenizer: 0.5.11 - /@glimmer/syntax@0.85.13: - resolution: {integrity: sha512-zMGkJh6JcHdCTx1emmBbhBrGO04gqD6CS5khmDwSJCIpVHnGH0Ejxp9rpnSMc5IW71/hFoQY6RlMgVYF2hrHhA==} - dependencies: - '@glimmer/interfaces': 0.85.13 - '@glimmer/util': 0.85.13 - '@glimmer/wire-format': 0.85.13 - '@handlebars/parser': 2.0.0 - simple-html-tokenizer: 0.5.11 - dev: true - /@glimmer/syntax@0.87.1: resolution: {integrity: sha512-zYzZT6LgpSF0iv5iuxmMV5Pf52aE8dukNC2KfrHC6gXJfM4eLZMZcyk76NW5m+SEetZSOXX6AWv/KwLnoxiMfQ==} dependencies: @@ -7275,13 +7152,6 @@ packages: '@glimmer/interfaces': 0.84.3 '@simple-dom/interface': 1.4.0 - /@glimmer/util@0.85.13: - resolution: {integrity: sha512-ogj65iukNKEPPqQ2bOD6CLsqxsFwmiGvTQbAsg1eh1MoPjxhNZMpLsT5CdQ10XE7yUALHGJ71SwxBSpAOGDmxg==} - dependencies: - '@glimmer/env': 0.1.7 - '@glimmer/interfaces': 0.85.13 - dev: true - /@glimmer/util@0.87.1: resolution: {integrity: sha512-Duxi2JutaIewfIWp8PJl7U5n12yasKWtZFHNLSrg+C8TKeMXdRyJtI7uqtqg0Z/6F9JwdJe/IPhTvdsTTfzAuA==} dependencies: @@ -7321,15 +7191,6 @@ packages: '@glimmer/global-context': 0.84.3 dev: true - /@glimmer/validator@0.85.13: - resolution: {integrity: sha512-vWSHpYq1gbnssxwyW0t7JrSbfZj8jZUAUdqp9bymHZOgru7QZn0mYCuJbfYDvF9pzsTQ+i0zZBMxZRHeAWbasQ==} - dependencies: - '@glimmer/env': 0.1.7 - '@glimmer/global-context': 0.85.13 - '@glimmer/interfaces': 0.85.13 - '@glimmer/util': 0.85.13 - dev: true - /@glimmer/validator@0.87.1: resolution: {integrity: sha512-GqzULgK9m2QPfPswhyV30tZmsUegowv9Tyfz2l15cLDFX9L5GcEORpzKXjR0TzCplffuqOC1g8rnMaPsP55apw==} dependencies: @@ -7386,15 +7247,6 @@ packages: - '@babel/core' dev: true - /@glimmer/vm-babel-plugins@0.85.13(@babel/core@7.23.9): - resolution: {integrity: sha512-B5R+t7o0Dlfz7GYu6liQ/GERAq/Fb775KZJeEaIwX2odJDKyIfOU+m/bLHpoVevY4V/x+qB8tVCA4Nv5LXu3Kg==} - engines: {node: '>=16'} - dependencies: - babel-plugin-debug-macros: 0.3.4(@babel/core@7.23.9) - transitivePeerDependencies: - - '@babel/core' - dev: true - /@glimmer/vm-babel-plugins@0.87.1(@babel/core@7.23.9): resolution: {integrity: sha512-VbhYHa+HfGFiTIOOkvFuYPwBTaDvWTAR1Q55RI25JI6Nno0duBLB3UVRTDgHM+iOfbgRN7OSR5XCe/C5X5C5LA==} engines: {node: '>=16'} @@ -7411,13 +7263,6 @@ packages: '@glimmer/util': 0.84.2 dev: true - /@glimmer/vm@0.85.13: - resolution: {integrity: sha512-x/FwTAFnoIzu/TzJYuqWI1rWoIJUthKZ6n37q5Nr8TVoFqOVXk7q9k53etcAhxLEwBjX/cox6i1FxCuv5vpc8Q==} - dependencies: - '@glimmer/interfaces': 0.85.13 - '@glimmer/util': 0.85.13 - dev: true - /@glimmer/vm@0.87.1: resolution: {integrity: sha512-JSFr85ASZmuN4H72px7GHtnW79PPRHpqHw6O/6UUZd+ocwWHy+nG9JGbo8kntvqN5xP0SdCipjv/c0u7nkc8tg==} dependencies: @@ -7432,13 +7277,6 @@ packages: '@glimmer/util': 0.84.2 dev: true - /@glimmer/wire-format@0.85.13: - resolution: {integrity: sha512-q6bHPfjSYE9jH27L75lUzyhSpBA+iONzsJVXewdwO4GdYYCC4s+pfUaJg7ZYNFDcHDuVKUcLhBb/NICDzMA5Uw==} - dependencies: - '@glimmer/interfaces': 0.85.13 - '@glimmer/util': 0.85.13 - dev: true - /@glimmer/wire-format@0.87.1: resolution: {integrity: sha512-O3W1HDfRGX7wHZqvP8UzI/nWyZ2GIMFolU7l6WcLGU9HIdzqfxsc7ae2Icob/fq2kV9meHti4yDEdTMlBVK9AQ==} dependencies: @@ -9531,11 +9369,11 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@warp-drive/core-types@0.0.0-beta.2(@babel/core@7.23.9): - resolution: {integrity: sha512-ZU0NkN8Cr1o6qdMQ81h/G4PzP+cO46+XADMWSrLIf9jJlkYWWjG55i1Bcur0W++YiZCBGdI2IU5wMb3uTlYW5A==} + /@warp-drive/core-types@0.0.0-beta.4(@babel/core@7.23.9): + resolution: {integrity: sha512-DDvcM6FkJEw74RyAqfD0TZatJgYBfk9+J+dSrczFhpnJP9S2+uyu1fCoXePlTRUfssWTVzYwz1vGNFN61sJqBQ==} engines: {node: '>= 18.19.1'} dependencies: - '@ember-data/private-build-infra': 5.4.0-beta.2 + '@ember-data/private-build-infra': 5.4.0-beta.4 ember-cli-babel: 8.2.0(@babel/core@7.23.9) pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: @@ -10572,7 +10410,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.23.9 - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.5 dev: true @@ -15316,28 +15154,28 @@ packages: - webpack-cli dev: true - /ember-data@5.4.0-beta.2(@babel/core@7.23.9)(@ember/string@3.1.1)(ember-source@3.28.12): - resolution: {integrity: sha512-9qPnF9V9TB7NBITL9r7QZhFISwXe19kPQgluIzIu+Zq/YhQBKlWlocwuRMjlqy1lDFm24O9e16fn/LW4PgLxNQ==} + /ember-data@5.4.0-beta.4(@babel/core@7.23.9)(@ember/string@3.1.1)(ember-source@3.28.12): + resolution: {integrity: sha512-YyV/sR6bCVvp6QHBc7SNGWixkL9KjmP6HUF1grTZLpbBIRGkC1Q+oj0dSwnFiDBIE1dBceou/+u9c8vvD7aRVQ==} engines: {node: '>= 18.19.1'} peerDependencies: '@ember/string': ^3.1.1 dependencies: - '@ember-data/adapter': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/legacy-compat@5.4.0-beta.2)(@ember-data/store@5.4.0-beta.2)(@ember/string@3.1.1)(ember-inflector@4.0.2) - '@ember-data/debug': 5.4.0-beta.2(@ember-data/store@5.4.0-beta.2)(@ember/string@3.1.1) - '@ember-data/graph': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/store@5.4.0-beta.2)(@warp-drive/core-types@0.0.0-beta.2) - '@ember-data/json-api': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.2)(@ember-data/request-utils@5.4.0-beta.2)(@ember-data/store@5.4.0-beta.2)(@warp-drive/core-types@0.0.0-beta.2)(ember-inflector@4.0.2) - '@ember-data/legacy-compat': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.2)(@ember-data/json-api@5.4.0-beta.2)(@ember-data/request@5.4.0-beta.2)(@ember-data/store@5.4.0-beta.2)(@warp-drive/core-types@0.0.0-beta.2) - '@ember-data/model': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/debug@5.4.0-beta.2)(@ember-data/graph@5.4.0-beta.2)(@ember-data/json-api@5.4.0-beta.2)(@ember-data/legacy-compat@5.4.0-beta.2)(@ember-data/store@5.4.0-beta.2)(@ember-data/tracking@5.4.0-beta.2)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.2)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': 5.4.0-beta.2 - '@ember-data/request': 5.4.0-beta.2(@babel/core@7.23.9)(@warp-drive/core-types@0.0.0-beta.2) - '@ember-data/request-utils': 5.4.0-beta.2(@babel/core@7.23.9)(@warp-drive/core-types@0.0.0-beta.2) - '@ember-data/serializer': 5.4.0-beta.2(@babel/core@7.23.9)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.2)(ember-inflector@4.0.2) - '@ember-data/store': 5.4.0-beta.2(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.2)(@ember-data/tracking@5.4.0-beta.2)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.2) - '@ember-data/tracking': 5.4.0-beta.2(@babel/core@7.23.9)(ember-source@3.28.12) + '@ember-data/adapter': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/legacy-compat@5.4.0-beta.4)(@ember-data/store@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4)(ember-inflector@4.0.2) + '@ember-data/debug': 5.4.0-beta.4(@ember-data/store@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/graph': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/store@5.4.0-beta.4)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/json-api': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.4)(@ember-data/request-utils@5.4.0-beta.4)(@ember-data/store@5.4.0-beta.4)(@warp-drive/core-types@0.0.0-beta.4)(ember-inflector@4.0.2) + '@ember-data/legacy-compat': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/graph@5.4.0-beta.4)(@ember-data/json-api@5.4.0-beta.4)(@ember-data/request@5.4.0-beta.4)(@ember-data/store@5.4.0-beta.4)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/model': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/debug@5.4.0-beta.4)(@ember-data/graph@5.4.0-beta.4)(@ember-data/json-api@5.4.0-beta.4)(@ember-data/legacy-compat@5.4.0-beta.4)(@ember-data/store@5.4.0-beta.4)(@ember-data/tracking@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4)(ember-inflector@4.0.2) + '@ember-data/private-build-infra': 5.4.0-beta.4 + '@ember-data/request': 5.4.0-beta.4(@babel/core@7.23.9)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/request-utils': 5.4.0-beta.4(@babel/core@7.23.9)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/serializer': 5.4.0-beta.4(@babel/core@7.23.9)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4)(ember-inflector@4.0.2) + '@ember-data/store': 5.4.0-beta.4(@babel/core@7.23.9)(@ember-data/request@5.4.0-beta.4)(@ember-data/tracking@5.4.0-beta.4)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-beta.4) + '@ember-data/tracking': 5.4.0-beta.4(@babel/core@7.23.9)(ember-source@3.28.12) '@ember/edition-utils': 1.2.0 '@ember/string': 3.1.1 '@embroider/macros': 1.13.5(@glint/template@1.3.0) - '@warp-drive/core-types': 0.0.0-beta.2(@babel/core@7.23.9) + '@warp-drive/core-types': 0.0.0-beta.4(@babel/core@7.23.9) broccoli-merge-trees: 4.2.0 ember-auto-import: 2.7.2(@glint/template@1.3.0)(webpack@5.90.3) ember-cli-babel: 8.2.0(@babel/core@7.23.9) @@ -16340,30 +16178,30 @@ packages: - webpack dev: true - /ember-source@5.6.0(@babel/core@7.23.9)(webpack@5.90.3): - resolution: {integrity: sha512-dtxi3cVPT4/+NyhA+a+4UL/i+ut4Fuu3uJAgkVqrN1XlK4TXpyVp9I6VbH7DjD5+LJdF1+UqIn8GJ50dIdoH2Q==} + /ember-source@5.7.0(@babel/core@7.23.9)(webpack@5.90.3): + resolution: {integrity: sha512-iOZVyxLBzGewEThDDsNRZ9y02SNH42PWSPC9U4O94pew7ktld3IpIODCDjLCtKWn2zAGM9DhWTMrXz27HI1UKw==} engines: {node: '>= 16.*'} dependencies: '@babel/helper-module-imports': 7.22.15 '@ember/edition-utils': 1.2.0 - '@glimmer/compiler': 0.85.13 + '@glimmer/compiler': 0.87.1 '@glimmer/component': 1.1.2(@babel/core@7.23.9) - '@glimmer/destroyable': 0.85.13 + '@glimmer/destroyable': 0.87.1 '@glimmer/env': 0.1.7 - '@glimmer/global-context': 0.85.13 - '@glimmer/interfaces': 0.85.13 - '@glimmer/manager': 0.85.13 - '@glimmer/node': 0.85.13 - '@glimmer/opcode-compiler': 0.85.13 - '@glimmer/owner': 0.85.13 - '@glimmer/program': 0.85.13 - '@glimmer/reference': 0.85.13 - '@glimmer/runtime': 0.85.13 - '@glimmer/syntax': 0.85.13 - '@glimmer/util': 0.85.13 - '@glimmer/validator': 0.85.13 - '@glimmer/vm': 0.85.13 - '@glimmer/vm-babel-plugins': 0.85.13(@babel/core@7.23.9) + '@glimmer/global-context': 0.87.1 + '@glimmer/interfaces': 0.87.1 + '@glimmer/manager': 0.87.1 + '@glimmer/node': 0.87.1 + '@glimmer/opcode-compiler': 0.87.1 + '@glimmer/owner': 0.87.1 + '@glimmer/program': 0.87.1 + '@glimmer/reference': 0.87.1 + '@glimmer/runtime': 0.87.1 + '@glimmer/syntax': 0.87.1 + '@glimmer/util': 0.87.1 + '@glimmer/validator': 0.87.1 + '@glimmer/vm': 0.87.1 + '@glimmer/vm-babel-plugins': 0.87.1(@babel/core@7.23.9) '@simple-dom/interface': 1.4.0 babel-plugin-debug-macros: 0.3.4(@babel/core@7.23.9) babel-plugin-ember-template-compilation: 2.2.1 @@ -16460,8 +16298,8 @@ packages: - webpack dev: true - /ember-source@5.7.0-beta.2(@babel/core@7.23.9)(webpack@5.90.3): - resolution: {integrity: sha512-Ep/oOmkYhtV/xv4lhqH+XucU6ioKEcaR7BWzaCGzjG2S4ly+yJwfm8hwticBFGGpDxxm4WZrSABvwe87SHA5zQ==} + /ember-source@5.8.0-beta.1(@babel/core@7.23.9)(webpack@5.90.3): + resolution: {integrity: sha512-UxvbEu7is7rl797D4SybwFOy+O6PeXNcN/IKSHcBAc4SGOoUQZ+UNFHZveWedX5SdYbnN/miziDD3lmo2rzCQg==} engines: {node: '>= 16.*'} dependencies: '@babel/helper-module-imports': 7.22.15 @@ -20291,10 +20129,10 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.24.4 - '@babel/generator': 7.23.6 + '@babel/generator': 7.24.4 '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.4) '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.4) - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -23408,6 +23246,7 @@ packages: /right-pad@1.0.1: resolution: {integrity: sha512-bYBjgxmkvTAfgIYy328fmkwhp39v8lwVgWhhrzxPV3yHtcSqyYKe9/XOhvW48UFjATg3VuJbpsp5822ACNvkmw==} engines: {node: '>= 0.10'} + deprecated: Please use String.prototype.padEnd() over this package. dev: true /rimraf@2.6.3: @@ -25373,7 +25212,7 @@ packages: resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: - browserslist: ^4.14.0 + browserslist: '>= 4.21.0' dependencies: browserslist: 4.23.0 escalade: 3.1.2 diff --git a/tests/addon-template/package.json b/tests/addon-template/package.json index 24fd0436ef..92a290e5e9 100644 --- a/tests/addon-template/package.json +++ b/tests/addon-template/package.json @@ -22,8 +22,9 @@ "lint:js": "eslint . --cache", "lint:js:fix": "eslint . --fix", "start": "ember serve", - "test": "vite build --mode test && ember test --path dist", - "test:ember": "vite build --mode test && ember test --path dist", + "test": "node ./scripts/run-tests.mjs", + "test:dist": "vite build --mode test && ember test --path dist", + "test:ember": "node ./scripts/run-tests.mjs", "test:ember-compatibility": "ember try:each" }, "dependencies": { @@ -31,6 +32,8 @@ "ember-cli-htmlbars": "^6.1.0" }, "devDependencies": { + "puppeteer-chromium-resolver": "^21.0.0", + "js-reporters": "^2.1.0", "@babel/core": "^7.19.3", "@ember/optional-features": "^2.0.0", "@ember/string": "^3.1.1", diff --git a/tests/addon-template/scripts/run-tests.mjs b/tests/addon-template/scripts/run-tests.mjs new file mode 100644 index 0000000000..808c66a9f3 --- /dev/null +++ b/tests/addon-template/scripts/run-tests.mjs @@ -0,0 +1,133 @@ +import child from "child_process"; +import { resolve } from "path"; +import PCR from "puppeteer-chromium-resolver"; + +const __root = process.cwd(); + +async function run() { + // eslint-disable-next-line new-cap + const { puppeteer, executablePath } = await PCR({}); + console.log("[ci] starting"); + + await /** @type {Promise} */ ( + new Promise((fulfill) => { + const runvite = child.fork( + resolve(__root, "node_modules", "vite", "bin", "vite.js"), + ["--port", "60173", "--no-open", '--force'], + { + stdio: "pipe", + } + ); + + process.on("exit", () => runvite.kill()); + + runvite.stderr.on("data", (data) => { + console.log("stderr", String(data)); + }); + + runvite.stdout.on("data", (data) => { + const chunk = String(data); + console.log("stdout", chunk); + if (chunk.includes("Local") && chunk.includes("60173")) { + fulfill(1); + } + }); + + console.log("[ci] spawning"); + }) + ); + + console.log("[ci] spawned"); + + const browser = await puppeteer.launch({ + headless: "new", + executablePath, + args: ["--no-sandbox", "--disable-setuid-sandbox"], + }); + + console.log("[ci] puppeteer launched"); + + let unOptimizedDeps = []; + + const result = await /** @type {Promise} */ ( + // eslint-disable-next-line no-async-promise-executor + new Promise(async (fulfill) => { + const page = await browser.newPage(); + + page.on("pageerror", (msg) => { + console.error(msg); + fulfill(1); + }); + + function logRequest(interceptedRequest) { + const url = interceptedRequest.url(); + const allow = [ + "vite/dist/client/env.mjs", + "@babel+runtime", + ".css", + "@embroider/macros", + "ember-source/ember/index.js", + ]; + + function importerAllowedUnoptimized(importer) { + // virtual modules can contain the rewritten-app location + if (allow.some((a) => url.includes(a))) { + return true; + } + return !!( + importer.includes("node_modules") && + !importer.includes("rewritten-app") + ); + } + + if ( + url.includes("node_modules") && + !url.includes("rewritten-app") && + !url.includes(".vite/deps") && + !url.includes("embroider_virtual") && + !importerAllowedUnoptimized(interceptedRequest.initiator().url) + ) { + console.error( + "url does not use optimized dep", + url, + interceptedRequest.initiator() + ); + unOptimizedDeps.push(url); + } + } + page.on("request", logRequest); + + page.on("console", (msg) => { + const text = msg.text(); + const location = msg.location(); + if (text.includes("HARNESS")) { + try { + const parsed = JSON.parse(text); + if (parsed.type === "[HARNESS] done") { + return fulfill(parsed.failed > 0 ? 1 : 0); + } + } catch (e) {} + } + if (location.url?.includes(`/qunit.js`)) { + console.log(text); + } else { + console.debug(text); + } + }); + + await page.goto("http://localhost:60173/tests/?hidepassed&ci"); + }) + ); + + await browser.close(); + + if (unOptimizedDeps.length) { + console.error("unoptimized deps detected"); + process.exit(1); + return; + } + + process.exit(result); +} + +run(); diff --git a/tests/addon-template/tests/setup-harness.js b/tests/addon-template/tests/setup-harness.js new file mode 100644 index 0000000000..afcaa2fb85 --- /dev/null +++ b/tests/addon-template/tests/setup-harness.js @@ -0,0 +1,34 @@ +import { autoRegister } from 'js-reporters'; +import QUnit from 'qunit'; + +export function setupQunit() { + if (hasFlag('ci')) { + const runner = autoRegister(); + const tap = QUnit.reporters.tap; + tap.init(runner, { log: console.info }); + + QUnit.config.urlConfig.push({ + id: 'smoke_tests', + label: 'Enable Smoke Tests', + tooltip: 'Enable Smoke Tests', + }); + + QUnit.config.urlConfig.push({ + id: 'ci', + label: 'Enable CI Mode', + tooltip: + 'CI mode makes tests run faster by sacrificing UI responsiveness', + }); + + console.log(`[HARNESS] ci=${hasFlag('ci')}`); + } + + QUnit.done((details) => { + console.log(JSON.stringify({ ...details, type: '[HARNESS] done' })); + }); +} + +function hasFlag(flag) { + let location = typeof window !== 'undefined' && window.location; + return location && new RegExp(`[?&]${flag}`).test(location.search); +} diff --git a/tests/addon-template/tests/test-helper.js b/tests/addon-template/tests/test-helper.js index 4efd6e58ae..ac044c63e8 100644 --- a/tests/addon-template/tests/test-helper.js +++ b/tests/addon-template/tests/test-helper.js @@ -4,9 +4,12 @@ import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; import { setup } from 'qunit-dom'; import { start } from 'ember-qunit'; +import { setupQunit } from './setup-harness'; setApplication(Application.create(config.APP)); setup(QUnit.assert); +setupQunit(); + start(); diff --git a/tests/addon-template/vite.config.mjs b/tests/addon-template/vite.config.mjs index 376422f0a0..4bd8946a94 100644 --- a/tests/addon-template/vite.config.mjs +++ b/tests/addon-template/vite.config.mjs @@ -35,7 +35,9 @@ export default defineConfig(({ mode }) => { extensions: [".gjs", ".js", ".hbs", ".ts", ".gts"], }), ], - optimizeDeps: optimizeDeps(), + optimizeDeps: optimizeDeps(null, { + excludeLegacyAddons: ["ember-source/ember/index.js"], + }), server: { port: 4200, watch: { diff --git a/tests/app-template/scripts/run-tests.mjs b/tests/app-template/scripts/run-tests.mjs index 6f90732cc9..0fa7e5d3ac 100644 --- a/tests/app-template/scripts/run-tests.mjs +++ b/tests/app-template/scripts/run-tests.mjs @@ -13,7 +13,7 @@ async function run() { new Promise((fulfill) => { const runvite = child.fork( resolve(__root, "node_modules", "vite", "bin", "vite.js"), - ["--port", "60173", "--no-open"], + ["--port", "60173", "--no-open", "--force"], { stdio: "pipe", } diff --git a/tests/ts-app-template/package.json b/tests/ts-app-template/package.json index fce1d3350c..64f5ddf5a3 100644 --- a/tests/ts-app-template/package.json +++ b/tests/ts-app-template/package.json @@ -20,11 +20,13 @@ "lint:hbs:fix": "ember-template-lint . --fix", "lint:js": "eslint . --cache", "lint:js:fix": "eslint . --fix", - "start": "ember serve", - "test": "concurrently \"npm:lint\" \"npm:test:*\" --names \"lint,test:\"", - "test:ember": "ember test" + "test": "node ./scripts/run-tests.mjs", + "test:dist": "vite build --mode test && ember test --path dist", + "test:ember": "node ./scripts/run-tests.mjs" }, "devDependencies": { + "puppeteer-chromium-resolver": "^21.0.0", + "js-reporters": "^2.1.0", "@babel/core": "^7.22.20", "@babel/eslint-parser": "^7.21.3", "@babel/plugin-proposal-decorators": "^7.21.0", diff --git a/tests/ts-app-template/scripts/run-tests.mjs b/tests/ts-app-template/scripts/run-tests.mjs new file mode 100644 index 0000000000..dce01677b7 --- /dev/null +++ b/tests/ts-app-template/scripts/run-tests.mjs @@ -0,0 +1,126 @@ +import child from 'child_process'; +import { resolve } from 'path'; +import PCR from 'puppeteer-chromium-resolver'; + +const __root = process.cwd(); + +async function run() { + // eslint-disable-next-line new-cap + const { puppeteer, executablePath } = await PCR({}); + console.log('[ci] starting'); + + await /** @type {Promise} */ ( + new Promise(fulfill => { + const runvite = child.fork( + resolve(__root, 'node_modules', 'vite', 'bin', 'vite.js'), + ['--port', '60173', '--no-open', '--force'], + { + stdio: 'pipe', + } + ); + + process.on('exit', () => runvite.kill()); + + runvite.stderr.on('data', data => { + console.log('stderr', String(data)); + }); + + runvite.stdout.on('data', data => { + const chunk = String(data); + console.log('stdout', chunk); + if (chunk.includes('Local') && chunk.includes('60173')) { + fulfill(1); + } + }); + + console.log('[ci] spawning'); + }) + ); + + console.log('[ci] spawned'); + + const browser = await puppeteer.launch({ + headless: 'new', + executablePath, + args: ['--no-sandbox', '--disable-setuid-sandbox'], + }); + + console.log('[ci] puppeteer launched'); + + let unOptimizedDeps = []; + + const result = await /** @type {Promise} */ ( + // eslint-disable-next-line no-async-promise-executor + new Promise(async fulfill => { + const page = await browser.newPage(); + + page.on('pageerror', msg => { + console.error(msg); + fulfill(1); + }); + + function logRequest(interceptedRequest) { + const url = interceptedRequest.url(); + const allow = [ + 'vite/dist/client/env.mjs', + '@babel+runtime', + '.css', + '@embroider/macros', + 'ember-source/ember/index.js', + ]; + + function importerAllowedUnoptimized(importer) { + // virtual modules can contain the rewritten-app location + if (allow.some(a => url.includes(a))) { + return true; + } + return !!(importer.includes('node_modules') && !importer.includes('rewritten-app')); + } + + if ( + url.includes('node_modules') && + !url.includes('rewritten-app') && + !url.includes('.vite/deps') && + !url.includes('embroider_virtual') && + !importerAllowedUnoptimized(interceptedRequest.initiator().url) + ) { + console.error('url does not use optimized dep', url, interceptedRequest.initiator()); + unOptimizedDeps.push(url); + } + } + page.on('request', logRequest); + + page.on('console', msg => { + const text = msg.text(); + const location = msg.location(); + if (text.includes('HARNESS')) { + try { + const parsed = JSON.parse(text); + if (parsed.type === '[HARNESS] done') { + return fulfill(parsed.failed > 0 ? 1 : 0); + } + } catch (e) {} + } + if (location.url?.includes(`/qunit.js`)) { + console.log(text); + } else { + console.debug(text); + } + }); + + await page.goto('http://localhost:60173/tests/?hidepassed&ci'); + }) + ); + + await browser.close(); + + if (unOptimizedDeps.length) { + console.error('unoptimized deps detected'); + process.exit(1); + return; + } + + process.exit(result); +} + +run(); diff --git a/tests/ts-app-template/tests/setup-harness.ts b/tests/ts-app-template/tests/setup-harness.ts new file mode 100644 index 0000000000..adda3723d0 --- /dev/null +++ b/tests/ts-app-template/tests/setup-harness.ts @@ -0,0 +1,34 @@ +// @ts-nocheck +import { autoRegister } from 'js-reporters'; +import QUnit from 'qunit'; + +export function setupQunit() { + if (hasFlag('ci')) { + const runner = autoRegister(); + const tap = QUnit.reporters.tap; + tap.init(runner, { log: console.info }); + + QUnit.config.urlConfig.push({ + id: 'smoke_tests', + label: 'Enable Smoke Tests', + tooltip: 'Enable Smoke Tests', + }); + + QUnit.config.urlConfig.push({ + id: 'ci', + label: 'Enable CI Mode', + tooltip: 'CI mode makes tests run faster by sacrificing UI responsiveness', + }); + + console.log(`[HARNESS] ci=${hasFlag('ci')}`); + } + + QUnit.done((details: any) => { + console.log(JSON.stringify({ ...details, type: '[HARNESS] done' })); + }); +} + +function hasFlag(flag: string) { + let location = typeof window !== 'undefined' && window.location; + return location && new RegExp(`[?&]${flag}`).test(location.search); +} diff --git a/tests/ts-app-template/tests/test-helper.ts b/tests/ts-app-template/tests/test-helper.ts index 3570b8c6b7..f0314e6274 100644 --- a/tests/ts-app-template/tests/test-helper.ts +++ b/tests/ts-app-template/tests/test-helper.ts @@ -4,9 +4,12 @@ import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; import { setup } from 'qunit-dom'; import { start } from 'ember-qunit'; +import { setupQunit } from './setup-harness'; setApplication(Application.create(config.APP)); setup(QUnit.assert); +setupQunit(); + start(); diff --git a/tests/ts-app-template/vite.config.mjs b/tests/ts-app-template/vite.config.mjs index e4b545be52..51df995243 100644 --- a/tests/ts-app-template/vite.config.mjs +++ b/tests/ts-app-template/vite.config.mjs @@ -27,7 +27,9 @@ export default defineConfig({ extensions: ['.gjs', '.js', '.hbs', '.ts', '.gts'], }), ], - optimizeDeps: optimizeDeps(), + optimizeDeps: optimizeDeps(null, { + excludeLegacyAddons: ['ember-source/ember/index.js'], + }), server: { port: 4200, watch: { diff --git a/tests/vite-app/scripts/run-tests.mjs b/tests/vite-app/scripts/run-tests.mjs index 6f90732cc9..0fa7e5d3ac 100644 --- a/tests/vite-app/scripts/run-tests.mjs +++ b/tests/vite-app/scripts/run-tests.mjs @@ -13,7 +13,7 @@ async function run() { new Promise((fulfill) => { const runvite = child.fork( resolve(__root, "node_modules", "vite", "bin", "vite.js"), - ["--port", "60173", "--no-open"], + ["--port", "60173", "--no-open", "--force"], { stdio: "pipe", }