diff --git a/.eslintignore b/.eslintignore index 17347313..ee022017 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,13 +4,13 @@ # compiled output /dist/ -/test-app/dist -/test-app/tmp +/test-app-3.x/dist +/test-app-3.x/tmp # dependencies /bower_components/ /node_modules/ -/test-app/node_modules +/test-app-3.x/node_modules # misc /coverage/ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d080ecd8..0694e057 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,45 +1,115 @@ -name: Node CI +name: CI on: push: branches: - main - tags: - - 'v*' - pull_request: + - master + pull_request: {} + +concurrency: + group: ci-${{ github.head_ref || github.ref }} + cancel-in-progress: true jobs: - lint: + test: + name: "Tests" runs-on: ubuntu-latest - outputs: - matrix: ${{ steps.set-matrix.outputs.matrix }} + timeout-minutes: 10 + steps: - uses: actions/checkout@v4 - uses: wyvox/action-setup-pnpm@v3 - - run: pnpm lint + - name: Lint + run: pnpm lint + - name: Run Tests + run: pnpm test - test: + floating: + name: "Floating Dependencies" runs-on: ubuntu-latest - outputs: - matrix: ${{ steps.set-matrix.outputs.matrix }} + timeout-minutes: 10 + steps: - uses: actions/checkout@v4 - uses: wyvox/action-setup-pnpm@v3 - - run: pnpm test:ember - - id: set-matrix - run: echo "::set-output name=matrix::$(pnpm scenario-tester list --files ./scenarios.js --matrix 'pnpm qunit ./scenarios.js --filter %s:')" - working-directory: test-app + - name: Run Tests + run: pnpm test + + try-scenarios-ember-3x: + name: ${{ matrix.try-scenario }} + runs-on: ubuntu-latest + needs: 'test' + timeout-minutes: 10 + strategy: + fail-fast: false + matrix: + try-scenario: + - ember-lts-3.16 + - ember-lts-3.20 + - ember-lts-3.24 + - ember-lts-3.28 + - embroider-safe + - embroider-optimized - compat-scenarios: - needs: test - name: ${{ matrix.name }} + steps: + - uses: actions/checkout@v4 + - uses: wyvox/action-setup-pnpm@v3 + with: + args: "--no-lockfile" + - name: Run Tests + run: ./node_modules/.bin/ember try:one ${{ matrix.try-scenario }} --skip-cleanup + working-directory: test-app-3.x + + try-scenarios-ember-4x: + name: ${{ matrix.try-scenario }} runs-on: ubuntu-latest + needs: 'test' + timeout-minutes: 10 + strategy: fail-fast: false - matrix: ${{fromJson(needs.test.outputs.matrix)}} + matrix: + try-scenario: + - ember-lts-4.4 + - ember-lts-4.8 + - ember-lts-4.12 + - embroider-safe + - embroider-optimized + + steps: + - uses: actions/checkout@v4 + - uses: wyvox/action-setup-pnpm@v3 + with: + args: "--no-lockfile" + - name: Run Tests + run: ./node_modules/.bin/ember try:one ${{ matrix.try-scenario }} --skip-cleanup + working-directory: test-app-4.x + + try-scenarios-ember-5x: + name: ${{ matrix.try-scenario }} + runs-on: ubuntu-latest + needs: 'test' + timeout-minutes: 10 + + strategy: + fail-fast: false + matrix: + try-scenario: + - ember-lts-5.4 + - ember-lts-5.8 + - ember-release + - ember-beta + - ember-canary + - embroider-safe + - embroider-optimized + steps: - uses: actions/checkout@v4 - uses: wyvox/action-setup-pnpm@v3 - - run: ${{ matrix.command }} - working-directory: test-app + with: + args: "--no-lockfile" + - name: Run Tests + run: ./node_modules/.bin/ember try:one ${{ matrix.try-scenario }} --skip-cleanup + working-directory: test-app-5.x diff --git a/.gitignore b/.gitignore index a10324c2..3fcfb91c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,17 @@ # See https://help.github.com/ignore-files/ for more about ignoring files. # compiled output -/dist -/test-app/dist/ -/test-app/tmp/ +dist/ +tmp/ # dependencies -/node_modules/ -/test-app/node_modules +node_modules/ # misc /.env* /.pnp* /.sass-cache -/.eslintcache +.eslintcache /connect.lock /coverage/ /libpeerconnection.log diff --git a/package.json b/package.json index 828fcb6d..e3353fe7 100644 --- a/package.json +++ b/package.json @@ -20,22 +20,16 @@ "dist" ], "scripts": { - "clean": "rm -rf dist node_modules test-app/node_modules", - "lint": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*", - "lint:hbs": "ember-template-lint .", - "lint:js": "eslint .", - "lint:devdeps": "addon-dev sync-dev-deps --lint", - "scenario:list": "scenario-tester list --files test-app/scenarios.js", - "scenario:output": "scenario-tester output --files test-app/scenarios.js --outdir scenario --scenario ", - "scenario:run": "cd test-app && qunit scenarios.js --filter ", - "start": "npm-run-all --parallel start:*", - "start:test-app": "cd test-app && ember serve", + "clean": "rm -rf dist node_modules test-app-3.x/node_modules test-app-4.x/node_modules test-app-5.x/node_modules", + "lint": "pnpm --filter '*' lint", + "lint:fix": "pnpm --filter '*' lint:fix", + "start": "concurrently 'pnpm:start:*' --restart-after 5000 --prefix-colors cyan,white,yellow", + "start:test-app": "pnpm --filter test-app-5.x start", "start:build": "rollup --config --watch", "sync-dev-deps": "addon-dev sync-dev-deps", - "test": "npm-run-all lint:* test:*", - "test:ember": "cd test-app && ember test", - "test:ember-compatibility": "cd test-app && qunit scenarios.js", - "prepare": "npm-run-all prepublishOnly", + "test": "pnpm --filter '*' test", + "test:ember": "pnpm --filter '*' test:ember", + "prepare": "pnpm run prepublishOnly", "prepublishOnly": "rollup --config" }, "dependencies": { @@ -57,14 +51,9 @@ "babel-eslint": "^10.1.0", "ember-auto-import": "^2.3.0", "ember-cli": "~3.28.5", - "ember-cli-3.16": "npm:ember-cli@~3.16.0", - "ember-cli-3.20": "npm:ember-cli@~3.20.0", - "ember-cli-3.24": "npm:ember-cli@~3.24.0", "ember-cli-babel": "^7.26.10", - "ember-cli-beta": "npm:ember-cli@beta", "ember-cli-htmlbars": "^5.7.2", "ember-cli-inject-live-reload": "^2.1.0", - "ember-cli-latest": "npm:ember-cli@latest", "ember-cli-sri": "^2.1.1", "ember-cli-terser": "^4.0.2", "ember-disable-prototype-extensions": "^1.1.3", @@ -75,13 +64,7 @@ "ember-qunit": "^5.1.5", "ember-resolver": "^8.0.3", "ember-source": "~3.28.8", - "ember-source-3.16": "npm:ember-source@~3.16.0", - "ember-source-3.20": "npm:ember-source@~3.20.0", - "ember-source-3.24": "npm:ember-source@~3.24.0", - "ember-source-beta": "npm:ember-source@beta", - "ember-source-canary": "npm:ember-source@alpha", "ember-source-channel-url": "^3.0.0", - "ember-source-latest": "npm:ember-source@latest", "ember-template-lint": "^3.15.0", "ember-try": "^1.4.0", "eslint": "^7.32.0", @@ -93,14 +76,12 @@ "jquery": "^3.6.0", "loader.js": "^4.7.0", "moment-timezone": "^0.5.33", - "npm-run-all": "^4.1.5", "prettier": "^2.5.1", "qunit": "^2.17.2", "qunit-console-grouper": "^0.3.0", "qunit-dom": "^1.6.0", "release-plan": "^0.9.0", "rollup": "^2.63.0", - "scenario-tester": "^2.0.1", "webpack": "^5.65.0" }, "peerDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5f6e0a17..8a19f09a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -60,30 +60,15 @@ importers: ember-cli: specifier: ~3.28.5 version: 3.28.6(babel-core@6.26.3)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6) - ember-cli-3.16: - specifier: npm:ember-cli@~3.16.0 - version: ember-cli@3.16.2(babel-core@6.26.3)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6) - ember-cli-3.20: - specifier: npm:ember-cli@~3.20.0 - version: ember-cli@3.20.2(babel-core@6.26.3)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6) - ember-cli-3.24: - specifier: npm:ember-cli@~3.24.0 - version: ember-cli@3.24.0(babel-core@6.26.3)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6) ember-cli-babel: specifier: ^7.26.10 version: 7.26.11 - ember-cli-beta: - specifier: npm:ember-cli@beta - version: ember-cli@5.10.0-beta.0(babel-core@6.26.3)(handlebars@4.7.8)(underscore@1.13.6) ember-cli-htmlbars: specifier: ^5.7.2 version: 5.7.2 ember-cli-inject-live-reload: specifier: ^2.1.0 version: 2.1.0 - ember-cli-latest: - specifier: npm:ember-cli@latest - version: ember-cli@5.9.0(babel-core@6.26.3)(handlebars@4.7.8)(underscore@1.13.6) ember-cli-sri: specifier: ^2.1.1 version: 2.1.1 @@ -114,27 +99,9 @@ importers: ember-source: specifier: ~3.28.8 version: 3.28.12(@babel/core@7.24.7) - ember-source-3.16: - specifier: npm:ember-source@~3.16.0 - version: ember-source@3.16.10(@babel/core@7.24.7) - ember-source-3.20: - specifier: npm:ember-source@~3.20.0 - version: ember-source@3.20.7(@babel/core@7.24.7) - ember-source-3.24: - specifier: npm:ember-source@~3.24.0 - version: ember-source@3.24.7(@babel/core@7.24.7) - ember-source-beta: - specifier: npm:ember-source@beta - version: ember-source@5.10.0-beta.2(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1) - ember-source-canary: - specifier: npm:ember-source@alpha - version: ember-source@5.10.0-alpha.4(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1) ember-source-channel-url: specifier: ^3.0.0 version: 3.0.0(encoding@0.1.13) - ember-source-latest: - specifier: npm:ember-source@latest - version: ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1) ember-template-lint: specifier: ^3.15.0 version: 3.16.0 @@ -168,9 +135,6 @@ importers: moment-timezone: specifier: ^0.5.33 version: 0.5.45 - npm-run-all: - specifier: ^4.1.5 - version: 4.1.5 prettier: specifier: ^2.5.1 version: 2.8.8 @@ -189,14 +153,11 @@ importers: rollup: specifier: ^2.63.0 version: 2.79.1 - scenario-tester: - specifier: ^2.0.1 - version: 2.1.2 webpack: specifier: ^5.65.0 version: 5.92.1 - test-app: + test-app-3.x: devDependencies: '@ember/optional-features': specifier: ^2.0.0 @@ -208,7 +169,7 @@ importers: specifier: ^2.6.0 version: 2.9.4(@babel/core@7.24.7)(ember-source@3.28.12(@babel/core@7.24.7)) '@embroider/test-setup': - specifier: npm:@embroider/test-setup@latest + specifier: ^4.0.0 version: 4.0.0(@embroider/compat@3.5.5(@embroider/core@3.4.14))(@embroider/core@3.4.14)(@embroider/webpack@4.0.4(@embroider/core@3.4.14)(webpack@5.92.1)) '@glimmer/component': specifier: ^1.0.4 @@ -219,6 +180,9 @@ importers: babel-eslint: specifier: ^10.1.0 version: 10.1.0(eslint@7.32.0) + concurrently: + specifier: ^8.2.2 + version: 8.2.2 ember-auto-import: specifier: ^2.3.0 version: 2.7.4(webpack@5.92.1) @@ -274,8 +238,8 @@ importers: specifier: ^3.15.0 version: 3.16.0 ember-try: - specifier: ^1.4.0 - version: 1.4.0 + specifier: ^3.0.0 + version: 3.0.0(encoding@0.1.13) eslint: specifier: ^7.32.0 version: 7.32.0 @@ -303,9 +267,6 @@ importers: moment-timezone: specifier: ^0.5.33 version: 0.5.45 - npm-run-all: - specifier: ^4.1.5 - version: 4.1.5 prettier: specifier: ^2.5.1 version: 2.8.8 @@ -318,13 +279,307 @@ importers: qunit-dom: specifier: ^1.6.0 version: 1.6.0 - scenario-tester: - specifier: ^2.0.1 - version: 2.1.2 + stylelint: + specifier: ^16.6.1 + version: 16.6.1 webpack: specifier: ^5.65.0 version: 5.92.1 + test-app-4.x: + devDependencies: + '@babel/core': + specifier: ^7.24.7 + version: 7.24.7 + '@babel/eslint-parser': + specifier: ^7.24.7 + version: 7.24.7(@babel/core@7.24.7)(eslint@8.57.0) + '@babel/plugin-proposal-decorators': + specifier: ^7.24.7 + version: 7.24.7(@babel/core@7.24.7) + '@ember/optional-features': + specifier: ^2.1.0 + version: 2.1.0 + '@ember/string': + specifier: ^3.1.1 + version: 3.1.1 + '@ember/test-helpers': + specifier: ^3.3.0 + version: 3.3.0(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1))(webpack@5.92.1) + '@embroider/test-setup': + specifier: ^3.0.1 + version: 3.0.3(@embroider/compat@3.5.5(@embroider/core@3.4.14))(@embroider/core@3.4.14)(@embroider/webpack@4.0.4(@embroider/core@3.4.14)(webpack@5.92.1)) + '@glimmer/component': + specifier: ^1.1.2 + version: 1.1.2(@babel/core@7.24.7) + '@glimmer/tracking': + specifier: ^1.1.2 + version: 1.1.2 + broccoli-asset-rev: + specifier: ^3.0.0 + version: 3.0.0 + concurrently: + specifier: ^8.2.2 + version: 8.2.2 + ember-auto-import: + specifier: ^2.7.3 + version: 2.7.4(webpack@5.92.1) + ember-cli: + specifier: ~4.12.3 + version: 4.12.3(babel-core@6.26.3)(handlebars@4.7.8)(underscore@1.13.6) + ember-cli-app-version: + specifier: ^6.0.1 + version: 6.0.1(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1)) + ember-cli-babel: + specifier: ^8.2.0 + version: 8.2.0(@babel/core@7.24.7) + ember-cli-clean-css: + specifier: ^3.0.0 + version: 3.0.0 + ember-cli-dependency-checker: + specifier: ^3.3.2 + version: 3.3.2(ember-cli@4.12.3(babel-core@6.26.3)(handlebars@4.7.8)(underscore@1.13.6)) + ember-cli-htmlbars: + specifier: ^6.3.0 + version: 6.3.0 + ember-cli-inject-live-reload: + specifier: ^2.1.0 + version: 2.1.0 + ember-cli-sri: + specifier: ^2.1.1 + version: 2.1.1 + ember-cli-terser: + specifier: ^4.0.2 + version: 4.0.2 + ember-fetch: + specifier: ^8.1.2 + version: 8.1.2(encoding@0.1.13) + ember-load-initializers: + specifier: ^2.1.2 + version: 2.1.2(@babel/core@7.24.7) + ember-modifier: + specifier: ^4.1.0 + version: 4.1.0(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1)) + ember-moment: + specifier: workspace:* + version: link:.. + ember-page-title: + specifier: ^8.2.3 + version: 8.2.3(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1)) + ember-qunit: + specifier: ^8.0.2 + version: 8.1.0(@ember/test-helpers@3.3.0(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1))(webpack@5.92.1))(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1))(qunit@2.21.0) + ember-resolver: + specifier: ^11.0.1 + version: 11.0.1(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1)) + ember-source: + specifier: ~4.12.4 + version: 4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1) + ember-source-channel-url: + specifier: ^3.0.0 + version: 3.0.0(encoding@0.1.13) + ember-template-lint: + specifier: ^5.13.0 + version: 5.13.0 + ember-try: + specifier: ^3.0.0 + version: 3.0.0(encoding@0.1.13) + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-plugin-ember: + specifier: ^11.12.0 + version: 11.12.0(eslint@8.57.0) + eslint-plugin-n: + specifier: ^16.6.2 + version: 16.6.2(eslint@8.57.0) + eslint-plugin-prettier: + specifier: ^5.1.3 + version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.2) + eslint-plugin-qunit: + specifier: ^8.1.1 + version: 8.1.1(eslint@8.57.0) + loader.js: + specifier: ^4.7.0 + version: 4.7.0 + moment-timezone: + specifier: ^0.5.45 + version: 0.5.45 + prettier: + specifier: ^3.3.1 + version: 3.3.2 + qunit: + specifier: ^2.21.0 + version: 2.21.0 + qunit-dom: + specifier: ^2.0.0 + version: 2.0.0 + stylelint: + specifier: ^15.11.0 + version: 15.11.0 + stylelint-config-standard: + specifier: ^34.0.0 + version: 34.0.0(stylelint@15.11.0) + stylelint-prettier: + specifier: ^4.1.0 + version: 4.1.0(prettier@3.3.2)(stylelint@15.11.0) + tracked-built-ins: + specifier: ^3.3.0 + version: 3.3.0 + webpack: + specifier: ^5.91.0 + version: 5.92.1 + + test-app-5.x: + devDependencies: + '@babel/core': + specifier: ^7.24.7 + version: 7.24.7 + '@babel/eslint-parser': + specifier: ^7.24.7 + version: 7.24.7(@babel/core@7.24.7)(eslint@8.57.0) + '@babel/plugin-proposal-decorators': + specifier: ^7.24.7 + version: 7.24.7(@babel/core@7.24.7) + '@ember/optional-features': + specifier: ^2.1.0 + version: 2.1.0 + '@ember/string': + specifier: ^3.1.1 + version: 3.1.1 + '@ember/test-helpers': + specifier: ^3.3.0 + version: 3.3.0(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1))(webpack@5.92.1) + '@embroider/test-setup': + specifier: ^3.0.1 + version: 3.0.3(@embroider/compat@3.5.5(@embroider/core@3.4.14))(@embroider/core@3.4.14)(@embroider/webpack@4.0.4(@embroider/core@3.4.14)(webpack@5.92.1)) + '@glimmer/component': + specifier: ^1.1.2 + version: 1.1.2(@babel/core@7.24.7) + '@glimmer/tracking': + specifier: ^1.1.2 + version: 1.1.2 + broccoli-asset-rev: + specifier: ^3.0.0 + version: 3.0.0 + concurrently: + specifier: ^8.2.2 + version: 8.2.2 + ember-auto-import: + specifier: ^2.7.3 + version: 2.7.4(webpack@5.92.1) + ember-cli: + specifier: ~5.9.0 + version: 5.9.0(babel-core@6.26.3)(handlebars@4.7.8)(underscore@1.13.6) + ember-cli-app-version: + specifier: ^6.0.1 + version: 6.0.1(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1)) + ember-cli-babel: + specifier: ^8.2.0 + version: 8.2.0(@babel/core@7.24.7) + ember-cli-clean-css: + specifier: ^3.0.0 + version: 3.0.0 + ember-cli-dependency-checker: + specifier: ^3.3.2 + version: 3.3.2(ember-cli@5.9.0(babel-core@6.26.3)(handlebars@4.7.8)(underscore@1.13.6)) + ember-cli-htmlbars: + specifier: ^6.3.0 + version: 6.3.0 + ember-cli-inject-live-reload: + specifier: ^2.1.0 + version: 2.1.0 + ember-cli-sri: + specifier: ^2.1.1 + version: 2.1.1 + ember-cli-terser: + specifier: ^4.0.2 + version: 4.0.2 + ember-fetch: + specifier: ^8.1.2 + version: 8.1.2(encoding@0.1.13) + ember-load-initializers: + specifier: ^2.1.2 + version: 2.1.2(@babel/core@7.24.7) + ember-modifier: + specifier: ^4.1.0 + version: 4.1.0(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1)) + ember-moment: + specifier: workspace:* + version: link:.. + ember-page-title: + specifier: ^8.2.3 + version: 8.2.3(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1)) + ember-qunit: + specifier: ^8.0.2 + version: 8.1.0(@ember/test-helpers@3.3.0(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1))(webpack@5.92.1))(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1))(qunit@2.21.0) + ember-resolver: + specifier: ^11.0.1 + version: 11.0.1(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1)) + ember-source: + specifier: ~5.9.0 + version: 5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1) + ember-source-channel-url: + specifier: ^3.0.0 + version: 3.0.0(encoding@0.1.13) + ember-template-lint: + specifier: ^5.13.0 + version: 5.13.0 + ember-try: + specifier: ^3.0.0 + version: 3.0.0(encoding@0.1.13) + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-plugin-ember: + specifier: ^11.12.0 + version: 11.12.0(eslint@8.57.0) + eslint-plugin-n: + specifier: ^16.6.2 + version: 16.6.2(eslint@8.57.0) + eslint-plugin-prettier: + specifier: ^5.1.3 + version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.2) + eslint-plugin-qunit: + specifier: ^8.1.1 + version: 8.1.1(eslint@8.57.0) + loader.js: + specifier: ^4.7.0 + version: 4.7.0 + moment-timezone: + specifier: ^0.5.45 + version: 0.5.45 + prettier: + specifier: ^3.3.1 + version: 3.3.2 + qunit: + specifier: ^2.21.0 + version: 2.21.0 + qunit-dom: + specifier: ^2.0.0 + version: 2.0.0 + stylelint: + specifier: ^15.11.0 + version: 15.11.0 + stylelint-config-standard: + specifier: ^34.0.0 + version: 34.0.0(stylelint@15.11.0) + stylelint-prettier: + specifier: ^4.1.0 + version: 4.1.0(prettier@3.3.2)(stylelint@15.11.0) + tracked-built-ins: + specifier: ^3.3.0 + version: 3.3.0 + webpack: + specifier: ^5.91.0 + version: 5.92.1 + packages: '@ampproject/remapping@2.3.0': @@ -346,6 +601,13 @@ packages: resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} engines: {node: '>=6.9.0'} + '@babel/eslint-parser@7.24.7': + resolution: {integrity: sha512-SO5E3bVxDuxyNxM5agFv480YA2HO6ohZbGxbazZdIk3KQOPOGVNw6q78I9/lbviIf95eq6tPozeYnJLbjnC8IA==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + '@babel/generator@7.24.7': resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} engines: {node: '>=6.9.0'} @@ -989,6 +1251,36 @@ packages: engines: {node: '>=0.1.95'} hasBin: true + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@csstools/css-parser-algorithms@2.6.3': + resolution: {integrity: sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-tokenizer': ^2.3.1 + + '@csstools/css-tokenizer@2.3.1': + resolution: {integrity: sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==} + engines: {node: ^14 || ^16 || >=18} + + '@csstools/media-query-list-parser@2.1.11': + resolution: {integrity: sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.6.3 + '@csstools/css-tokenizer': ^2.3.1 + + '@csstools/selector-specificity@3.1.1': + resolution: {integrity: sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.13 + + '@dual-bundle/import-meta-resolve@4.1.0': + resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} + '@ember-data/rfc395-data@0.0.4': resolution: {integrity: sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ==} @@ -1013,6 +1305,12 @@ packages: peerDependencies: ember-source: '>=3.8.0' + '@ember/test-helpers@3.3.0': + resolution: {integrity: sha512-HEI28wtjnQuEj9+DstHUEEKPtqPAEVN9AAVr4EifVCd3DyEDy0m6hFT4qbap1WxAIktLja2QXGJg50lVWzZc5g==} + engines: {node: 16.* || >= 18} + peerDependencies: + ember-source: ^4.0.0 || ^5.0.0 + '@ember/test-waiters@3.1.0': resolution: {integrity: sha512-bb9h95ktG2wKY9+ja1sdsFBdOms2lB19VWs8wmNpzgHv1NCetonBoV5jHBV4DHt0uS1tg9z66cZqhUVlYs96KQ==} engines: {node: 10.* || 12.* || >= 14.*} @@ -1026,6 +1324,10 @@ packages: resolution: {integrity: sha512-a+pFlXZPovcCNFo05HxXBW9ole43mPyFZnkhvZlLF0f1sHEn9j0sD1Ld2BM/NCERmHcYz9eXQnX1FPNLCDoGEA==} engines: {node: 12.* || 14.* || >= 16} + '@embroider/addon-shim@1.8.9': + resolution: {integrity: sha512-qyN64T1jMHZ99ihlk7VFHCWHYZHLE1DOdHi0J7lmn5waV1DoW7gD8JLi1i7FregzXtKhbDc7shyEmTmWPTs8MQ==} + engines: {node: 12.* || 14.* || >= 16} + '@embroider/babel-loader-9@3.1.1': resolution: {integrity: sha512-8mIDRXvwntYIQc2JFVvGXEppHUJRhw+6aEzHtbCZDr4oOKw55IyY+RHzas3JILRq64owLA+Ox0yu6nkwL1ApRQ==} engines: {node: 12.* || 14.* || >= 16} @@ -1071,6 +1373,21 @@ packages: resolution: {integrity: sha512-jL3Bjn8C73AUBlTex+VixP7YmqvPNN/BZFB85odTstzLFOuR8y2mmGiuWbq17qNuFyoxc6xtndMnAeqwCXBNkA==} engines: {node: 12.* || 14.* || >= 16} + '@embroider/test-setup@3.0.3': + resolution: {integrity: sha512-3K5KSyTdnxAkZQill6+TdC/XTRr6226LNwZMsrhRbBM0FFZXw2D8qmJSHPvZLheQx3A1jnF9t1lyrAzrKlg6Yw==} + engines: {node: 12.* || 14.* || >= 16} + peerDependencies: + '@embroider/compat': ^3.3.0 + '@embroider/core': ^3.4.0 + '@embroider/webpack': ^3.2.1 + peerDependenciesMeta: + '@embroider/compat': + optional: true + '@embroider/core': + optional: true + '@embroider/webpack': + optional: true + '@embroider/test-setup@4.0.0': resolution: {integrity: sha512-1S3Ebk0CEh3XDqD93AWSwQZBCk+oGv03gtkaGgdgyXGIR7jrVyDgEnEuslN/hJ0cuU8TqhiXrzHMw7bJwIGhWw==} engines: {node: 12.* || 14.* || >= 16} @@ -1106,10 +1423,28 @@ packages: '@embroider/core': ^3.4.14 webpack: ^5.0.0 + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.10.1': + resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint/eslintrc@0.4.3': resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.0': + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} @@ -1139,6 +1474,9 @@ packages: '@glimmer/global-context@0.65.4': resolution: {integrity: sha512-RSYCPG/uVR5XCDcPREBclncU7R0zkjACbADP+n3FWAH1TfWbXRMDIkvO/ZlwHkjHoCZf6tIM6p5S/MoFzfJEJA==} + '@glimmer/global-context@0.84.3': + resolution: {integrity: sha512-8Oy9Wg5IZxMEeAnVmzD2NkObf89BeHoFSzJgJROE/deutd3rxg83mvlOez4zBBGYwnTb+VGU2LYRpet92egJjA==} + '@glimmer/global-context@0.92.0': resolution: {integrity: sha512-XUPXIsz/F0YQz3vY9x+u3YQMibM3378gEPJObs3CHzAWJUl9Kz1CAb+jRigRrxIcmdzoonA49VMwGmmKRNoGag==} @@ -1169,6 +1507,9 @@ packages: '@glimmer/reference@0.65.4': resolution: {integrity: sha512-yuRVE4qyqrlCndDMrHKDWUbDmGDCjPzsFtlTmxxnhDMJAdQsnr2cRLITHvQRDm1tXfigVvyKnomeuYhRRbBqYQ==} + '@glimmer/reference@0.84.3': + resolution: {integrity: sha512-lV+p/aWPVC8vUjmlvYVU7WQJsLh319SdXuAWoX/SE3pq340BJlAJiEcAc6q52y9JNhT57gMwtjMX96W5Xcx/qw==} + '@glimmer/reference@0.92.0': resolution: {integrity: sha512-es2a3bh9nk8kYCacLfm5Ly3x5sFDf2f0/7Vj1Ca2BXXfAn8UhuaR9uCrEI1OtBBz1JBciCzpbKemsu8J6VulYg==} @@ -1205,12 +1546,18 @@ packages: '@glimmer/validator@0.65.4': resolution: {integrity: sha512-0YUjAyo45DF5JkQxdv5kHn96nMNhvZiEwsAD4Jme0kk5Q9MQcPOUtN76pQAS4f+C6GdF9DeUr2yGXZLFMmb+LA==} + '@glimmer/validator@0.84.3': + resolution: {integrity: sha512-RTBV4TokUB0vI31UC7ikpV7lOYpWUlyqaKV//pRC4pexYMlmqnVhkFrdiimB/R1XyNdUOQUmnIAcdic39NkbhQ==} + '@glimmer/validator@0.92.0': resolution: {integrity: sha512-GFX54PD8BRi+lg/HJ8KJRcvnV4rbDzJooQnOpJ9PlgIQi4KP/ivdjsw3DaEuvqn4K584LR6VTgHmxfZlLkDh2g==} '@glimmer/vm-babel-plugins@0.80.3': resolution: {integrity: sha512-9ej6xlm5MzHBJ5am2l0dbbn8Z0wJoYoMpM8FcrGMlUP6SPMLWxvxpMsApgQo8u6dvZRCjR3/bw3fdf7GOy0AFw==} + '@glimmer/vm-babel-plugins@0.84.2': + resolution: {integrity: sha512-HS2dEbJ3CgXn56wk/5QdudM7rE3vtNMvPIoG7Rrg+GhkGMNxBCIRxOeEF2g520j9rwlA2LAZFpc7MCDMFbTjNA==} + '@glimmer/vm-babel-plugins@0.92.0': resolution: {integrity: sha512-s/jPlTykZb3YzzOCVmGyMP8NihonHM+eY5WBQl+MOCXe2KdGkTAxFgnuGYzHTtJ/JzCRa/YRXQhJhncJSg6L2A==} engines: {node: '>=16'} @@ -1227,15 +1574,28 @@ packages: '@handlebars/parser@2.0.0': resolution: {integrity: sha512-EP9uEDZv/L5Qh9IWuMUGJRfwhXJ4h1dqKTT4/3+tY0eu7sPis7xh23j61SYUnNF4vqCQvvUXpDo9Bh/+q1zASA==} + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + '@humanwhocodes/config-array@0.5.0': resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + '@humanwhocodes/object-schema@1.2.1': resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} deprecated: Use @eslint/object-schema instead + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + '@inquirer/figures@1.0.3': resolution: {integrity: sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==} engines: {node: '>=18'} @@ -1265,6 +1625,10 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@lint-todo/utils@13.1.1': + resolution: {integrity: sha512-F5z53uvRIF4dYfFfJP3a2Cqg+4P1dgJchJsFnsZE0eZp0LK8X7g2J0CsJHRgns+skpXOlM7n5vFGwkWCWj8qJg==} + engines: {node: 12.* || >= 14} + '@ljharb/through@2.3.13': resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} engines: {node: '>= 0.4'} @@ -1281,6 +1645,9 @@ packages: resolution: {integrity: sha512-SkAyKAByB9l93Slyg8AUHGuM2kjvWioUTCckT/03J09jYnfEzMO/wSXmEhnKGYs6qx9De8TH4yJCl0Y9lRgnyQ==} engines: {node: '>=14.18.0'} + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1374,6 +1741,10 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@pnpm/constants@7.1.1': resolution: {integrity: sha512-31pZqMtjwV+Vaq7MaPrT1EoDFSYwye3dp6BiHIGRJmVThCQwySRKM7hCvqqI94epNkqFAAYoWrNynWoRYosGdw==} engines: {node: '>=16.14'} @@ -1432,6 +1803,9 @@ packages: resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} engines: {node: '>= 6'} + '@types/acorn@4.0.6': + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + '@types/babel__code-frame@7.0.6': resolution: {integrity: sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==} @@ -1510,8 +1884,17 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/node@20.14.8': - resolution: {integrity: sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==} + '@types/minimist@1.2.5': + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + + '@types/node@20.14.9': + resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} + + '@types/node@9.6.61': + resolution: {integrity: sha512-/aKAdg5c8n468cYLy2eQrcR5k6chlbNwZNGUj3TboyPa2hcO2QAJcfymlqPzMiRj8B6nYKXjzQz36minFE0RwQ==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} '@types/qs@6.9.15': resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} @@ -1546,6 +1929,9 @@ packages: '@types/yargs@17.0.32': resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@webassemblyjs/ast@1.12.1': resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} @@ -1662,10 +2048,17 @@ packages: abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + abortcontroller-polyfill@1.7.5: + resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} + accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + acorn-dynamic-import@3.0.0: + resolution: {integrity: sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==} + deprecated: This is probably built in to whatever tool you're using. If you still need it... idk + acorn-globals@6.0.0: resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} @@ -1683,6 +2076,11 @@ packages: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} + acorn@5.7.4: + resolution: {integrity: sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==} + engines: {node: '>=0.4.0'} + hasBin: true + acorn@6.4.2: resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} engines: {node: '>=0.4.0'} @@ -1838,6 +2236,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + arr-diff@4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} engines: {node: '>=0.10.0'} @@ -1878,6 +2279,10 @@ packages: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + asn1.js@4.10.1: resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} @@ -1986,6 +2391,10 @@ packages: babel-helpers@6.24.1: resolution: {integrity: sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ==} + babel-import-util@0.2.0: + resolution: {integrity: sha512-CtWYYHU/MgK88rxMrLfkD356dApswtR/kWZ/c6JifG1m10e7tBBrs/366dFzWMAoqYmG5/JSh+94tUSpIwh+ag==} + engines: {node: '>= 12.*'} + babel-import-util@1.4.1: resolution: {integrity: sha512-TNdiTQdPhXlx02pzG//UyVPSKE7SNWjY0n4So/ZnjQpWwaM5LvWBLkWa1JKll5u06HNscHD91XZPuwrMg1kadQ==} engines: {node: '>= 12.*'} @@ -2046,9 +2455,6 @@ packages: resolution: {integrity: sha512-NQ2DT0DsYyHVrEpFQIy2U8S91JaKSE8NOSZzMd7KZFJVgA6KodJq3Uj852HcH9LsSfvwppnM+dRo1G8bzTnnFw==} engines: {node: '>= 12.*'} - babel-plugin-filter-imports@3.0.0: - resolution: {integrity: sha512-p/chjzVTgCxUqyLM0q/pfWVZS7IJTwGQMwNg0LOvuQpKiTftQgZDtkGB8XvETnUw19rRcL7bJCTopSwibTN2tA==} - babel-plugin-filter-imports@4.0.0: resolution: {integrity: sha512-jDLlxI8QnfKd7PtieH6pl4tZJzymzfCDCPGdTq/grgbiYAikwDPp/oL0IlFJn0HQjLpcLkyYhPKkUVneRESw5w==} engines: {node: '>=8'} @@ -2207,6 +2613,9 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@2.0.0: + resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} + base64-js@0.0.2: resolution: {integrity: sha512-Pj9L87dCdGcKlSqPVUjD+q96pbIx1zQQLb2CUiWURfjiBELv84YX+0nGnKmyT/9KkC7PQk7UN1w+Al8bBozaxQ==} engines: {node: '>= 0.4'} @@ -2232,10 +2641,6 @@ packages: big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - bin-links@3.0.3: - resolution: {integrity: sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - binary-extensions@1.13.1: resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==} engines: {node: '>=0.10.0'} @@ -2305,6 +2710,12 @@ packages: resolution: {integrity: sha512-VRE+0PYAN4jQfkIq3GKRj4U/4UV9rVpLan5ll6fVYV4ziVg4OEfR5GUnILEg++QtR4xSaugRxCPU5XJLDy3bNQ==} engines: {node: '>=6'} + broccoli-asset-rev@3.0.0: + resolution: {integrity: sha512-gAHQZnwvtl74tGevUqGuWoyOdJUdMMv0TjGSMzbdyGImr9fZcnM6xmggDA8bUawrMto9NFi00ZtNUgA4dQiUBw==} + + broccoli-asset-rewrite@2.0.0: + resolution: {integrity: sha512-dqhxdQpooNi7LHe8J9Jdxp6o3YPFWl4vQmint6zrsn2sVbOo+wpyiX3erUSt0IBtjNkAxqJjuvS375o2cLBHTA==} + broccoli-babel-transpiler@6.5.1: resolution: {integrity: sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==} engines: {node: '>= 4'} @@ -2332,10 +2743,6 @@ packages: broccoli-clean-css@1.1.0: resolution: {integrity: sha512-S7/RWWX+lL42aGc5+fXVLnwDdMtS0QEWUFalDp03gJ9Na7zj1rWa351N2HZ687E2crM9g+eDWXKzD17cbcTepg==} - broccoli-concat@3.7.5: - resolution: {integrity: sha512-rDs1Mej3Ej0Cy5yIO9oIQq5+BCv0opAwS2NW7M0BeCsAMeFM42Z/zacDUC6jKc5OV5wiHvGTyCPLnZkMe0h6kQ==} - engines: {node: '>= 4'} - broccoli-concat@4.2.5: resolution: {integrity: sha512-dFB5ATPwOyV8S2I7a07HxCoutoq23oY//LhM6Mou86cWUTB174rND5aQLR7Fu8FjFFLxoTbkk7y0VPITJ1IQrw==} engines: {node: 10.* || >= 12.*} @@ -2353,6 +2760,9 @@ packages: resolution: {integrity: sha512-YpjOExWr92C5vhnK0kmD81kM7U09kdIRZk9w4ZDCDHuHXW+VE/x6AGEOQQW3loBQQ6Jk+k+TSm8dESy4uZsnjw==} engines: {node: ^4.5 || 6.* || >= 7.*} + broccoli-filter@1.3.0: + resolution: {integrity: sha512-VXJXw7eBfG82CFxaBDjYmyN7V72D4In2zwLVQJd/h3mBfF3CMdRTsv2L20lmRTtCv1sAHcB+LgMso90e/KYiLw==} + broccoli-funnel-reducer@1.0.0: resolution: {integrity: sha512-SaOCEdh+wnt2jFUV2Qb32m7LXyElvFwW3NKNaEJyi5PGQNwxfqpkc0KI6AbQANKgdj/40U2UC0WuGThFwuEUaA==} @@ -2391,13 +2801,6 @@ packages: resolution: {integrity: sha512-BK8aPhQpOLsHWiftrqXQr84XsvzUqeaN4PlCQOYg5yM0M+WKAHtX2WFXmicSQZOVgKDyh5aeoNTFkHjBAEBzwQ==} engines: {node: 6.* || 8.* || >= 10.*} - broccoli-module-normalizer@1.3.0: - resolution: {integrity: sha512-0idZCOtdVG6xXoQ36Psc1ApMCr3lW5DB+WEAOEwHcUoESIBHzwcRPQTxheGIjZ5o0hxpsRYAUH5x0ErtNezbrQ==} - engines: {node: '>=4'} - - broccoli-module-unification-reexporter@1.0.0: - resolution: {integrity: sha512-HTi9ua520M20aBZomaiBopsSt3yjL7J/paR3XPjieygK7+ShATBiZdn0B+ZPiniBi4I8JuMn1q0fNFUevtP//A==} - broccoli-node-api@1.7.0: resolution: {integrity: sha512-QIqLSVJWJUVOhclmkmypJJH9u9s/aWH4+FH6Q6Ju5l+Io4dtwqdPUNmDfw40o6sxhbZHhqGujDJuHTML1wG8Yw==} @@ -2438,6 +2841,10 @@ packages: resolution: {integrity: sha512-a4zUsWtA1uns1K7p9rExYVYG99rdKeGRymW0qOCNkvDPHQxVi3yVyJHhQbM3EZwdt2E0mnhr5e0c/bPpJ7p3Wg==} engines: {node: 10.* || >= 12.*} + broccoli-rollup@2.1.1: + resolution: {integrity: sha512-aky/Ovg5DbsrsJEx2QCXxHLA6ZR+9u1TNVTf85soP4gL8CjGGKQ/JU8R3BZ2ntkWzo6/83RCKzX6O+nlNKR5MQ==} + engines: {node: '>=4.0'} + broccoli-slow-trees@3.1.0: resolution: {integrity: sha512-FRI7mRTk2wjIDrdNJd6znS7Kmmne4VkAkl8Ix1R/VoePFMD0g0tEl671xswzFqaRjpT9Qu+CC4hdXDLDJBuzMw==} @@ -2459,6 +2866,10 @@ packages: resolution: {integrity: sha512-NXfi+Vas24n3Ivo21GvENTI55qxKu7OwKRnCLWXld8MiLiQKQlWIq28eoARaFj0lTUFwUa4jKZeA7fW9PiWQeg==} engines: {node: 8.* || >= 10.*} + broccoli-templater@2.0.2: + resolution: {integrity: sha512-71KpNkc7WmbEokTQpGcbGzZjUIY1NSVa3GB++KFKAfx5SZPUozCOsBlSTwxcv8TLoCAqbBnsX5AQPgg6vJ2l9g==} + engines: {node: 6.* || >= 8.*} + broccoli-terser-sourcemap@4.1.1: resolution: {integrity: sha512-8sbpRf0/+XeszBJQM7vph2UNj4Kal0lCI/yubcrBIzb2NvYj5gjTHJABXOdxx5mKNmlCMu2hx2kvOtMpQsxrfg==} engines: {node: ^10.12.0 || 12.* || >= 14} @@ -2504,15 +2915,6 @@ packages: bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - buffer-alloc-unsafe@1.1.0: - resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} - - buffer-alloc@1.2.0: - resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} - - buffer-fill@1.0.0: - resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} - buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -2525,12 +2927,19 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} builtins@1.0.3: resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} + builtins@5.1.0: + resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} + bytes@1.0.0: resolution: {integrity: sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ==} @@ -2572,12 +2981,23 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camelcase-keys@7.0.2: + resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} + engines: {node: '>=12'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + can-symlink@1.0.0: resolution: {integrity: sha512-RbsNrFyhwkx+6psk/0fK/Q9orOUr9VMxohGd8vTa4djf4TGLfblBgUfqZChrZuW0Q+mz2eBPFLusw9Jfukzmhg==} hasBin: true - caniuse-lite@1.0.30001636: - resolution: {integrity: sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==} + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + + caniuse-lite@1.0.30001637: + resolution: {integrity: sha512-1x0qRI1mD1o9e+7mBI7XtzFAP4XszbHaVWsMiGbSPLYekKTJF7K+FNk6AsXH4sUpc+qrsI3pVgf1Jdl/uGkuSQ==} capture-exit@2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} @@ -2599,10 +3019,6 @@ packages: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} - chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -2661,6 +3077,10 @@ packages: engines: {node: '>=0.10.0'} hasBin: true + clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} + clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -2689,6 +3109,10 @@ packages: resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==} engines: {node: '>=6'} + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + cli-table@0.3.11: resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} engines: {node: '>= 0.2.0'} @@ -2714,6 +3138,9 @@ packages: clone-response@1.0.2: resolution: {integrity: sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==} + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -2722,10 +3149,6 @@ packages: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} - cmd-shim@5.0.0: - resolution: {integrity: sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - collection-visit@1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2747,6 +3170,9 @@ packages: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + colors@1.0.3: resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} engines: {node: '>=0.1.90'} @@ -2778,6 +3204,13 @@ packages: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + common-ancestor-path@1.0.1: + resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} + common-path-prefix@3.0.0: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} @@ -2806,6 +3239,11 @@ packages: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} + concurrently@8.2.2: + resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} + engines: {node: ^14.13.0 || >=16.0.0} + hasBin: true + configstore@5.0.1: resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} engines: {node: '>=8'} @@ -3028,6 +3466,9 @@ packages: resolution: {integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==} deprecated: This package is no longer supported. + copy-dereference@1.0.0: + resolution: {integrity: sha512-40TSLuhhbiKeszZhK9LfNdazC67Ue4kq/gGwN5sdxEUWPXTIMmKmGmgD9mPfNKVAeecEW+NfEIpBaZoACCQLLw==} + copy-descriptor@0.1.1: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} @@ -3050,6 +3491,24 @@ packages: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} @@ -3078,6 +3537,10 @@ packages: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} + css-functions-list@3.2.2: + resolution: {integrity: sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==} + engines: {node: '>=12 || >=16'} + css-loader@5.2.7: resolution: {integrity: sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==} engines: {node: '>= 10.13.0'} @@ -3137,6 +3600,10 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} + date-time@2.1.0: + resolution: {integrity: sha512-/9+C44X7lot0IeiyfgJmETtRMhBidBYM2QFFIkGa0U1k+hSyY87Nw7PY3eDqpvCBm7I3WCSfPeZskW/YYq6m4g==} + engines: {node: '>=4'} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -3162,6 +3629,18 @@ packages: supports-color: optional: true + decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decamelize@5.0.1: + resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} + engines: {node: '>=10'} + decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -3180,10 +3659,6 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -3232,6 +3707,10 @@ packages: deprecation@2.3.1: resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + des.js@1.1.0: resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} @@ -3255,10 +3734,6 @@ packages: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - diff@5.2.0: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} @@ -3274,6 +3749,9 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} + dom-element-descriptors@0.5.0: + resolution: {integrity: sha512-CVzntLid1oFVHTKdTp/Qu7Kz+wSm8uO30TSQyAJ6n4Dz09yTzVQn3S1oRhVhUubxdMuKs1DjDqt88pubHagbPw==} + domain-browser@1.2.0: resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} engines: {node: '>=0.4', npm: '>=1.2'} @@ -3313,8 +3791,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.4.811: - resolution: {integrity: sha512-CDyzcJ5XW78SHzsIOdn27z8J4ist8eaFLhdto2hSMSJQgsiwvbv2fbizcKUICryw1Wii1TI/FEkvzvJsR3awrA==} + electron-to-chromium@1.4.812: + resolution: {integrity: sha512-7L8fC2Ey/b6SePDFKR2zHAy4mbdp1/38Yk5TsARO66W3hC5KEaeKMMHoxwtuH+jcu2AYLSn9QX04i95t6Fl1Hg==} elliptic@6.5.5: resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} @@ -3327,6 +3805,12 @@ packages: resolution: {integrity: sha512-6CdXSegJJc8nwwK7+1lIcBUnMVrJRNd4ZdMgcKbCAwPvcGxMgRVBddSzrX/+q/UuflvTEO26Dk1g7Z6KHMXUhw==} engines: {node: 12.* || 14.* || >= 16} + ember-cli-app-version@6.0.1: + resolution: {integrity: sha512-XA1FwkWA5QytmWF0jcJqEr3jcZoiCl9Fb33TZgOVfClL7Voxe+/RwzISEprBRQgbf7j8z1xf8/RJCKfclUy3rQ==} + engines: {node: 14.* || 16.* || >= 18} + peerDependencies: + ember-source: ^3.28.0 || >= 4.0.0 + ember-cli-babel-plugin-helpers@1.1.1: resolution: {integrity: sha512-sKvOiPNHr5F/60NLd7SFzMpYPte/nnGkq/tMIfXejfKHIhaiIkYFqX8Z9UFTKWLLn+V7NOaby6niNPZUdvKCRw==} engines: {node: 6.* || 8.* || >= 10.*} @@ -3345,6 +3829,16 @@ packages: peerDependencies: '@babel/core': ^7.12.0 + ember-cli-clean-css@3.0.0: + resolution: {integrity: sha512-BbveJCyRvzzkaTH1llLW+MpHe/yzA5zpHOpMIg2vp/3JD9mban9zUm7lphaB0TSpPuMuby9rAhTI8pgXq0ifIA==} + engines: {node: 16.* || >= 18} + + ember-cli-dependency-checker@3.3.2: + resolution: {integrity: sha512-PwkrW5oYsdPWwt+0Tojufmv/hxVETTjkrEdK7ANQB2VSnqpA5UcYubwpQM9ONuR2J8wyNDMwEHlqIrk/FYtBsQ==} + engines: {node: '>= 6'} + peerDependencies: + ember-cli: ^3.2.0 || >=4.0.0 + ember-cli-get-component-path-option@1.0.0: resolution: {integrity: sha512-k47TDwcJ2zPideBCZE8sCiShSxQSpebY2BHcX2DdipMmBox5gsfyVrbKJWIHeSTTKyEUgmBIvQkqTOozEziCZA==} @@ -3406,6 +3900,10 @@ packages: resolution: {integrity: sha512-lo5YArbJzJi5ssvaGqTt6+FnhTALnSvYVuxM7lfyL1UCMudyNJ94ovH5C7n5il7ATd6WsNiAPRUO/v+s5Jq/aA==} engines: {node: 8.* || >= 10.*} + ember-cli-typescript@4.2.1: + resolution: {integrity: sha512-0iKTZ+/wH6UB/VTWKvGuXlmwiE8HSIGcxHamwNhEC5x1mN3z8RfvsFZdQWYUzIWFN2Tek0gmepGRPTwWdBYl/A==} + engines: {node: 10.* || >= 12.*} + ember-cli-version-checker@2.2.0: resolution: {integrity: sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==} engines: {node: '>= 4'} @@ -3422,29 +3920,14 @@ packages: resolution: {integrity: sha512-rk7GY+FmLn/2e22HsZs0Ycrz8HQ1W3Fv+2TFOuEFW9optnDXDgkntPBIl6gact/LHsfBM5RKbM3dHsIIeLgl0Q==} engines: {node: 10.* || >= 12.*} - ember-cli@3.16.2: - resolution: {integrity: sha512-x8czGIdRnS7bPRYY7PEhhVGakHTDGF1arKlgw8yBSch29hCuxmbMrxjQxEkvkTtQ8cb7a840N4eVyEujeYPQIw==} - engines: {node: 10.* || >= 12} - hasBin: true - - ember-cli@3.20.2: - resolution: {integrity: sha512-8ggRX+NXD9VkQt/9/GSMLcnswWNYTgE7Aw1uelexHdxGA1TqcjOjQ07ljVmgRwYVieknhDzhK3M0u3Xoa3x0HA==} - engines: {node: 10.* || >= 12} - hasBin: true - - ember-cli@3.24.0: - resolution: {integrity: sha512-dLurYpluRcE+XjCHy/JzUBcW4dBKhjmXH3zUjyof89gFjj+8EFjB0b2tqyS6buKqBasinVaX8lZZVIXYCdFtNA==} - engines: {node: 10.* || >= 12} - hasBin: true - ember-cli@3.28.6: resolution: {integrity: sha512-aGHIDXM5KujhU+tHyfp1X5bUp3yj47sIWI0zgybyIw6vv6ErAu/eKWWMSib5PF8cQDdXG9vttBcXnvQ4QBNIPQ==} engines: {node: '>= 12'} hasBin: true - ember-cli@5.10.0-beta.0: - resolution: {integrity: sha512-FZhZxUs9TTTP0Yk5tEvZ4hjRaHGUNxWuOfd1N11lM9XkXzTP5IM+2M2Ns5mMpVGzfhzX60JkLuRcIm1nMNsl7A==} - engines: {node: '>= 18'} + ember-cli@4.12.3: + resolution: {integrity: sha512-Ilap7fVGx0+sF6y5O1id+xVPYlc2cJ8OAG6faEQPyvbaCCUsCZnAEr7EMA+5qg0kNqjawIIHJTgnQesdbaDwtg==} + engines: {node: '>= 14'} hasBin: true ember-cli@5.9.0: @@ -3468,6 +3951,10 @@ packages: resolution: {integrity: sha512-B7wiurPgsxsSGzJuPFkpBWnaeuCu2PGpG2BjyrfA1VcL7//o+5RSnZqiCEY326y7qmxb2GoCgo0ft03KBU0rRw==} engines: {node: '>= 4'} + ember-fetch@8.1.2: + resolution: {integrity: sha512-TVx24/jrvDIuPL296DV0hBwp7BWLcSMf0I8464KGz01sPytAB+ZAePbc9ooBTJDkKZEGFgatJa4nj3yF1S9Bpw==} + engines: {node: '>= 10'} + ember-load-initializers@2.1.2: resolution: {integrity: sha512-CYR+U/wRxLbrfYN3dh+0Tb6mFaxJKfdyz+wNql6cqTrA0BBi9k6J3AaKXj273TqvEpyyXegQFFkZEiuZdYtgJw==} engines: {node: 6.* || 8.* || >= 10.*} @@ -3476,10 +3963,24 @@ packages: resolution: {integrity: sha512-aX9UINiUXIjzsCNNna1ioASB/2lbnFgSHI63bBcd4MOVE9AqoLdOL7h+ocyylYXyYoBj2JDRwCzjWNf2Xbp5wg==} engines: {node: '>= 0.10.0'} + ember-modifier@4.1.0: + resolution: {integrity: sha512-YFCNpEYj6jdyy3EjslRb2ehNiDvaOrXTilR9+ngq+iUqSHYto2zKV0rleiA1XJQ27ELM1q8RihT29U6Lq5EyqQ==} + peerDependencies: + ember-source: '*' + peerDependenciesMeta: + ember-source: + optional: true + ember-page-title@7.0.0: resolution: {integrity: sha512-oq6+HYbeVD/BnxIO5AkP4gWlsatdgW2HFO10F8+XQiJZrwa7cC7Wm54JNGqQkavkDQTgNSiy1Fe2NILJ14MmAg==} engines: {node: 12.* || 14.* || >= 16} + ember-page-title@8.2.3: + resolution: {integrity: sha512-9XH4EVPCpSCyXRsLPzdDydU4HgQnaVeJJTrRF0WVh5bZERI9DgxuHv1NPmZU28todHRH91KcBc5nx8kIVJmqUw==} + engines: {node: 16.* || >= 18} + peerDependencies: + ember-source: '>= 3.28.0' + ember-qunit@5.1.5: resolution: {integrity: sha512-2cFA4oMygh43RtVcMaBrr086Tpdhgbn3fVZ2awLkzF/rnSN0D0PSRpd7hAD7OdBPerC/ZYRwzVyGXLoW/Zes4A==} engines: {node: 10.* || 12.* || >= 14.*} @@ -3487,6 +3988,22 @@ packages: '@ember/test-helpers': ^2.4.0 qunit: ^2.13.0 + ember-qunit@8.1.0: + resolution: {integrity: sha512-55/xqvVQwhiNcnh/tCzWyvlYzrYqwDY0/cIPyDQbAxGKtkUt9jCfRUGllfyOofC6LX0fL/0fIi+5e9sg1m6vXw==} + peerDependencies: + '@ember/test-helpers': '>=3.0.3' + ember-source: '>=4.0.0' + qunit: ^2.13.0 + + ember-resolver@11.0.1: + resolution: {integrity: sha512-ucBk3oM+PR+AfYoSUXeQh8cDQS1sSiEKp4Pcgbew5cFMSqPxJfqd1zyZsfQKNTuyubeGmWxBOyMVSTvX2LeCyg==} + engines: {node: 14.* || 16.* || >= 18} + peerDependencies: + ember-source: ^4.8.3 || >= 5.0.0 + peerDependenciesMeta: + ember-source: + optional: true + ember-resolver@8.1.0: resolution: {integrity: sha512-MGD7X2ztZVswGqs1mLgzhZJRhG7XiF6Mg4DgC7xJFWRYQQUHyGJpGdNWY9nXyrYnRIsCrQoL1do41zpxbrB/cg==} engines: {node: '>= 10.*'} @@ -3503,41 +4020,18 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} hasBin: true - ember-source-channel-url@2.0.1: - resolution: {integrity: sha512-YlLUHW9gNvxEaohIj5exykoTZb4xj9ZRTcR4J3svv9S8rjAHJUnHmqC5Fd9onCs+NGxHo7KwR/fDwsfadbDu5Q==} - engines: {node: 8.* || >= 10.*} - hasBin: true - ember-source-channel-url@3.0.0: resolution: {integrity: sha512-vF/8BraOc66ZxIDo3VuNP7iiDrnXEINclJgSJmqwAAEpg84Zb1DHPI22XTXSDA+E8fW5btPUxu65c3ZXi8AQFA==} engines: {node: 10.* || 12.* || >= 14} hasBin: true - ember-source@3.16.10: - resolution: {integrity: sha512-Vh+J1RWntKdovnjBJCwTJyrNDbj0UQ95geQRBk3tA6HCinnqRIAMxj1I2yF8aY19w/ljpsUOdog0RSjEm5oLDg==} - engines: {node: 8.* || 10.* || >= 12.*} - - ember-source@3.20.7: - resolution: {integrity: sha512-WeZ55BRi2kwFQCHydwLfbqJx04ONSrVsGs6IxK0VxNSgtSyQZ0ENLG5O9pad3uR7VeVhspazNPobaY38V8tEow==} - engines: {node: 10.* || >= 12.*} - - ember-source@3.24.7: - resolution: {integrity: sha512-xwftkvyigiO2wl8FkpMt3uXG0cpvq0EQ5K+gsV251sHcQyRdihf4mY3CPRPgCxLvjEpBln8F+mhMbsxpOxI7Eg==} - engines: {node: 10.* || >= 12.*} - ember-source@3.28.12: resolution: {integrity: sha512-HGrBpY6TN+MAi7F6BS8XYtNFG6vtbKE9ttPcyj0Ps+76kP7isCHyN0hk8ecKciLq7JYDqiPDNWjdIXAn2JfhZA==} engines: {node: 10.* || >= 12.*} - ember-source@5.10.0-alpha.4: - resolution: {integrity: sha512-BZHuFrvQvL/FvCtQEo7rZXLQdbRhNPuclO8WYaSJJQGOAdPGMoX6jPC3PEqvzux1jYzd6Wg6IHxoFtRu9skY7Q==} - engines: {node: '>= 16.*'} - peerDependencies: - '@glimmer/component': ^1.1.2 - - ember-source@5.10.0-beta.2: - resolution: {integrity: sha512-mYjpklT3EHHoqbWHbiWBfSyetujmNRnNTXXgyqwkkSNo1S52t/kE9wB70xtYQ66eBmrdrflXFFjv+8gGQ683ig==} - engines: {node: '>= 16.*'} + ember-source@4.12.4: + resolution: {integrity: sha512-HUlNAY+qr/Jm4c/5E11n5w6IvLY7Rr4DxmFv/0LZ3R5LqDSubM1jEmny5zDjOfadMa4pawoCmFFWXVeJEXwppg==} + engines: {node: '>= 14.*'} peerDependencies: '@glimmer/component': ^1.1.2 @@ -3547,24 +4041,50 @@ packages: peerDependencies: '@glimmer/component': ^1.1.2 + ember-template-imports@3.4.2: + resolution: {integrity: sha512-OS8TUVG2kQYYwP3netunLVfeijPoOKIs1SvPQRTNOQX4Pu8xGGBEZmrv0U1YTnQn12Eg+p6w/0UdGbUnITjyzw==} + engines: {node: 12.* || >= 14} + ember-template-lint@3.16.0: resolution: {integrity: sha512-hbP4JefkOLx9tMkrZ3UIvdBNoEnrT7rg6c70tIxpB9F+KpPneDbmpGMBsQVhhK4BirTXIFwAIfnwKcwkIk3bPQ==} engines: {node: '>= 10.24 < 11 || 12.* || >= 14.*'} hasBin: true + ember-template-lint@5.13.0: + resolution: {integrity: sha512-AYxz9S9fVZfHPmTsymc7NwsD7FVmDUZyfC+KYpxDlK0wic7JSQx2FNQNqQSBFRLOuzn7VQ0/+1pX6DGqKDGswg==} + engines: {node: ^14.18.0 || ^16.0.0 || >= 18.0.0} + hasBin: true + ember-template-recast@5.0.3: resolution: {integrity: sha512-qsJYQhf29Dk6QMfviXhUPE+byMOs6iRQxUDHgkj8yqjeppvjHaFG96hZi/NAXJTm/M7o3PpfF5YlmeaKtI9UeQ==} engines: {node: 10.* || 12.* || >= 14.*} hasBin: true + ember-template-recast@6.1.4: + resolution: {integrity: sha512-fCh+rOK6z+/tsdkTbOE+e7f84P6ObnIRQrCCrnu21E4X05hPeradikIkRMhJdxn4NWrxitfZskQDd37TR/lsNQ==} + engines: {node: 12.* || 14.* || >= 16.*} + hasBin: true + + ember-tracked-storage-polyfill@1.0.0: + resolution: {integrity: sha512-eL7lZat68E6P/D7b9UoTB5bB5Oh/0aju0Z7PCMi3aTwhaydRaxloE7TGrTRYU+NdJuyNVZXeGyxFxn2frvd3TA==} + engines: {node: 12.* || >= 14} + ember-try-config@3.0.0: resolution: {integrity: sha512-pNwHS29O1ACczkrxBKRtDY0TzTb7uPnA5eHEe+4NF6qpLK5FVnL3EtgZ8+yVYtnm1If5mZ07rIubw45vaSek7w==} engines: {node: ^4.5 || 6.* || >= 7.*} + ember-try-config@4.0.0: + resolution: {integrity: sha512-jAv7fqYJK7QYYekPc/8Nr7KOqDpv/asqM6F8xcRnbmf9UrD35BkSffY63qUuiD9e0aR5qiMNBIQzH8f65rGDqw==} + engines: {node: 10.* || 12.* || >= 14} + ember-try@1.4.0: resolution: {integrity: sha512-o0SoCH4K8umCf8etphla8FDygKfQGkwY+w47wEuYFVKaESrOZaK63ObnAK7DTKkjJU74Fss2abf+r+pAWpX43g==} engines: {node: 6.* || 8.* || >= 10.*} + ember-try@3.0.0: + resolution: {integrity: sha512-ZYVKYWMnrHSD3vywo7rV76kPCOC9ATIEnGGG/PEKfCcFE0lB26jltRDnOrhORfLKq0JFp62fFxC/4940U+MwRQ==} + engines: {node: 16.* || >= 18.*} + emit-function@0.0.2: resolution: {integrity: sha512-WRHUvrW3lcV45D+IQ9F3Wro5jFjnJcX82IQHo0r47gkajeMEKpJPUeQ4BgbyUb1T1dT17XFkgPwwrg4owU0fRw==} @@ -3614,9 +4134,6 @@ packages: entities@1.1.2: resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} - entities@2.0.3: - resolution: {integrity: sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==} - entities@2.1.0: resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==} @@ -3627,6 +4144,10 @@ packages: resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} engines: {node: '>=0.12'} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} @@ -3691,24 +4212,57 @@ packages: engines: {node: '>=6.0'} hasBin: true + eslint-compat-utils@0.5.1: + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + eslint-config-prettier@8.10.0: resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true peerDependencies: eslint: '>=7.0.0' + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-formatter-kakoune@1.0.0: + resolution: {integrity: sha512-Uk/TVLt6Nf6Xoz7C1iYuZjOSdJxe5aaauGRke8JhKeJwD66Y61/pY2FjtLP04Ooq9PwV34bzrkKkU2UZ5FtDRA==} + eslint-plugin-ember@10.6.1: resolution: {integrity: sha512-R+TN3jwhYQ2ytZCA1VkfJDZSGgHFOHjsHU1DrBlRXYRepThe56PpuGxywAyDvQ7inhoAz3e6G6M60PzpvjzmNg==} engines: {node: 10.* || 12.* || >= 14} peerDependencies: eslint: '>= 6' + eslint-plugin-ember@11.12.0: + resolution: {integrity: sha512-7Ow1ky5JnRR0k3cxuvgYi4AWTe9DzGjlLgOJbU5VABLgr7Q0iq3ioC+YwAP79nV48cpw2HOgMgkZ1MynuIg59g==} + engines: {node: 14.* || 16.* || >= 18} + peerDependencies: + eslint: '>= 7' + + eslint-plugin-es-x@7.7.0: + resolution: {integrity: sha512-aP3qj8BwiEDPttxQkZdI221DLKq9sI/qHolE2YSQL1/9+xk7dTV+tB1Fz8/IaCA+lnLA1bDEnvaS2LKs0k2Uig==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8' + eslint-plugin-es@3.0.1: resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' + eslint-plugin-n@16.6.2: + resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + eslint: '>=7.0.0' + eslint-plugin-node@11.1.0: resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} engines: {node: '>=8.10.0'} @@ -3726,10 +4280,28 @@ packages: eslint-config-prettier: optional: true + eslint-plugin-prettier@5.1.3: + resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + eslint-plugin-qunit@6.2.0: resolution: {integrity: sha512-KvPmkIC2MHpfRxs/r8WUeeGkG6y+3qwSi2AZIBtjcM/YG6Z3k0GxW5Hbu3l7X0TDhljVCeBb9Q5puUkHzl83Mw==} engines: {node: 10.x || 12.x || >=14.0.0} + eslint-plugin-qunit@8.1.1: + resolution: {integrity: sha512-j3xhiAf2Wvr8Dfwl5T6tlJ+F55vqYE9ZdAHUOTzq1lGerYrXzOS46RvK4SSWug2D8sl3ZYr2lA4/hgVXgLloxw==} + engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} + eslint-scope@4.0.3: resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==} engines: {node: '>=4.0.0'} @@ -3738,6 +4310,10 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-utils@2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} engines: {node: '>=6'} @@ -3756,11 +4332,20 @@ packages: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint@7.32.0: resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} engines: {node: ^10.12.0 || >=12.0.0} hasBin: true + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + esm@3.2.25: resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} engines: {node: '>=6'} @@ -3769,6 +4354,10 @@ packages: resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} engines: {node: ^10.12.0 || >=12.0.0} + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + esprima@3.0.0: resolution: {integrity: sha512-xoBq/MIShSydNZOkjkoCEjqod963yHNXTLC40ypBhop6yPqflPz/vTinmCfSrGcywVLnSftRf6a0kJLdFdzemw==} engines: {node: '>=0.10.0'} @@ -3795,6 +4384,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + estree-walker@1.0.1: resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} @@ -3903,21 +4495,17 @@ packages: fast-ordered-set@1.0.3: resolution: {integrity: sha512-MxBW4URybFszOx1YlACEoK52P6lE3xiFcPaGCUZ7QQOZ6uJXKo++Se8wa31SjcZ+NC/fdAWX7UtKEfaGgHS2Vg==} - fast-sourcemap-concat@1.4.0: - resolution: {integrity: sha512-x90Wlx/2C83lfyg7h4oguTZN4MyaVfaiUSJQNpU+YEA0Odf9u659Opo44b0LfoVg9G/bOE++GdID/dkyja+XcA==} - engines: {node: '>= 4'} - fast-sourcemap-concat@2.1.1: resolution: {integrity: sha512-7h9/x25c6AQwdU3mA8MZDUMR3UCy50f237egBrBkuwjnUZSmfu4ptCf91PZSKzON2Uh5VvIHozYKWcPPgcjxIw==} engines: {node: 10.* || >= 12.*} + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - faye-websocket@0.10.0: - resolution: {integrity: sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==} - engines: {node: '>=0.4.0'} - faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} @@ -3941,6 +4529,14 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@7.0.2: + resolution: {integrity: sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==} + engines: {node: '>=12.0.0'} + + file-entry-cache@9.0.0: + resolution: {integrity: sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==} + engines: {node: '>=18'} + file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -3948,10 +4544,6 @@ packages: resolution: {integrity: sha512-Dx770ai81ohflojxhU+oG+Z2QGvKdYxgEr9OSA8UVrqhwNHjfH9A8f5NKfg83fEH8ZFA5N5llJo5T3PIoZ4CRA==} engines: {node: '>= 10.4.0'} - filesize@4.2.1: - resolution: {integrity: sha512-bP82Hi8VRZX/TUBKfE24iiUGsB/sfm2WUrwTQyAzQrhO3V9IhcBBNBXMyzLY5orACxRyYJ3d2HeRVX+eFv4lmA==} - engines: {node: '>= 0.4.0'} - filesize@6.4.0: resolution: {integrity: sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==} engines: {node: '>= 0.4.0'} @@ -4034,10 +4626,6 @@ packages: resolution: {integrity: sha512-sP0gGMTr4iQ8Kdq5Ez0CVJOZOGWqzP5dv/veOTdFNywioKjkNWCHBi1q65DMpcNGUGeoOUWehyji274Q2wRgxA==} engines: {node: 10.* || >= 12.*} - fixturify-project@5.2.0: - resolution: {integrity: sha512-7H20FpTbA8P586gS/5SuVmKYLBdOs1oPTF7R2If5lhlcmI+ht48p9atbBtD6kOIuRUPrx6W2yLxUCToBl8W22w==} - engines: {node: '>= 14.*'} - fixturify@1.3.0: resolution: {integrity: sha512-tL0svlOy56pIMMUQ4bU1xRe6NZbFSa/ABTWMxW2mH38lFGc9TrNAKWcMBQ7eIjo3wqSS8f2ICabFaatFyFmrVQ==} engines: {node: 6.* || 8.* || >= 10.*} @@ -4050,6 +4638,10 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@5.0.0: + resolution: {integrity: sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==} + engines: {node: '>=18'} + flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} @@ -4205,6 +4797,10 @@ packages: resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==} engines: {node: '>=10'} + get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + get-stream@3.0.0: resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} engines: {node: '>=4'} @@ -4225,6 +4821,9 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} + get-tsconfig@4.7.5: + resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + get-value@2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} @@ -4263,6 +4862,10 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -4292,10 +4895,18 @@ packages: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} engines: {node: '>=0.10.0'} + global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + global-prefix@1.0.2: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} + global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -4327,6 +4938,13 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} + globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + globjoin@0.1.4: + resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} @@ -4351,6 +4969,9 @@ packages: graceful-readlink@1.0.1: resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==} + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + growly@1.3.0: resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} @@ -4359,6 +4980,10 @@ packages: engines: {node: '>=0.4.7'} hasBin: true + hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + has-ansi@2.0.0: resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} engines: {node: '>=0.10.0'} @@ -4436,9 +5061,6 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - heimdalljs-fs-monitor@0.2.3: - resolution: {integrity: sha512-fYAvqSP0CxeOjLrt61B4wux/jqZzdZnS2xfb2oc14NP6BTZ8gtgtR2op6gKFakOR8lm8GN9Xhz1K4A1ZvJ4RQw==} - heimdalljs-fs-monitor@1.1.1: resolution: {integrity: sha512-BHB8oOXLRlrIaON0MqJSEjGVPDyqt2Y6gu+w2PaEZjrCxeVtZG7etEZp7M4ZQ80HNvnr66KIQ2lot2qdeG8HgQ==} @@ -4466,9 +5088,6 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} @@ -4485,6 +5104,10 @@ packages: resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} engines: {node: '>=10'} + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + http-cache-semantics@3.8.1: resolution: {integrity: sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==} @@ -4563,6 +5186,10 @@ packages: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -4571,6 +5198,10 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + infer-owner@1.0.4: resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} @@ -4607,6 +5238,10 @@ packages: resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} engines: {node: '>=8.0.0'} + inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + inquirer@9.2.23: resolution: {integrity: sha512-kod5s+FBPIDM2xiy9fu+6wdU/SkK5le5GS9lh4FEBjBHqiMgD9lLFbCbuqFNAjNL2ZOy9Wd9F694IOzN9pZHBA==} engines: {node: '>=18'} @@ -4663,6 +5298,10 @@ packages: is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -4799,6 +5438,9 @@ packages: resolution: {integrity: sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==} engines: {node: '>=0.10.0'} + is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -4865,10 +5507,6 @@ packages: isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isbinaryfile@3.0.3: - resolution: {integrity: sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==} - engines: {node: '>=0.6.0'} - isbinaryfile@4.0.10: resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} engines: {node: '>= 8.0.0'} @@ -4948,10 +5586,6 @@ packages: canvas: optional: true - jsesc@0.3.0: - resolution: {integrity: sha512-UHQmAeTXV+iwEk0aHheJRqo6Or90eDxI6KIYpHSjKLXKuKlPt1CQ7tGBerFcFA8uKU5mYxiPMlckmFptd5XZzA==} - hasBin: true - jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -5022,6 +5656,9 @@ packages: keyv@3.0.0: resolution: {integrity: sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==} + keyv@3.1.0: + resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -5037,6 +5674,19 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} + known-css-properties@0.29.0: + resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} + + known-css-properties@0.31.0: + resolution: {integrity: sha512-sBPIUGTNF0czz0mwGGUoKKJC8Q7On1GPbCSFPfyEsfHb2DyBG0Y4QtV+EVWpINSaiGKZblDNuF5AezxSgOhesQ==} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + latest-version@5.1.0: resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} engines: {node: '>=8'} @@ -5058,6 +5708,9 @@ packages: line-stream@0.0.0: resolution: {integrity: sha512-Sx68INB+sWLEHnpTyMHsqJV8hrnf9ZbyRASek5MInROlvYkZjnWLBMsFgIE57zG3SY1tpJhbJucpbrhNU3FIDg==} + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + linkify-it@2.2.0: resolution: {integrity: sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==} @@ -5067,16 +5720,9 @@ packages: linkify-it@4.0.1: resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} - livereload-js@2.4.0: - resolution: {integrity: sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==} - livereload-js@3.4.1: resolution: {integrity: sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==} - load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} - loader-runner@2.4.0: resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==} engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} @@ -5096,6 +5742,9 @@ packages: loader.js@4.7.0: resolution: {integrity: sha512-9M2KvGT6duzGMgkOcTkWb+PR/Q2Oe54df/tLgHGVmFpAmtqJ553xJh6N63iFYI2yjo2PeJXbS5skHi/QpJq4vA==} + locate-character@2.0.5: + resolution: {integrity: sha512-n2GmejDXtOPBAZdIiEFy5dJ5N38xBCXLNOtw2WpB9kGh6pnrEuKlwYI+Tkpofc4wDtVXHtoAOJaMRlYG/oYaxg==} + locate-path@2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} @@ -5146,6 +5795,9 @@ packages: lodash.assignin@4.2.0: resolution: {integrity: sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==} + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.castarray@4.4.0: resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} @@ -5167,9 +5819,6 @@ packages: lodash.flatten@3.0.2: resolution: {integrity: sha512-jCXLoNcqQRbnT/KWZq2fIREHWeczrzpTR0vsycm96l/pu5hGeAntVBG0t7GuM/2wFqmnZs3d1eGptnAH2E8+xQ==} - lodash.foreach@4.5.0: - resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} - lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} @@ -5182,6 +5831,9 @@ packages: lodash.keys@3.1.2: resolution: {integrity: sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==} + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -5251,9 +5903,15 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} + magic-string@0.24.1: + resolution: {integrity: sha512-YBfNxbJiixMzxW40XqJEIldzHyh5f7CZKalo1uZffevyrPEX8Qgo9s0dmcORLHdV47UyvJg8/zD+6hQG3qvJrA==} + magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -5277,13 +5935,18 @@ packages: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} + map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + map-visit@1.0.0: resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} engines: {node: '>=0.10.0'} - markdown-it-terminal@0.1.0: - resolution: {integrity: sha512-Pq9BTUtEzuO6ZxNU7xYczEUHWkkCS6mE5FjpV6VnmbT56re1RCnO5nAE2ZehzY5H+uvVSNuwiqvoHaJj8+tssA==} - markdown-it-terminal@0.2.1: resolution: {integrity: sha512-e8hbK9L+IyFac2qY05R7paP+Fqw1T4pSQW3miK3VeG9QmpqBjg5Qzjv/v6C7YNxSNRS2Kp8hUFtm5lWU9eK4lw==} @@ -5292,10 +5955,6 @@ packages: peerDependencies: markdown-it: '>= 13.0.0' - markdown-it@11.0.1: - resolution: {integrity: sha512-aU1TzmBKcWNNYvH9pjq6u92BML+Hz3h5S/QpfTFwiQF852pLT+9qHsrhM9JYipkOXZxGn+sGH8oyJE9FD9WezQ==} - hasBin: true - markdown-it@12.3.2: resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==} hasBin: true @@ -5308,10 +5967,6 @@ packages: resolution: {integrity: sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==} hasBin: true - markdown-it@9.1.0: - resolution: {integrity: sha512-xHKG4C8iPriyfu/jc2hsCC045fKrMQ0VexX2F1FGYiRxDxqMB2aAhF8WauJ3fltn2kb90moGBkiiEdooGIg55w==} - hasBin: true - matcher-collection@1.1.2: resolution: {integrity: sha512-YQ/teqaOIIfUHedRam08PB3NK7Mjct6BvzRnJmpGDm8uFXpNr1sbY4yuflI5JcEs6COpYA0FpRQhSDBf1tT95g==} @@ -5319,6 +5974,9 @@ packages: resolution: {integrity: sha512-daE62nS2ZQsDg9raM0IlZzLmI2u+7ZapXBwdoeBUKAYERPDDIc0qNqA8E0Rp2D+gspKR7BgIFP52GeujaGXWeQ==} engines: {node: 6.* || 8.* || >= 10.*} + mathml-tag-names@2.1.3: + resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} @@ -5349,9 +6007,13 @@ packages: memory-streams@0.1.3: resolution: {integrity: sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA==} - memorystream@0.3.1: - resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} - engines: {node: '>= 0.10.0'} + meow@10.1.5: + resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} @@ -5410,6 +6072,10 @@ packages: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + mini-css-extract-plugin@2.9.0: resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} engines: {node: '>= 12.13.0'} @@ -5437,10 +6103,14 @@ packages: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + minimist@0.2.4: resolution: {integrity: sha512-Pkrrm8NjyQ8yVt8Am9M+yUt74zE3iokhzbG1bFVNjLB92vwM71hf40RkEsryg98BujhVOncKm/C1xROxZ030LQ==} @@ -5498,10 +6168,6 @@ packages: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} - mkdirp-infer-owner@2.0.0: - resolution: {integrity: sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==} - engines: {node: '>=10'} - mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -5623,11 +6289,12 @@ packages: resolution: {integrity: sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==} hasBin: true - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} - normalize-package-data@6.0.1: - resolution: {integrity: sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==} + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} engines: {node: ^16.14.0 || >=18.0.0} normalize-path@2.1.1: @@ -5650,10 +6317,6 @@ packages: resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - npm-normalize-package-bin@2.0.0: - resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - npm-normalize-package-bin@3.0.1: resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5666,9 +6329,6 @@ packages: resolution: {integrity: sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==} engines: {node: ^16.14.0 || >=18.0.0} - npm-package-arg@6.1.1: - resolution: {integrity: sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==} - npm-package-arg@8.1.5: resolution: {integrity: sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==} engines: {node: '>=10'} @@ -5677,11 +6337,6 @@ packages: resolution: {integrity: sha512-Udm1f0l2nXb3wxDpKjfohwgdFUSV50UVwzEIpDXVsbDMXVIEF81a/i0UhuQbhrPMMmdiq3+YMFLFIRVLs3hxQw==} engines: {node: ^16.14.0 || >=18.0.0} - npm-run-all@4.1.5: - resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} - engines: {node: '>= 4'} - hasBin: true - npm-run-path@2.0.2: resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} @@ -5904,9 +6559,13 @@ packages: parse-github-repo-url@1.4.1: resolution: {integrity: sha512-bSWyzBKqcSL4RrncTpGsEKoJ7H8a4L3++ifTAbTFeMHyq2wRV+42DGmQcHIrJIvdcacjIOxEuKH/w4tthF17gg==} - parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-ms@1.0.1: + resolution: {integrity: sha512-LpH1Cf5EYuVjkBvCDBYvkUPh+iv2bk3FHflxHkpCYT0/FZ1d3N3uJaLiHr4yGuMcFUhv6eAivitTvWZI4B/chg==} + engines: {node: '>=0.10.0'} parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} @@ -5983,10 +6642,6 @@ packages: path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -6002,11 +6657,6 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - pidtree@0.3.1: - resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} - engines: {node: '>=0.10'} - hasBin: true - pify@3.0.0: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} @@ -6079,6 +6729,21 @@ packages: peerDependencies: postcss: ^8.1.0 + postcss-resolve-nested-selector@0.1.1: + resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} + + postcss-safe-parser@6.0.0: + resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.3.3 + + postcss-safe-parser@7.0.0: + resolution: {integrity: sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + postcss-selector-parser@6.1.0: resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} engines: {node: '>=4'} @@ -6111,6 +6776,15 @@ packages: engines: {node: '>=10.13.0'} hasBin: true + prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} + engines: {node: '>=14'} + hasBin: true + + pretty-ms@3.2.0: + resolution: {integrity: sha512-ZypexbfVUGTFxb0v+m1bUyy92DHe5SyYlnyY0msyms5zd3RwyvNgyxZZsXXgoyzlxjx5MiqtXUdhUfvQbe0A2Q==} + engines: {node: '>=4'} + printf@0.6.1: resolution: {integrity: sha512-is0ctgGdPJ5951KulgfzvHGwJtZ5ck8l042vRkV6jrkpBzTmb/lueTqguWHy2JfVA+RY6gFVlaZgUS0j7S/dsw==} engines: {node: '>= 0.9.0'} @@ -6164,9 +6838,8 @@ packages: resolution: {integrity: sha512-KYcnXctWUWyVD3W3Ye0ZDuA1N8Szrh85cVCxpG6xYrOk/0CttRtYCmU30nWsUch0NuExQQ63QXvzRE6FLimZmg==} engines: {node: 10.* || >= 12.*} - promise.prototype.finally@3.1.8: - resolution: {integrity: sha512-aVDtsXOml9iuMJzUco9J1je/UrIT3oMYfWkCTiUhkt+AvZw72q4dUZnR/R/eB3h5GeAagQVXvM1ApoYniJiwoA==} - engines: {node: '>= 0.4'} + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} @@ -6219,6 +6892,10 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + quick-temp@0.1.8: resolution: {integrity: sha512-YsmIFfD9j2zaFwJkzI6eMG7y0lQP7YeWzgtFgNl38pGWZBSXJooZbOWwkcRot7Vt0Fg9L23pX0tqWU3VvLDsiA==} @@ -6230,6 +6907,13 @@ packages: resolution: {integrity: sha512-YwSqcLjQcRI0fUFpaSWwU10KIJPFW5Qh+d3cT5DOgx81dypRuUSiPkKFmBY/CDs/R1KdHRadthkcXg2rqAon8Q==} engines: {node: 10.* || >= 12.*} + qunit-dom@2.0.0: + resolution: {integrity: sha512-mElzLN99wYPOGekahqRA+mq7NcThXY9c+/tDkgJmT7W5LeZAFNyITr2rFKNnCbWLIhuLdFw88kCBMrJSfyBYpA==} + engines: {node: 12.* || 14.* || >= 16.*} + + qunit-theme-ember@1.0.0: + resolution: {integrity: sha512-vdMVVo6ecdCkWttMTKeyq1ZTLGHcA6zdze2zhguNuc3ritlJMhOXY5RDseqazOwqZVfCg3rtlmL3fMUyIzUyFQ==} + qunit@2.21.0: resolution: {integrity: sha512-kJJ+uzx5xDWk0oRrbOZ3zsm+imPULE58ZMIrNl+3POZl4a1k6VXj2E4OiqTmZ9j6hh9egE3kNgnAti9Q+BG6Yw==} engines: {node: '>=10'} @@ -6257,13 +6941,13 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true - read-cmd-shim@3.0.1: - resolution: {integrity: sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + read-pkg-up@8.0.0: + resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} + engines: {node: '>=12'} - read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} - engines: {node: '>=4'} + read-pkg@6.0.0: + resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} + engines: {node: '>=12'} read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} @@ -6291,6 +6975,10 @@ packages: resolution: {integrity: sha512-XNvYvkfdAN9QewbrxeTOjgINkdY/odTgTS56ZNEWL9Ml0weT4T3sFtvnTuF+Gxyu46ANcRm1ntrF6F5LAJPAaQ==} engines: {node: '>= 4'} + redent@4.0.0: + resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} + engines: {node: '>=12'} + redeyed@1.0.1: resolution: {integrity: sha512-8eEWsNCkV2rvwKLS1Cvp5agNjMhwRe2um+y32B2+3LqOzg4C9BBPs6vzAfV16Ivb8B9HPNKIqd8OrdBws8kNlQ==} @@ -6375,6 +7063,10 @@ packages: resolution: {integrity: sha512-XdG5Z1nZdS37i8JO34/eV/GbACKU4K7jncZ/THKdtCMH0WAMsmjebZ7sXVpbp9qYI7rAviqGClP/porKcdbIPQ==} engines: {node: '>=4'} + remote-git-tags@3.0.0: + resolution: {integrity: sha512-C9hAO4eoEsX+OXA4rla66pXZQ+TLQ8T9dttgQj18yuKlPMTVkIkdYXvlMC55IuUsIkV6DpmQYi10JKFLaU+l7w==} + engines: {node: '>=8'} + remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} @@ -6401,6 +7093,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + require-relative@0.8.7: + resolution: {integrity: sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==} + requireindex@1.2.0: resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} engines: {node: '>=0.10.5'} @@ -6422,6 +7117,10 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + resolve-package-path@1.2.7: resolution: {integrity: sha512-fVEKHGeK85bGbVFuwO9o1aU0n3vqQGrezPc51JGu9UTXpFQfWq5qCeKxyaRUSvephs+06c5j5rPq/dzHGEo8+Q==} @@ -6441,6 +7140,9 @@ packages: resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} engines: {node: '>= 0.8'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated @@ -6499,6 +7201,13 @@ packages: resolution: {integrity: sha512-/VpLMtDy+8wwRlDANuYmDa9ss/knGsAgrDhM+tEwB1npHwNu4DYNmDfUL55csse/GHs9Q+SMT/rw9uiaZ3pnzA==} engines: {node: '>=10'} + rollup-pluginutils@2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + + rollup@0.57.1: + resolution: {integrity: sha512-I18GBqP0qJoJC1K1osYjreqA8VAKovxuI3I81RSk0Dmr4TgloI0tAULjZaox8OsJ+n7XRrhH6i0G2By/pj1LCA==} + hasBin: true + rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} @@ -6588,10 +7297,6 @@ packages: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} engines: {node: '>=10'} - scenario-tester@2.1.2: - resolution: {integrity: sha512-fuwZoavM2v3CyfghIc3gCi36vFDSzIAW1mdgxjUXVQIsoR0aTG657CMnwYAagIN8Aqn1Qt9oJMuqIpggOvybQg==} - hasBin: true - schema-utils@1.0.0: resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} engines: {node: '>= 4'} @@ -6710,6 +7415,10 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} @@ -6788,10 +7497,6 @@ packages: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} deprecated: See https://github.com/lydell/source-map-url#deprecated - source-map@0.1.43: - resolution: {integrity: sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==} - engines: {node: '>=0.8.0'} - source-map@0.4.4: resolution: {integrity: sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==} engines: {node: '>=0.8.0'} @@ -6808,13 +7513,12 @@ packages: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead - sourcemap-validator@1.1.1: - resolution: {integrity: sha512-pq6y03Vs6HUaKo9bE0aLoksAcpeOo9HZd7I8pI6O480W/zxNZ9U32GfzgtPP0Pgc/K1JHna569nAbOk3X8/Qtw==} - engines: {node: ^0.10 || ^4.5 || 6.* || >= 7.*} - spawn-args@0.2.0: resolution: {integrity: sha512-73BoniQDcRWgnLAf/suKH6V5H54gd1KLzwYN9FB6J/evqTV33htH9xwV/4BHek+++jzxpVlZQKKZkqstPQPmQg==} + spawn-command@0.0.2: + resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} + spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -6899,10 +7603,6 @@ packages: resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} engines: {node: '>= 0.4'} - string.prototype.padend@3.1.6: - resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} - engines: {node: '>= 0.4'} - string.prototype.trim@1.2.9: resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} @@ -6959,6 +7659,10 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + strip-indent@4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -6973,11 +7677,43 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 + style-search@0.1.0: + resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} + styled_string@0.0.1: resolution: {integrity: sha512-DU2KZiB6VbPkO2tGSqQ9n96ZstUPjW7X4sGO6V2m1myIQluX0p1Ol8BrA/l6/EesqhMqXOIXs3cJNOy1UuU2BA==} - sum-up@1.0.3: - resolution: {integrity: sha512-zw5P8gnhiqokJUWRdR6F4kIIIke0+ubQSGyYUY506GCbJWtV7F6Xuy0j6S125eSX2oF+a8KdivsZ8PlVEH0Mcw==} + stylelint-config-recommended@13.0.0: + resolution: {integrity: sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==} + engines: {node: ^14.13.1 || >=16.0.0} + peerDependencies: + stylelint: ^15.10.0 + + stylelint-config-standard@34.0.0: + resolution: {integrity: sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==} + engines: {node: ^14.13.1 || >=16.0.0} + peerDependencies: + stylelint: ^15.10.0 + + stylelint-prettier@4.1.0: + resolution: {integrity: sha512-dd653q/d1IfvsSQshz1uAMe+XDm6hfM/7XiFH0htYY8Lse/s5ERTg7SURQehZPwVvm/rs7AsFhda9EQ2E9TS0g==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + prettier: '>=3.0.0' + stylelint: '>=15.8.0' + + stylelint@15.11.0: + resolution: {integrity: sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true + + stylelint@16.6.1: + resolution: {integrity: sha512-yNgz2PqWLkhH2hw6X9AweV9YvoafbAD5ZsFdKN9BvSDVwGvPh+AUIrn7lYwy1S7IHmtFin75LLfX1m0D2tHu8Q==} + engines: {node: '>=18.12.0'} + hasBin: true + + sum-up@1.0.3: + resolution: {integrity: sha512-zw5P8gnhiqokJUWRdR6F4kIIIke0+ubQSGyYUY506GCbJWtV7F6Xuy0j6S125eSX2oF+a8KdivsZ8PlVEH0Mcw==} supports-color@2.0.0: resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} @@ -6995,10 +7731,17 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + supports-hyperlinks@3.0.0: + resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} + engines: {node: '>=14.18'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -7012,6 +7755,10 @@ packages: resolution: {integrity: sha512-vngT2JmkSapgq0z7uIoYtB9kWOOzMihAAYq/D3Pjm/ODOGMgS4r++B+OZ09U4hWR6EaOdy9eqQ7/8ygbH3wehA==} engines: {node: 8.* || >= 10.*} + synckit@0.8.8: + resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + engines: {node: ^14.18.0 || >=16.0.0} + table@6.8.2: resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} engines: {node: '>=10.0.0'} @@ -7032,10 +7779,6 @@ packages: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} - temp@0.9.1: - resolution: {integrity: sha512-WMuOgiua1xb5R56lE0eH6ivpVmg/lq2OHm4+LtT/xtEtPQ+sz6N3bBM6WZ5FvO1lO4IKIOb43qnhoc4qxP5OeA==} - engines: {node: '>=6.0.0'} - temp@0.9.4: resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} engines: {node: '>=6.0.0'} @@ -7109,6 +7852,10 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + time-zone@1.0.0: + resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} + engines: {node: '>=4'} + timed-out@4.0.1: resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} engines: {node: '>=0.10.0'} @@ -7120,9 +7867,6 @@ packages: tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - tiny-lr@1.1.1: - resolution: {integrity: sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==} - tiny-lr@2.0.0: resolution: {integrity: sha512-f6nh0VMRvhGx4KCeK1lQ/jaL0Zdb5WdR+Jk8q9OSUQnaSDxAEGH1fgqLZ+cMl5EW3F2MGnCsalBO1IsnnogW1Q==} @@ -7194,6 +7938,13 @@ packages: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} engines: {node: '>=8'} + tracked-built-ins@3.3.0: + resolution: {integrity: sha512-ewKFrW/AQs05oLPM5isOUb/1aOwBRfHfmF408CCzTk21FLAhKrKVOP5Q5ebX+zCT4kvg81PGBGwrBiEGND1nWA==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + tree-sync@1.4.0: resolution: {integrity: sha512-YvYllqh3qrR5TAYZZTXdspnIhlKAYezPYw11ntmweoceu4VK+keN356phHRIIo1d+RDmLpHZrUlmxga2gc9kSQ==} @@ -7201,6 +7952,10 @@ packages: resolution: {integrity: sha512-OLWW+Nd99NOM53aZ8ilT/YpEiOo6mXD3F4/wLbARqybSZ3Jb8IxHK5UGVbZaae0wtXAyQshVV+SeqVBik+Fbmw==} engines: {node: '>=8'} + trim-newlines@4.1.1: + resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} + engines: {node: '>=12'} + trim-right@1.0.1: resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==} engines: {node: '>=0.10.0'} @@ -7230,9 +7985,9 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} @@ -7348,6 +8103,10 @@ packages: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} + upath@2.0.1: + resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} + engines: {node: '>=4'} + update-browserslist-db@1.0.16: resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} hasBin: true @@ -7399,15 +8158,14 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + v8-compile-cache@2.4.0: resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} @@ -7528,6 +8286,9 @@ packages: whatwg-encoding@1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + whatwg-mimetype@2.3.0: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} @@ -7603,9 +8364,9 @@ packages: write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} @@ -7744,6 +8505,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/eslint-parser@7.24.7(@babel/core@7.24.7)(eslint@8.57.0)': + dependencies: + '@babel/core': 7.24.7 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.57.0 + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + '@babel/generator@7.24.7': dependencies: '@babel/types': 7.24.7 @@ -9186,6 +9955,26 @@ snapshots: exec-sh: 0.3.6 minimist: 1.2.8 + '@colors/colors@1.5.0': + optional: true + + '@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1)': + dependencies: + '@csstools/css-tokenizer': 2.3.1 + + '@csstools/css-tokenizer@2.3.1': {} + + '@csstools/media-query-list-parser@2.1.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)': + dependencies: + '@csstools/css-parser-algorithms': 2.6.3(@csstools/css-tokenizer@2.3.1) + '@csstools/css-tokenizer': 2.3.1 + + '@csstools/selector-specificity@3.1.1(postcss-selector-parser@6.1.0)': + dependencies: + postcss-selector-parser: 6.1.0 + + '@dual-bundle/import-meta-resolve@4.1.0': {} + '@ember-data/rfc395-data@0.0.4': {} '@ember-template-lint/todo-utils@10.0.0': @@ -9231,6 +10020,40 @@ snapshots: - '@glint/template' - supports-color + '@ember/test-helpers@3.3.0(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1))(webpack@5.92.1)': + dependencies: + '@ember/test-waiters': 3.1.0 + '@embroider/macros': 1.16.5 + '@simple-dom/interface': 1.4.0 + broccoli-debug: 0.6.5 + broccoli-funnel: 3.0.8 + dom-element-descriptors: 0.5.0 + ember-auto-import: 2.7.4(webpack@5.92.1) + ember-cli-babel: 7.26.11 + ember-cli-htmlbars: 6.3.0 + ember-source: 4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1) + transitivePeerDependencies: + - '@glint/template' + - supports-color + - webpack + + '@ember/test-helpers@3.3.0(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1))(webpack@5.92.1)': + dependencies: + '@ember/test-waiters': 3.1.0 + '@embroider/macros': 1.16.5 + '@simple-dom/interface': 1.4.0 + broccoli-debug: 0.6.5 + broccoli-funnel: 3.0.8 + dom-element-descriptors: 0.5.0 + ember-auto-import: 2.7.4(webpack@5.92.1) + ember-cli-babel: 7.26.11 + ember-cli-htmlbars: 6.3.0 + ember-source: 5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1) + transitivePeerDependencies: + - '@glint/template' + - supports-color + - webpack + '@ember/test-waiters@3.1.0': dependencies: calculate-cache-key-for-tree: 2.0.0 @@ -9258,6 +10081,15 @@ snapshots: '@embroider/shared-internals': 0.50.2 semver: 7.6.2 + '@embroider/addon-shim@1.8.9': + dependencies: + '@embroider/shared-internals': 2.6.2(supports-color@8.1.1) + broccoli-funnel: 3.0.8 + common-ancestor-path: 1.0.1 + semver: 7.6.2 + transitivePeerDependencies: + - supports-color + '@embroider/babel-loader-9@3.1.1(@embroider/core@3.4.14)(supports-color@8.1.1)(webpack@5.92.1)': dependencies: '@babel/core': 7.24.7(supports-color@8.1.1) @@ -9405,6 +10237,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@embroider/test-setup@3.0.3(@embroider/compat@3.5.5(@embroider/core@3.4.14))(@embroider/core@3.4.14)(@embroider/webpack@4.0.4(@embroider/core@3.4.14)(webpack@5.92.1))': + dependencies: + lodash: 4.17.21 + resolve: 1.22.8 + optionalDependencies: + '@embroider/compat': 3.5.5(@embroider/core@3.4.14) + '@embroider/core': 3.4.14 + '@embroider/webpack': 4.0.4(@embroider/core@3.4.14)(webpack@5.92.1) + '@embroider/test-setup@4.0.0(@embroider/compat@3.5.5(@embroider/core@3.4.14))(@embroider/core@3.4.14)(@embroider/webpack@4.0.4(@embroider/core@3.4.14)(webpack@5.92.1))': dependencies: lodash: 4.17.21 @@ -9454,6 +10295,13 @@ snapshots: - canvas - utf-8-validate + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.10.1': {} + '@eslint/eslintrc@0.4.3': dependencies: ajv: 6.12.6 @@ -9468,6 +10316,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.5(supports-color@8.1.1) + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.0': {} + '@gar/promisify@1.1.3': {} '@glimmer/compiler@0.92.0': @@ -9524,6 +10388,10 @@ snapshots: dependencies: '@glimmer/env': 0.1.7 + '@glimmer/global-context@0.84.3': + dependencies: + '@glimmer/env': 0.1.7 + '@glimmer/global-context@0.92.0': {} '@glimmer/interfaces@0.65.4': @@ -9593,6 +10461,14 @@ snapshots: '@glimmer/util': 0.65.4 '@glimmer/validator': 0.65.4 + '@glimmer/reference@0.84.3': + dependencies: + '@glimmer/env': 0.1.7 + '@glimmer/global-context': 0.84.3 + '@glimmer/interfaces': 0.84.3 + '@glimmer/util': 0.84.3 + '@glimmer/validator': 0.84.3 + '@glimmer/reference@0.92.0': dependencies: '@glimmer/env': 0.1.7 @@ -9669,6 +10545,11 @@ snapshots: '@glimmer/env': 0.1.7 '@glimmer/global-context': 0.65.4 + '@glimmer/validator@0.84.3': + dependencies: + '@glimmer/env': 0.1.7 + '@glimmer/global-context': 0.84.3 + '@glimmer/validator@0.92.0': dependencies: '@glimmer/env': 0.1.7 @@ -9682,6 +10563,12 @@ snapshots: transitivePeerDependencies: - '@babel/core' + '@glimmer/vm-babel-plugins@0.84.2(@babel/core@7.24.7)': + dependencies: + babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.7) + transitivePeerDependencies: + - '@babel/core' + '@glimmer/vm-babel-plugins@0.92.0(@babel/core@7.24.7)': dependencies: babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.7) @@ -9702,6 +10589,14 @@ snapshots: '@handlebars/parser@2.0.0': {} + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.5(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + '@humanwhocodes/config-array@0.5.0': dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -9710,8 +10605,12 @@ snapshots: transitivePeerDependencies: - supports-color + '@humanwhocodes/module-importer@1.0.1': {} + '@humanwhocodes/object-schema@1.2.1': {} + '@humanwhocodes/object-schema@2.0.3': {} + '@inquirer/figures@1.0.3': {} '@isaacs/cliui@8.0.2': @@ -9745,6 +10644,16 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + '@lint-todo/utils@13.1.1': + dependencies: + '@types/eslint': 8.56.10 + find-up: 5.0.0 + fs-extra: 9.1.0 + proper-lockfile: 4.1.2 + slash: 3.0.0 + tslib: 2.6.3 + upath: 2.0.1 + '@ljharb/through@2.3.13': dependencies: call-bind: 1.0.7 @@ -9767,6 +10676,10 @@ snapshots: jju: 1.4.0 read-yaml-file: 1.1.0 + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': + dependencies: + eslint-scope: 5.1.1 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -9808,7 +10721,7 @@ snapshots: glob: 10.4.2 hosted-git-info: 7.0.2 json-parse-even-better-errors: 3.0.2 - normalize-package-data: 6.0.1 + normalize-package-data: 6.0.2 proc-log: 4.2.0 semver: 7.6.2 transitivePeerDependencies: @@ -9902,6 +10815,8 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@pkgr/core@0.1.1': {} + '@pnpm/constants@7.1.1': {} '@pnpm/error@5.0.3': @@ -9952,12 +10867,16 @@ snapshots: '@tootallnate/once@1.1.2': {} + '@types/acorn@4.0.6': + dependencies: + '@types/estree': 1.0.5 + '@types/babel__code-frame@7.0.6': {} '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.14.8 + '@types/node': 20.14.9 '@types/chai-as-promised@7.1.8': dependencies: @@ -9967,13 +10886,13 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 20.14.8 + '@types/node': 20.14.9 '@types/cookie@0.4.1': {} '@types/cors@2.8.17': dependencies: - '@types/node': 20.14.8 + '@types/node': 20.14.9 '@types/eslint-scope@3.7.7': dependencies: @@ -9996,7 +10915,7 @@ snapshots: '@types/express-serve-static-core@4.19.5': dependencies: - '@types/node': 20.14.8 + '@types/node': 20.14.9 '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -10010,25 +10929,25 @@ snapshots: '@types/fs-extra@5.1.0': dependencies: - '@types/node': 20.14.8 + '@types/node': 20.14.9 '@types/fs-extra@8.1.5': dependencies: - '@types/node': 20.14.8 + '@types/node': 20.14.9 '@types/fs-extra@9.0.13': dependencies: - '@types/node': 20.14.8 + '@types/node': 20.14.9 '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.14.8 + '@types/node': 20.14.9 '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.14.8 + '@types/node': 20.14.9 '@types/http-errors@2.0.4': {} @@ -10038,7 +10957,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 20.14.8 + '@types/node': 20.14.9 '@types/mime@1.3.5': {} @@ -10046,34 +10965,40 @@ snapshots: '@types/minimatch@5.1.2': {} - '@types/node@20.14.8': + '@types/minimist@1.2.5': {} + + '@types/node@20.14.9': dependencies: undici-types: 5.26.5 + '@types/node@9.6.61': {} + + '@types/normalize-package-data@2.4.4': {} + '@types/qs@6.9.15': {} '@types/range-parser@1.2.7': {} '@types/responselike@1.0.3': dependencies: - '@types/node': 20.14.8 + '@types/node': 20.14.9 '@types/rimraf@2.0.5': dependencies: '@types/glob': 8.1.0 - '@types/node': 20.14.8 + '@types/node': 20.14.9 '@types/semver@7.5.8': {} '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.14.8 + '@types/node': 20.14.9 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.14.8 + '@types/node': 20.14.9 '@types/send': 0.17.4 '@types/supports-color@8.1.3': {} @@ -10086,6 +11011,8 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 + '@ungap/structured-clone@1.2.0': {} + '@webassemblyjs/ast@1.12.1': dependencies: '@webassemblyjs/helper-numbers': 1.11.6 @@ -10263,11 +11190,17 @@ snapshots: abbrev@1.1.1: {} + abortcontroller-polyfill@1.7.5: {} + accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 + acorn-dynamic-import@3.0.0: + dependencies: + acorn: 5.7.4 + acorn-globals@6.0.0: dependencies: acorn: 7.4.1 @@ -10281,8 +11214,14 @@ snapshots: dependencies: acorn: 7.4.1 + acorn-jsx@5.3.2(acorn@8.12.0): + dependencies: + acorn: 8.12.0 + acorn-walk@7.2.0: {} + acorn@5.7.4: {} + acorn@6.4.2: {} acorn@7.4.1: {} @@ -10413,6 +11352,10 @@ snapshots: argparse@2.0.1: {} + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + arr-diff@4.0.0: {} arr-flatten@1.1.0: {} @@ -10449,6 +11392,8 @@ snapshots: is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 + arrify@1.0.1: {} + asn1.js@4.10.1: dependencies: bn.js: 4.12.0 @@ -10664,6 +11609,8 @@ snapshots: transitivePeerDependencies: - supports-color + babel-import-util@0.2.0: {} + babel-import-util@1.4.1: {} babel-import-util@2.1.1: {} @@ -10739,11 +11686,6 @@ snapshots: '@glimmer/syntax': 0.84.3 babel-import-util: 3.0.0 - babel-plugin-filter-imports@3.0.0: - dependencies: - '@babel/types': 7.24.7 - lodash: 4.17.21 - babel-plugin-filter-imports@4.0.0: dependencies: '@babel/types': 7.24.7 @@ -11105,6 +12047,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@2.0.0: {} + base64-js@0.0.2: {} base64-js@1.5.1: {} @@ -11129,15 +12073,6 @@ snapshots: big.js@5.2.2: {} - bin-links@3.0.3: - dependencies: - cmd-shim: 5.0.0 - mkdirp-infer-owner: 2.0.0 - npm-normalize-package-bin: 2.0.0 - read-cmd-shim: 3.0.1 - rimraf: 3.0.2 - write-file-atomic: 4.0.2 - binary-extensions@1.13.1: optional: true @@ -11240,6 +12175,23 @@ snapshots: broccoli-plugin: 1.3.1 symlink-or-copy: 1.3.1 + broccoli-asset-rev@3.0.0: + dependencies: + broccoli-asset-rewrite: 2.0.0 + broccoli-filter: 1.3.0 + broccoli-persistent-filter: 1.4.6 + json-stable-stringify: 1.1.1 + minimatch: 3.1.2 + rsvp: 3.6.2 + transitivePeerDependencies: + - supports-color + + broccoli-asset-rewrite@2.0.0: + dependencies: + broccoli-filter: 1.3.0 + transitivePeerDependencies: + - supports-color + broccoli-babel-transpiler@6.5.1: dependencies: babel-core: 6.26.3 @@ -11329,23 +12281,6 @@ snapshots: transitivePeerDependencies: - supports-color - broccoli-concat@3.7.5: - dependencies: - broccoli-debug: 0.6.5 - broccoli-kitchen-sink-helpers: 0.3.1 - broccoli-plugin: 1.3.1 - ensure-posix-path: 1.1.1 - fast-sourcemap-concat: 1.4.0 - find-index: 1.1.1 - fs-extra: 4.0.3 - fs-tree-diff: 0.5.9 - lodash.merge: 4.6.2 - lodash.omit: 4.5.0 - lodash.uniq: 4.5.0 - walk-sync: 0.3.4 - transitivePeerDependencies: - - supports-color - broccoli-concat@4.2.5: dependencies: broccoli-debug: 0.6.5 @@ -11393,6 +12328,20 @@ snapshots: broccoli-plugin: 1.3.1 mkdirp: 0.5.6 + broccoli-filter@1.3.0: + dependencies: + broccoli-kitchen-sink-helpers: 0.3.1 + broccoli-plugin: 1.3.1 + copy-dereference: 1.0.0 + debug: 2.6.9 + mkdirp: 0.5.6 + promise-map-series: 0.2.3 + rsvp: 3.6.2 + symlink-or-copy: 1.3.1 + walk-sync: 0.3.4 + transitivePeerDependencies: + - supports-color + broccoli-funnel-reducer@1.0.0: {} broccoli-funnel@1.2.0: @@ -11495,21 +12444,6 @@ snapshots: has-ansi: 3.0.0 mime-types: 2.1.35 - broccoli-module-normalizer@1.3.0: - dependencies: - broccoli-plugin: 1.3.1 - merge-trees: 1.0.1 - rimraf: 2.7.1 - symlink-or-copy: 1.3.1 - transitivePeerDependencies: - - supports-color - - broccoli-module-unification-reexporter@1.0.0: - dependencies: - broccoli-plugin: 1.3.1 - mkdirp: 0.5.6 - walk-sync: 0.3.4 - broccoli-node-api@1.7.0: {} broccoli-node-info@1.1.0: {} @@ -11610,6 +12544,22 @@ snapshots: transitivePeerDependencies: - supports-color + broccoli-rollup@2.1.1: + dependencies: + '@types/node': 9.6.61 + amd-name-resolver: 1.3.1 + broccoli-plugin: 1.3.1 + fs-tree-diff: 0.5.9 + heimdalljs: 0.2.6 + heimdalljs-logger: 0.1.10 + magic-string: 0.24.1 + node-modules-path: 1.0.2 + rollup: 0.57.1 + symlink-or-copy: 1.3.1 + walk-sync: 0.3.4 + transitivePeerDependencies: + - supports-color + broccoli-slow-trees@3.1.0: dependencies: heimdalljs: 0.2.6 @@ -11651,6 +12601,16 @@ snapshots: transitivePeerDependencies: - supports-color + broccoli-templater@2.0.2: + dependencies: + broccoli-plugin: 1.3.1 + fs-tree-diff: 0.5.9 + lodash.template: 4.5.0 + rimraf: 2.7.1 + walk-sync: 0.3.4 + transitivePeerDependencies: + - supports-color + broccoli-terser-sourcemap@4.1.1: dependencies: async-promise-queue: 1.0.5 @@ -11745,13 +12705,13 @@ snapshots: browserslist@3.2.8: dependencies: - caniuse-lite: 1.0.30001636 - electron-to-chromium: 1.4.811 + caniuse-lite: 1.0.30001637 + electron-to-chromium: 1.4.812 browserslist@4.23.1: dependencies: - caniuse-lite: 1.0.30001636 - electron-to-chromium: 1.4.811 + caniuse-lite: 1.0.30001637 + electron-to-chromium: 1.4.812 node-releases: 2.0.14 update-browserslist-db: 1.0.16(browserslist@4.23.1) @@ -11759,15 +12719,6 @@ snapshots: dependencies: node-int64: 0.4.0 - buffer-alloc-unsafe@1.1.0: {} - - buffer-alloc@1.2.0: - dependencies: - buffer-alloc-unsafe: 1.1.0 - buffer-fill: 1.0.0 - - buffer-fill@1.0.0: {} - buffer-from@1.1.2: {} buffer-xor@1.0.3: {} @@ -11783,10 +12734,16 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + builtin-modules@3.3.0: {} + builtin-status-codes@3.0.0: {} builtins@1.0.3: {} + builtins@5.1.0: + dependencies: + semver: 7.6.2 + bytes@1.0.0: {} bytes@3.0.0: {} @@ -11858,10 +12815,10 @@ snapshots: cacheable-request@6.1.0: dependencies: - clone-response: 1.0.2 + clone-response: 1.0.3 get-stream: 5.2.0 http-cache-semantics: 4.1.1 - keyv: 3.0.0 + keyv: 3.1.0 lowercase-keys: 2.0.0 normalize-url: 4.5.1 responselike: 1.0.2 @@ -11880,11 +12837,27 @@ snapshots: callsites@3.1.0: {} - can-symlink@1.0.0: + camelcase-keys@7.0.2: + dependencies: + camelcase: 6.3.0 + map-obj: 4.3.0 + quick-lru: 5.1.1 + type-fest: 1.4.0 + + camelcase@6.3.0: {} + + can-symlink@1.0.0: dependencies: tmp: 0.0.28 - caniuse-lite@1.0.30001636: {} + caniuse-api@3.0.0: + dependencies: + browserslist: 4.23.1 + caniuse-lite: 1.0.30001637 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + + caniuse-lite@1.0.30001637: {} capture-exit@2.0.0: dependencies: @@ -11911,11 +12884,6 @@ snapshots: escape-string-regexp: 1.0.5 supports-color: 5.5.0 - chalk@3.0.0: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -11996,6 +12964,10 @@ snapshots: commander: 2.8.1 source-map: 0.4.4 + clean-css@5.3.3: + dependencies: + source-map: 0.6.1 + clean-stack@2.2.0: {} clean-up-path@1.0.0: {} @@ -12026,6 +12998,12 @@ snapshots: optionalDependencies: colors: 1.4.0 + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + cli-table@0.3.11: dependencies: colors: 1.0.3 @@ -12052,14 +13030,14 @@ snapshots: dependencies: mimic-response: 1.0.1 + clone-response@1.0.3: + dependencies: + mimic-response: 1.0.1 + clone@1.0.4: {} clone@2.1.2: {} - cmd-shim@5.0.0: - dependencies: - mkdirp-infer-owner: 2.0.0 - collection-visit@1.0.0: dependencies: map-visit: 1.0.0 @@ -12079,6 +13057,8 @@ snapshots: color-support@1.1.3: {} + colord@2.9.3: {} + colors@1.0.3: {} colors@1.4.0: {} @@ -12099,6 +13079,10 @@ snapshots: commander@7.2.0: {} + commander@8.3.0: {} + + common-ancestor-path@1.0.1: {} + common-path-prefix@3.0.0: {} common-tags@1.8.2: {} @@ -12132,6 +13116,18 @@ snapshots: readable-stream: 2.3.8 typedarray: 0.0.6 + concurrently@8.2.2: + dependencies: + chalk: 4.1.2 + date-fns: 2.30.0 + lodash: 4.17.21 + rxjs: 7.8.1 + shell-quote: 1.8.1 + spawn-command: 0.0.2 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + configstore@5.0.1: dependencies: dot-prop: 5.3.0 @@ -12203,6 +13199,8 @@ snapshots: rimraf: 2.7.1 run-queue: 1.0.3 + copy-dereference@1.0.0: {} + copy-descriptor@0.1.1: {} core-js-compat@3.37.1: @@ -12222,6 +13220,20 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 + cosmiconfig@8.3.6: + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + + cosmiconfig@9.0.0: + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + create-ecdh@4.0.4: dependencies: bn.js: 4.12.0 @@ -12278,6 +13290,8 @@ snapshots: crypto-random-string@2.0.0: {} + css-functions-list@3.2.2: {} + css-loader@5.2.7(webpack@5.92.1): dependencies: icss-utils: 5.1.0(postcss@8.4.38) @@ -12348,6 +13362,10 @@ snapshots: dependencies: '@babel/runtime': 7.24.7 + date-time@2.1.0: + dependencies: + time-zone: 1.0.0 + debug@2.6.9: dependencies: ms: 2.0.0 @@ -12362,6 +13380,15 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + decamelize-keys@1.1.1: + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + + decamelize@1.2.0: {} + + decamelize@5.0.1: {} + decimal.js@10.4.3: {} decode-uri-component@0.2.2: {} @@ -12374,8 +13401,6 @@ snapshots: deep-is@0.1.4: {} - deepmerge@4.3.1: {} - defaults@1.0.4: dependencies: clone: 1.0.4 @@ -12428,6 +13453,8 @@ snapshots: deprecation@2.3.1: {} + dequal@2.0.3: {} + des.js@1.1.0: dependencies: inherits: 2.0.4 @@ -12445,8 +13472,6 @@ snapshots: detect-newline@3.1.0: {} - diff@4.0.2: {} - diff@5.2.0: {} diffie-hellman@5.0.3: @@ -12463,6 +13488,8 @@ snapshots: dependencies: esutils: 2.0.3 + dom-element-descriptors@0.5.0: {} + domain-browser@1.2.0: {} domexception@2.0.1: @@ -12500,7 +13527,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.4.811: {} + electron-to-chromium@1.4.812: {} elliptic@6.5.5: dependencies: @@ -12589,6 +13616,22 @@ snapshots: - supports-color - webpack + ember-cli-app-version@6.0.1(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1)): + dependencies: + ember-cli-babel: 7.26.11 + ember-source: 4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1) + git-repo-info: 2.1.1 + transitivePeerDependencies: + - supports-color + + ember-cli-app-version@6.0.1(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1)): + dependencies: + ember-cli-babel: 7.26.11 + ember-source: 5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1) + git-repo-info: 2.1.1 + transitivePeerDependencies: + - supports-color + ember-cli-babel-plugin-helpers@1.1.1: {} ember-cli-babel@6.18.0(@babel/core@7.24.7): @@ -12678,6 +13721,36 @@ snapshots: transitivePeerDependencies: - supports-color + ember-cli-clean-css@3.0.0: + dependencies: + broccoli-persistent-filter: 3.1.3 + clean-css: 5.3.3 + json-stable-stringify: 1.1.1 + transitivePeerDependencies: + - supports-color + + ember-cli-dependency-checker@3.3.2(ember-cli@4.12.3(babel-core@6.26.3)(handlebars@4.7.8)(underscore@1.13.6)): + dependencies: + chalk: 2.4.2 + ember-cli: 4.12.3(babel-core@6.26.3)(handlebars@4.7.8)(underscore@1.13.6) + find-yarn-workspace-root: 1.2.1 + is-git-url: 1.0.0 + resolve: 1.22.8 + semver: 5.7.2 + transitivePeerDependencies: + - supports-color + + ember-cli-dependency-checker@3.3.2(ember-cli@5.9.0(babel-core@6.26.3)(handlebars@4.7.8)(underscore@1.13.6)): + dependencies: + chalk: 2.4.2 + ember-cli: 5.9.0(babel-core@6.26.3)(handlebars@4.7.8)(underscore@1.13.6) + find-yarn-workspace-root: 1.2.1 + is-git-url: 1.0.0 + resolve: 1.22.8 + semver: 5.7.2 + transitivePeerDependencies: + - supports-color + ember-cli-get-component-path-option@1.0.0: {} ember-cli-htmlbars@5.7.2: @@ -12815,6 +13888,21 @@ snapshots: - '@babel/core' - supports-color + ember-cli-typescript@4.2.1: + dependencies: + ansi-to-html: 0.6.15 + broccoli-stew: 3.0.0 + debug: 4.3.5(supports-color@8.1.1) + execa: 4.1.0 + fs-extra: 9.1.0 + resolve: 1.22.8 + rsvp: 4.8.5 + semver: 7.6.2 + stagehand: 1.0.1 + walk-sync: 2.2.0 + transitivePeerDependencies: + - supports-color + ember-cli-version-checker@2.2.0: dependencies: resolve: 1.22.8 @@ -12841,7 +13929,7 @@ snapshots: transitivePeerDependencies: - supports-color - ember-cli@3.16.2(babel-core@6.26.3)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6): + ember-cli@3.28.6(babel-core@6.26.3)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6): dependencies: '@babel/core': 7.24.7 '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) @@ -12853,22 +13941,20 @@ snapshots: broccoli-amd-funnel: 2.0.1 broccoli-babel-transpiler: 7.8.1 broccoli-builder: 0.18.14 - broccoli-concat: 3.7.5 + broccoli-concat: 4.2.5 broccoli-config-loader: 1.0.1 broccoli-config-replace: 1.1.2 broccoli-debug: 0.6.5 - broccoli-funnel: 2.0.2 + broccoli-funnel: 3.0.8 broccoli-funnel-reducer: 1.0.0 broccoli-merge-trees: 3.0.2 broccoli-middleware: 2.1.1 - broccoli-module-normalizer: 1.3.0 - broccoli-module-unification-reexporter: 1.0.0 broccoli-slow-trees: 3.1.0 broccoli-source: 3.0.1 broccoli-stew: 3.0.0 calculate-cache-key-for-tree: 2.0.0 capture-exit: 2.0.0 - chalk: 3.0.0 + chalk: 4.1.2 ci-info: 2.0.0 clean-base-url: 1.0.0 compression: 1.7.4 @@ -12876,63 +13962,65 @@ snapshots: console-ui: 3.1.2 core-object: 3.1.5 dag-map: 2.0.2 - diff: 4.0.2 + diff: 5.2.0 ember-cli-is-package-missing: 1.0.0 ember-cli-lodash-subset: 2.0.1 ember-cli-normalize-entity-name: 1.0.0 ember-cli-preprocess-registry: 3.3.0 ember-cli-string-utils: 1.1.0 - ember-source-channel-url: 2.0.1 + ember-source-channel-url: 3.0.0(encoding@0.1.13) ensure-posix-path: 1.1.1 - execa: 1.0.0 + execa: 5.1.1 exit: 0.1.2 express: 4.19.2 - filesize: 4.2.1 - find-up: 4.1.0 - find-yarn-workspace-root: 1.2.1 - fs-extra: 8.1.0 + filesize: 6.4.0 + find-up: 5.0.0 + find-yarn-workspace-root: 2.0.0 + fixturify-project: 2.1.1 + fs-extra: 9.1.0 fs-tree-diff: 2.0.1 get-caller-file: 2.0.5 git-repo-info: 2.1.1 glob: 7.2.3 heimdalljs: 0.2.6 - heimdalljs-fs-monitor: 0.2.3 + heimdalljs-fs-monitor: 1.1.1 heimdalljs-graph: 1.0.0 heimdalljs-logger: 0.1.10 http-proxy: 1.18.1 inflection: 1.13.4 is-git-url: 1.0.0 - isbinaryfile: 3.0.3 + is-language-code: 2.0.0 + isbinaryfile: 4.0.10 js-yaml: 3.14.1 json-stable-stringify: 1.1.1 leek: 0.0.24 lodash.template: 4.5.0 - markdown-it: 9.1.0 - markdown-it-terminal: 0.1.0 + markdown-it: 12.3.2 + markdown-it-terminal: 0.2.1 minimatch: 3.1.2 morgan: 1.10.0 nopt: 3.0.6 - npm-package-arg: 6.1.1 + npm-package-arg: 8.1.5 p-defer: 3.0.0 portfinder: 1.0.32 promise-map-series: 0.3.0 - promise.prototype.finally: 3.1.8 + promise.hash.helper: 1.0.8 quick-temp: 0.1.8 resolve: 1.22.8 - resolve-package-path: 2.0.0 - rsvp: 4.8.5 + resolve-package-path: 3.1.0 sane: 4.1.0 - semver: 6.3.1 + semver: 7.6.2 silent-error: 1.1.1 sort-package-json: 1.57.0 symlink-or-copy: 1.3.1 - temp: 0.9.1 + temp: 0.9.4 testem: 3.14.0(babel-core@6.26.3)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6) - tiny-lr: 1.1.1 + tiny-lr: 2.0.0 tree-sync: 2.1.0 - uuid: 3.4.0 + uuid: 8.3.2 walk-sync: 2.2.0 watch-detector: 1.0.2 + workerpool: 6.5.1 yam: 1.0.0 transitivePeerDependencies: - arc-templates @@ -12949,6 +14037,7 @@ snapshots: - eco - ect - ejs + - encoding - haml-coffee - hamlet - hamljs @@ -12992,7 +14081,7 @@ snapshots: - walrus - whiskers - ember-cli@3.20.2(babel-core@6.26.3)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6): + ember-cli@4.12.3(babel-core@6.26.3)(handlebars@4.7.8)(underscore@1.13.6): dependencies: '@babel/core': 7.24.7 '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) @@ -13008,9 +14097,9 @@ snapshots: broccoli-config-loader: 1.0.1 broccoli-config-replace: 1.1.2 broccoli-debug: 0.6.5 - broccoli-funnel: 2.0.2 + broccoli-funnel: 3.0.8 broccoli-funnel-reducer: 1.0.0 - broccoli-merge-trees: 3.0.2 + broccoli-merge-trees: 4.2.0 broccoli-middleware: 2.1.1 broccoli-slow-trees: 3.1.0 broccoli-source: 3.0.1 @@ -13018,70 +14107,74 @@ snapshots: calculate-cache-key-for-tree: 2.0.0 capture-exit: 2.0.0 chalk: 4.1.2 - ci-info: 2.0.0 + ci-info: 3.9.0 clean-base-url: 1.0.0 compression: 1.7.4 configstore: 5.0.1 console-ui: 3.1.2 core-object: 3.1.5 dag-map: 2.0.2 - diff: 4.0.2 + diff: 5.2.0 ember-cli-is-package-missing: 1.0.0 ember-cli-lodash-subset: 2.0.1 ember-cli-normalize-entity-name: 1.0.0 ember-cli-preprocess-registry: 3.3.0 ember-cli-string-utils: 1.1.0 - ember-source-channel-url: 2.0.1 ensure-posix-path: 1.1.1 - execa: 1.0.0 + execa: 5.1.1 exit: 0.1.2 express: 4.19.2 - filesize: 6.4.0 - find-up: 4.1.0 - find-yarn-workspace-root: 1.2.1 + filesize: 10.1.2 + find-up: 5.0.0 + find-yarn-workspace-root: 2.0.0 fixturify-project: 2.1.1 - fs-extra: 9.1.0 + fs-extra: 11.2.0 fs-tree-diff: 2.0.1 get-caller-file: 2.0.5 git-repo-info: 2.1.1 - glob: 7.2.3 + glob: 8.1.0 heimdalljs: 0.2.6 - heimdalljs-fs-monitor: 0.2.3 + heimdalljs-fs-monitor: 1.1.1 heimdalljs-graph: 1.0.0 heimdalljs-logger: 0.1.10 http-proxy: 1.18.1 - inflection: 1.13.4 + inflection: 2.0.1 + inquirer: 8.2.6 is-git-url: 1.0.0 - isbinaryfile: 4.0.10 - js-yaml: 3.14.1 - json-stable-stringify: 1.1.1 + is-language-code: 3.1.0 + isbinaryfile: 5.0.2 + js-yaml: 4.1.0 leek: 0.0.24 - lodash.template: 4.5.0 - markdown-it: 11.0.1 - markdown-it-terminal: 0.2.1 - minimatch: 3.1.2 + lodash: 4.17.21 + markdown-it: 13.0.2 + markdown-it-terminal: 0.4.0(markdown-it@13.0.2) + minimatch: 7.4.6 morgan: 1.10.0 nopt: 3.0.6 - npm-package-arg: 8.1.5 + npm-package-arg: 10.1.0 + os-locale: 5.0.0 p-defer: 3.0.0 portfinder: 1.0.32 promise-map-series: 0.3.0 promise.hash.helper: 1.0.8 quick-temp: 0.1.8 + remove-types: 1.0.0 resolve: 1.22.8 - resolve-package-path: 2.0.0 - sane: 4.1.0 + resolve-package-path: 4.0.3 + safe-stable-stringify: 2.4.3 + sane: 5.0.1 semver: 7.6.2 silent-error: 1.1.1 sort-package-json: 1.57.0 symlink-or-copy: 1.3.1 - temp: 0.9.1 + temp: 0.9.4 testem: 3.14.0(babel-core@6.26.3)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6) - tiny-lr: 1.1.1 + tiny-lr: 2.0.0 tree-sync: 2.1.0 - uuid: 8.3.2 - walk-sync: 2.2.0 + uuid: 9.0.1 + walk-sync: 3.0.0 watch-detector: 1.0.2 + workerpool: 6.5.1 yam: 1.0.0 transitivePeerDependencies: - arc-templates @@ -13110,7 +14203,6 @@ snapshots: - just - liquid-node - liquor - - lodash - marko - mote - nunjucks @@ -13141,25 +14233,18 @@ snapshots: - walrus - whiskers - ember-cli@3.24.0(babel-core@6.26.3)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6): + ember-cli@5.9.0(babel-core@6.26.3)(handlebars@4.7.8)(underscore@1.13.6): dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) - amd-name-resolver: 1.3.1 - babel-plugin-module-resolver: 4.1.0 - bower-config: 1.4.3 - bower-endpoint-parser: 0.2.2 + '@pnpm/find-workspace-dir': 6.0.3 broccoli: 3.5.2 - broccoli-amd-funnel: 2.0.1 - broccoli-babel-transpiler: 7.8.1 broccoli-builder: 0.18.14 broccoli-concat: 4.2.5 broccoli-config-loader: 1.0.1 broccoli-config-replace: 1.1.2 broccoli-debug: 0.6.5 - broccoli-funnel: 2.0.2 + broccoli-funnel: 3.0.8 broccoli-funnel-reducer: 1.0.0 - broccoli-merge-trees: 3.0.2 + broccoli-merge-trees: 4.2.0 broccoli-middleware: 2.1.1 broccoli-slow-trees: 3.1.0 broccoli-source: 3.0.1 @@ -13167,60 +14252,61 @@ snapshots: calculate-cache-key-for-tree: 2.0.0 capture-exit: 2.0.0 chalk: 4.1.2 - ci-info: 2.0.0 + ci-info: 3.9.0 clean-base-url: 1.0.0 compression: 1.7.4 configstore: 5.0.1 console-ui: 3.1.2 + content-tag: 1.2.2 core-object: 3.1.5 dag-map: 2.0.2 - diff: 4.0.2 + diff: 5.2.0 ember-cli-is-package-missing: 1.0.0 ember-cli-lodash-subset: 2.0.1 ember-cli-normalize-entity-name: 1.0.0 - ember-cli-preprocess-registry: 3.3.0 + ember-cli-preprocess-registry: 5.0.1 ember-cli-string-utils: 1.1.0 - ember-source-channel-url: 3.0.0(encoding@0.1.13) ensure-posix-path: 1.1.1 - execa: 4.1.0 + execa: 5.1.1 exit: 0.1.2 express: 4.19.2 - filesize: 6.4.0 + filesize: 10.1.2 find-up: 5.0.0 find-yarn-workspace-root: 2.0.0 fixturify-project: 2.1.1 - fs-extra: 9.1.0 + fs-extra: 11.2.0 fs-tree-diff: 2.0.1 get-caller-file: 2.0.5 git-repo-info: 2.1.1 - glob: 7.2.3 + glob: 8.1.0 heimdalljs: 0.2.6 heimdalljs-fs-monitor: 1.1.1 heimdalljs-graph: 1.0.0 heimdalljs-logger: 0.1.10 http-proxy: 1.18.1 - inflection: 1.13.4 + inflection: 2.0.1 + inquirer: 9.2.23 is-git-url: 1.0.0 - is-language-code: 2.0.0 - isbinaryfile: 4.0.10 - js-yaml: 3.14.1 - json-stable-stringify: 1.1.1 - leek: 0.0.24 - lodash.template: 4.5.0 - markdown-it: 12.3.2 - markdown-it-terminal: 0.2.1 - minimatch: 3.1.2 + is-language-code: 3.1.0 + isbinaryfile: 5.0.2 + lodash: 4.17.21 + markdown-it: 13.0.2 + markdown-it-terminal: 0.4.0(markdown-it@13.0.2) + minimatch: 7.4.6 morgan: 1.10.0 nopt: 3.0.6 - npm-package-arg: 8.1.5 + npm-package-arg: 10.1.0 + os-locale: 5.0.0 p-defer: 3.0.0 portfinder: 1.0.32 promise-map-series: 0.3.0 promise.hash.helper: 1.0.8 quick-temp: 0.1.8 + remove-types: 1.0.0 resolve: 1.22.8 - resolve-package-path: 3.1.0 - sane: 4.1.0 + resolve-package-path: 4.0.3 + safe-stable-stringify: 2.4.3 + sane: 5.0.1 semver: 7.6.2 silent-error: 1.1.1 sort-package-json: 1.57.0 @@ -13229,8 +14315,7 @@ snapshots: testem: 3.14.0(babel-core@6.26.3)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6) tiny-lr: 2.0.0 tree-sync: 2.1.0 - uuid: 8.3.2 - walk-sync: 2.2.0 + walk-sync: 3.0.0 watch-detector: 1.0.2 workerpool: 6.5.1 yam: 1.0.0 @@ -13249,7 +14334,6 @@ snapshots: - eco - ect - ejs - - encoding - haml-coffee - hamlet - hamljs @@ -13262,7 +14346,6 @@ snapshots: - just - liquid-node - liquor - - lodash - marko - mote - nunjucks @@ -13293,445 +14376,7 @@ snapshots: - walrus - whiskers - ember-cli@3.28.6(babel-core@6.26.3)(encoding@0.1.13)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6): - dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) - amd-name-resolver: 1.3.1 - babel-plugin-module-resolver: 4.1.0 - bower-config: 1.4.3 - bower-endpoint-parser: 0.2.2 - broccoli: 3.5.2 - broccoli-amd-funnel: 2.0.1 - broccoli-babel-transpiler: 7.8.1 - broccoli-builder: 0.18.14 - broccoli-concat: 4.2.5 - broccoli-config-loader: 1.0.1 - broccoli-config-replace: 1.1.2 - broccoli-debug: 0.6.5 - broccoli-funnel: 3.0.8 - broccoli-funnel-reducer: 1.0.0 - broccoli-merge-trees: 3.0.2 - broccoli-middleware: 2.1.1 - broccoli-slow-trees: 3.1.0 - broccoli-source: 3.0.1 - broccoli-stew: 3.0.0 - calculate-cache-key-for-tree: 2.0.0 - capture-exit: 2.0.0 - chalk: 4.1.2 - ci-info: 2.0.0 - clean-base-url: 1.0.0 - compression: 1.7.4 - configstore: 5.0.1 - console-ui: 3.1.2 - core-object: 3.1.5 - dag-map: 2.0.2 - diff: 5.2.0 - ember-cli-is-package-missing: 1.0.0 - ember-cli-lodash-subset: 2.0.1 - ember-cli-normalize-entity-name: 1.0.0 - ember-cli-preprocess-registry: 3.3.0 - ember-cli-string-utils: 1.1.0 - ember-source-channel-url: 3.0.0(encoding@0.1.13) - ensure-posix-path: 1.1.1 - execa: 5.1.1 - exit: 0.1.2 - express: 4.19.2 - filesize: 6.4.0 - find-up: 5.0.0 - find-yarn-workspace-root: 2.0.0 - fixturify-project: 2.1.1 - fs-extra: 9.1.0 - fs-tree-diff: 2.0.1 - get-caller-file: 2.0.5 - git-repo-info: 2.1.1 - glob: 7.2.3 - heimdalljs: 0.2.6 - heimdalljs-fs-monitor: 1.1.1 - heimdalljs-graph: 1.0.0 - heimdalljs-logger: 0.1.10 - http-proxy: 1.18.1 - inflection: 1.13.4 - is-git-url: 1.0.0 - is-language-code: 2.0.0 - isbinaryfile: 4.0.10 - js-yaml: 3.14.1 - json-stable-stringify: 1.1.1 - leek: 0.0.24 - lodash.template: 4.5.0 - markdown-it: 12.3.2 - markdown-it-terminal: 0.2.1 - minimatch: 3.1.2 - morgan: 1.10.0 - nopt: 3.0.6 - npm-package-arg: 8.1.5 - p-defer: 3.0.0 - portfinder: 1.0.32 - promise-map-series: 0.3.0 - promise.hash.helper: 1.0.8 - quick-temp: 0.1.8 - resolve: 1.22.8 - resolve-package-path: 3.1.0 - sane: 4.1.0 - semver: 7.6.2 - silent-error: 1.1.1 - sort-package-json: 1.57.0 - symlink-or-copy: 1.3.1 - temp: 0.9.4 - testem: 3.14.0(babel-core@6.26.3)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6) - tiny-lr: 2.0.0 - tree-sync: 2.1.0 - uuid: 8.3.2 - walk-sync: 2.2.0 - watch-detector: 1.0.2 - workerpool: 6.5.1 - yam: 1.0.0 - transitivePeerDependencies: - - arc-templates - - atpl - - babel-core - - bracket-template - - bufferutil - - coffee-script - - debug - - dot - - dust - - dustjs-helpers - - dustjs-linkedin - - eco - - ect - - ejs - - encoding - - haml-coffee - - hamlet - - hamljs - - handlebars - - hogan.js - - htmling - - jade - - jazz - - jqtpl - - just - - liquid-node - - liquor - - lodash - - marko - - mote - - nunjucks - - plates - - pug - - qejs - - ractive - - razor-tmpl - - react - - react-dom - - slm - - squirrelly - - supports-color - - swig - - swig-templates - - teacup - - templayed - - then-jade - - then-pug - - tinyliquid - - toffee - - twig - - twing - - underscore - - utf-8-validate - - vash - - velocityjs - - walrus - - whiskers - - ember-cli@5.10.0-beta.0(babel-core@6.26.3)(handlebars@4.7.8)(underscore@1.13.6): - dependencies: - '@pnpm/find-workspace-dir': 6.0.3 - broccoli: 3.5.2 - broccoli-builder: 0.18.14 - broccoli-concat: 4.2.5 - broccoli-config-loader: 1.0.1 - broccoli-config-replace: 1.1.2 - broccoli-debug: 0.6.5 - broccoli-funnel: 3.0.8 - broccoli-funnel-reducer: 1.0.0 - broccoli-merge-trees: 4.2.0 - broccoli-middleware: 2.1.1 - broccoli-slow-trees: 3.1.0 - broccoli-source: 3.0.1 - broccoli-stew: 3.0.0 - calculate-cache-key-for-tree: 2.0.0 - capture-exit: 2.0.0 - chalk: 4.1.2 - ci-info: 3.9.0 - clean-base-url: 1.0.0 - compression: 1.7.4 - configstore: 5.0.1 - console-ui: 3.1.2 - content-tag: 1.2.2 - core-object: 3.1.5 - dag-map: 2.0.2 - diff: 5.2.0 - ember-cli-is-package-missing: 1.0.0 - ember-cli-lodash-subset: 2.0.1 - ember-cli-normalize-entity-name: 1.0.0 - ember-cli-preprocess-registry: 5.0.1 - ember-cli-string-utils: 1.1.0 - ensure-posix-path: 1.1.1 - execa: 5.1.1 - exit: 0.1.2 - express: 4.19.2 - filesize: 10.1.2 - find-up: 5.0.0 - find-yarn-workspace-root: 2.0.0 - fixturify-project: 2.1.1 - fs-extra: 11.2.0 - fs-tree-diff: 2.0.1 - get-caller-file: 2.0.5 - git-repo-info: 2.1.1 - glob: 8.1.0 - heimdalljs: 0.2.6 - heimdalljs-fs-monitor: 1.1.1 - heimdalljs-graph: 1.0.0 - heimdalljs-logger: 0.1.10 - http-proxy: 1.18.1 - inflection: 2.0.1 - inquirer: 9.2.23 - is-git-url: 1.0.0 - is-language-code: 3.1.0 - isbinaryfile: 5.0.2 - lodash: 4.17.21 - markdown-it: 13.0.2 - markdown-it-terminal: 0.4.0(markdown-it@13.0.2) - minimatch: 7.4.6 - morgan: 1.10.0 - nopt: 3.0.6 - npm-package-arg: 10.1.0 - os-locale: 5.0.0 - p-defer: 3.0.0 - portfinder: 1.0.32 - promise-map-series: 0.3.0 - promise.hash.helper: 1.0.8 - quick-temp: 0.1.8 - remove-types: 1.0.0 - resolve: 1.22.8 - resolve-package-path: 4.0.3 - safe-stable-stringify: 2.4.3 - sane: 5.0.1 - semver: 7.6.2 - silent-error: 1.1.1 - sort-package-json: 1.57.0 - symlink-or-copy: 1.3.1 - temp: 0.9.4 - testem: 3.14.0(babel-core@6.26.3)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6) - tiny-lr: 2.0.0 - tree-sync: 2.1.0 - walk-sync: 3.0.0 - watch-detector: 1.0.2 - workerpool: 6.5.1 - yam: 1.0.0 - transitivePeerDependencies: - - arc-templates - - atpl - - babel-core - - bracket-template - - bufferutil - - coffee-script - - debug - - dot - - dust - - dustjs-helpers - - dustjs-linkedin - - eco - - ect - - ejs - - haml-coffee - - hamlet - - hamljs - - handlebars - - hogan.js - - htmling - - jade - - jazz - - jqtpl - - just - - liquid-node - - liquor - - marko - - mote - - nunjucks - - plates - - pug - - qejs - - ractive - - razor-tmpl - - react - - react-dom - - slm - - squirrelly - - supports-color - - swig - - swig-templates - - teacup - - templayed - - then-jade - - then-pug - - tinyliquid - - toffee - - twig - - twing - - underscore - - utf-8-validate - - vash - - velocityjs - - walrus - - whiskers - - ember-cli@5.9.0(babel-core@6.26.3)(handlebars@4.7.8)(underscore@1.13.6): - dependencies: - '@pnpm/find-workspace-dir': 6.0.3 - broccoli: 3.5.2 - broccoli-builder: 0.18.14 - broccoli-concat: 4.2.5 - broccoli-config-loader: 1.0.1 - broccoli-config-replace: 1.1.2 - broccoli-debug: 0.6.5 - broccoli-funnel: 3.0.8 - broccoli-funnel-reducer: 1.0.0 - broccoli-merge-trees: 4.2.0 - broccoli-middleware: 2.1.1 - broccoli-slow-trees: 3.1.0 - broccoli-source: 3.0.1 - broccoli-stew: 3.0.0 - calculate-cache-key-for-tree: 2.0.0 - capture-exit: 2.0.0 - chalk: 4.1.2 - ci-info: 3.9.0 - clean-base-url: 1.0.0 - compression: 1.7.4 - configstore: 5.0.1 - console-ui: 3.1.2 - content-tag: 1.2.2 - core-object: 3.1.5 - dag-map: 2.0.2 - diff: 5.2.0 - ember-cli-is-package-missing: 1.0.0 - ember-cli-lodash-subset: 2.0.1 - ember-cli-normalize-entity-name: 1.0.0 - ember-cli-preprocess-registry: 5.0.1 - ember-cli-string-utils: 1.1.0 - ensure-posix-path: 1.1.1 - execa: 5.1.1 - exit: 0.1.2 - express: 4.19.2 - filesize: 10.1.2 - find-up: 5.0.0 - find-yarn-workspace-root: 2.0.0 - fixturify-project: 2.1.1 - fs-extra: 11.2.0 - fs-tree-diff: 2.0.1 - get-caller-file: 2.0.5 - git-repo-info: 2.1.1 - glob: 8.1.0 - heimdalljs: 0.2.6 - heimdalljs-fs-monitor: 1.1.1 - heimdalljs-graph: 1.0.0 - heimdalljs-logger: 0.1.10 - http-proxy: 1.18.1 - inflection: 2.0.1 - inquirer: 9.2.23 - is-git-url: 1.0.0 - is-language-code: 3.1.0 - isbinaryfile: 5.0.2 - lodash: 4.17.21 - markdown-it: 13.0.2 - markdown-it-terminal: 0.4.0(markdown-it@13.0.2) - minimatch: 7.4.6 - morgan: 1.10.0 - nopt: 3.0.6 - npm-package-arg: 10.1.0 - os-locale: 5.0.0 - p-defer: 3.0.0 - portfinder: 1.0.32 - promise-map-series: 0.3.0 - promise.hash.helper: 1.0.8 - quick-temp: 0.1.8 - remove-types: 1.0.0 - resolve: 1.22.8 - resolve-package-path: 4.0.3 - safe-stable-stringify: 2.4.3 - sane: 5.0.1 - semver: 7.6.2 - silent-error: 1.1.1 - sort-package-json: 1.57.0 - symlink-or-copy: 1.3.1 - temp: 0.9.4 - testem: 3.14.0(babel-core@6.26.3)(handlebars@4.7.8)(lodash@4.17.21)(underscore@1.13.6) - tiny-lr: 2.0.0 - tree-sync: 2.1.0 - walk-sync: 3.0.0 - watch-detector: 1.0.2 - workerpool: 6.5.1 - yam: 1.0.0 - transitivePeerDependencies: - - arc-templates - - atpl - - babel-core - - bracket-template - - bufferutil - - coffee-script - - debug - - dot - - dust - - dustjs-helpers - - dustjs-linkedin - - eco - - ect - - ejs - - haml-coffee - - hamlet - - hamljs - - handlebars - - hogan.js - - htmling - - jade - - jazz - - jqtpl - - just - - liquid-node - - liquor - - marko - - mote - - nunjucks - - plates - - pug - - qejs - - ractive - - razor-tmpl - - react - - react-dom - - slm - - squirrelly - - supports-color - - swig - - swig-templates - - teacup - - templayed - - then-jade - - then-pug - - tinyliquid - - toffee - - twig - - twing - - underscore - - utf-8-validate - - vash - - velocityjs - - walrus - - whiskers - - ember-compatibility-helpers@1.2.7(@babel/core@7.24.7): + ember-compatibility-helpers@1.2.7(@babel/core@7.24.7): dependencies: babel-plugin-debug-macros: 0.2.0(@babel/core@7.24.7) ember-cli-version-checker: 5.1.2 @@ -13755,6 +14400,26 @@ snapshots: ember-export-application-global@2.0.1: {} + ember-fetch@8.1.2(encoding@0.1.13): + dependencies: + abortcontroller-polyfill: 1.7.5 + broccoli-concat: 4.2.5 + broccoli-debug: 0.6.5 + broccoli-merge-trees: 4.2.0 + broccoli-rollup: 2.1.1 + broccoli-stew: 3.0.0 + broccoli-templater: 2.0.2 + calculate-cache-key-for-tree: 2.0.0 + caniuse-api: 3.0.0 + ember-cli-babel: 7.26.11 + ember-cli-typescript: 4.2.1 + ember-cli-version-checker: 5.1.2 + node-fetch: 2.7.0(encoding@0.1.13) + whatwg-fetch: 3.6.20 + transitivePeerDependencies: + - encoding + - supports-color + ember-load-initializers@2.1.2(@babel/core@7.24.7): dependencies: ember-cli-babel: 7.26.11 @@ -13773,12 +14438,48 @@ snapshots: - '@babel/core' - supports-color + ember-modifier@4.1.0(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1)): + dependencies: + '@embroider/addon-shim': 1.8.9 + ember-cli-normalize-entity-name: 1.0.0 + ember-cli-string-utils: 1.1.0 + optionalDependencies: + ember-source: 4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1) + transitivePeerDependencies: + - supports-color + + ember-modifier@4.1.0(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1)): + dependencies: + '@embroider/addon-shim': 1.8.9 + ember-cli-normalize-entity-name: 1.0.0 + ember-cli-string-utils: 1.1.0 + optionalDependencies: + ember-source: 5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1) + transitivePeerDependencies: + - supports-color + ember-page-title@7.0.0: dependencies: ember-cli-babel: 7.26.11 transitivePeerDependencies: - supports-color + ember-page-title@8.2.3(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1)): + dependencies: + '@embroider/addon-shim': 1.8.9 + '@simple-dom/document': 1.4.0 + ember-source: 4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1) + transitivePeerDependencies: + - supports-color + + ember-page-title@8.2.3(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1)): + dependencies: + '@embroider/addon-shim': 1.8.9 + '@simple-dom/document': 1.4.0 + ember-source: 5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1) + transitivePeerDependencies: + - supports-color + ember-qunit@5.1.5(@ember/test-helpers@2.9.4(@babel/core@7.24.7)(ember-source@3.28.12(@babel/core@7.24.7)))(qunit@2.21.0): dependencies: '@ember/test-helpers': 2.9.4(@babel/core@7.24.7)(ember-source@3.28.12(@babel/core@7.24.7)) @@ -13797,6 +14498,48 @@ snapshots: - webpack-cli - webpack-command + ember-qunit@8.1.0(@ember/test-helpers@3.3.0(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1))(webpack@5.92.1))(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1))(qunit@2.21.0): + dependencies: + '@ember/test-helpers': 3.3.0(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1))(webpack@5.92.1) + '@embroider/addon-shim': 1.8.9 + '@embroider/macros': 1.16.5 + ember-cli-test-loader: 3.1.0 + ember-source: 4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1) + qunit: 2.21.0 + qunit-theme-ember: 1.0.0 + transitivePeerDependencies: + - '@glint/template' + - supports-color + + ember-qunit@8.1.0(@ember/test-helpers@3.3.0(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1))(webpack@5.92.1))(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1))(qunit@2.21.0): + dependencies: + '@ember/test-helpers': 3.3.0(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1))(webpack@5.92.1) + '@embroider/addon-shim': 1.8.9 + '@embroider/macros': 1.16.5 + ember-cli-test-loader: 3.1.0 + ember-source: 5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1) + qunit: 2.21.0 + qunit-theme-ember: 1.0.0 + transitivePeerDependencies: + - '@glint/template' + - supports-color + + ember-resolver@11.0.1(ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1)): + dependencies: + ember-cli-babel: 7.26.11 + optionalDependencies: + ember-source: 4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1) + transitivePeerDependencies: + - supports-color + + ember-resolver@11.0.1(ember-source@5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1)): + dependencies: + ember-cli-babel: 7.26.11 + optionalDependencies: + ember-source: 5.9.0(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1) + transitivePeerDependencies: + - supports-color + ember-resolver@8.1.0(@babel/core@7.24.7): dependencies: babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.7) @@ -13823,106 +14566,12 @@ snapshots: dependencies: got: 8.3.2 - ember-source-channel-url@2.0.1: - dependencies: - got: 8.3.2 - ember-source-channel-url@3.0.0(encoding@0.1.13): dependencies: node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding - ember-source@3.16.10(@babel/core@7.24.7): - dependencies: - '@babel/helper-module-imports': 7.24.7(supports-color@8.1.1) - '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-assign': 7.24.7(@babel/core@7.24.7) - '@ember/edition-utils': 1.2.0 - babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.7) - babel-plugin-filter-imports: 3.0.0 - broccoli-concat: 3.7.5 - broccoli-debug: 0.6.5 - broccoli-funnel: 2.0.2 - broccoli-merge-trees: 3.0.2 - chalk: 2.4.2 - ember-cli-babel: 7.26.11 - ember-cli-get-component-path-option: 1.0.0 - ember-cli-is-package-missing: 1.0.0 - ember-cli-normalize-entity-name: 1.0.0 - ember-cli-path-utils: 1.0.0 - ember-cli-string-utils: 1.1.0 - ember-cli-version-checker: 3.1.3 - ember-router-generator: 2.0.0 - inflection: 1.13.4 - jquery: 3.7.1 - resolve: 1.22.8 - semver: 6.3.1 - silent-error: 1.1.1 - transitivePeerDependencies: - - '@babel/core' - - supports-color - - ember-source@3.20.7(@babel/core@7.24.7): - dependencies: - '@babel/helper-module-imports': 7.24.7(supports-color@8.1.1) - '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-assign': 7.24.7(@babel/core@7.24.7) - '@ember/edition-utils': 1.2.0 - babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.7) - babel-plugin-filter-imports: 4.0.0 - broccoli-concat: 4.2.5 - broccoli-debug: 0.6.5 - broccoli-funnel: 2.0.2 - broccoli-merge-trees: 4.2.0 - chalk: 4.1.2 - ember-cli-babel: 7.26.11 - ember-cli-get-component-path-option: 1.0.0 - ember-cli-is-package-missing: 1.0.0 - ember-cli-normalize-entity-name: 1.0.0 - ember-cli-path-utils: 1.0.0 - ember-cli-string-utils: 1.1.0 - ember-cli-version-checker: 5.1.2 - ember-router-generator: 2.0.0 - inflection: 1.13.4 - jquery: 3.7.1 - resolve: 1.22.8 - semver: 6.3.1 - silent-error: 1.1.1 - transitivePeerDependencies: - - '@babel/core' - - supports-color - - ember-source@3.24.7(@babel/core@7.24.7): - dependencies: - '@babel/helper-module-imports': 7.24.7(supports-color@8.1.1) - '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-assign': 7.24.7(@babel/core@7.24.7) - '@ember/edition-utils': 1.2.0 - babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.7) - babel-plugin-filter-imports: 4.0.0 - broccoli-concat: 4.2.5 - broccoli-debug: 0.6.5 - broccoli-funnel: 2.0.2 - broccoli-merge-trees: 4.2.0 - chalk: 4.1.2 - ember-cli-babel: 7.26.11 - ember-cli-get-component-path-option: 1.0.0 - ember-cli-is-package-missing: 1.0.0 - ember-cli-normalize-entity-name: 1.0.0 - ember-cli-path-utils: 1.0.0 - ember-cli-string-utils: 1.1.0 - ember-cli-version-checker: 5.1.2 - ember-router-generator: 2.0.0 - inflection: 1.13.4 - jquery: 3.7.1 - resolve: 1.22.8 - semver: 6.3.1 - silent-error: 1.1.1 - transitivePeerDependencies: - - '@babel/core' - - supports-color - ember-source@3.28.12(@babel/core@7.24.7): dependencies: '@babel/helper-module-imports': 7.24.7(supports-color@8.1.1) @@ -13935,112 +14584,44 @@ snapshots: broccoli-concat: 4.2.5 broccoli-debug: 0.6.5 broccoli-file-creator: 2.1.1 - broccoli-funnel: 2.0.2 - broccoli-merge-trees: 4.2.0 - chalk: 4.1.2 - ember-cli-babel: 7.26.11 - ember-cli-get-component-path-option: 1.0.0 - ember-cli-is-package-missing: 1.0.0 - ember-cli-normalize-entity-name: 1.0.0 - ember-cli-path-utils: 1.0.0 - ember-cli-string-utils: 1.1.0 - ember-cli-version-checker: 5.1.2 - ember-router-generator: 2.0.0 - inflection: 1.13.4 - jquery: 3.7.1 - resolve: 1.22.8 - semver: 7.6.2 - silent-error: 1.1.1 - transitivePeerDependencies: - - '@babel/core' - - supports-color - - ember-source@5.10.0-alpha.4(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1): - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.24.7(supports-color@8.1.1) - '@ember/edition-utils': 1.2.0 - '@glimmer/compiler': 0.92.0 - '@glimmer/component': 1.1.2(@babel/core@7.24.7) - '@glimmer/destroyable': 0.92.0 - '@glimmer/env': 0.1.7 - '@glimmer/global-context': 0.92.0 - '@glimmer/interfaces': 0.92.0 - '@glimmer/manager': 0.92.0 - '@glimmer/node': 0.92.0 - '@glimmer/opcode-compiler': 0.92.0 - '@glimmer/owner': 0.92.0 - '@glimmer/program': 0.92.0 - '@glimmer/reference': 0.92.0 - '@glimmer/runtime': 0.92.0 - '@glimmer/syntax': 0.92.0 - '@glimmer/util': 0.92.0 - '@glimmer/validator': 0.92.0 - '@glimmer/vm': 0.92.0 - '@glimmer/vm-babel-plugins': 0.92.0(@babel/core@7.24.7) - '@simple-dom/interface': 1.4.0 - babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.7) - babel-plugin-ember-template-compilation: 2.2.5 - babel-plugin-filter-imports: 4.0.0 - backburner.js: 2.8.0 - broccoli-concat: 4.2.5 - broccoli-debug: 0.6.5 - broccoli-file-creator: 2.1.1 - broccoli-funnel: 3.0.8 + broccoli-funnel: 2.0.2 broccoli-merge-trees: 4.2.0 chalk: 4.1.2 - ember-auto-import: 2.7.4(webpack@5.92.1) - ember-cli-babel: 8.2.0(@babel/core@7.24.7) + ember-cli-babel: 7.26.11 ember-cli-get-component-path-option: 1.0.0 ember-cli-is-package-missing: 1.0.0 ember-cli-normalize-entity-name: 1.0.0 ember-cli-path-utils: 1.0.0 ember-cli-string-utils: 1.1.0 - ember-cli-typescript-blueprint-polyfill: 0.1.0 ember-cli-version-checker: 5.1.2 ember-router-generator: 2.0.0 - inflection: 2.0.1 - route-recognizer: 0.3.4 - router_js: 8.0.5(route-recognizer@0.3.4)(rsvp@4.8.5) + inflection: 1.13.4 + jquery: 3.7.1 + resolve: 1.22.8 semver: 7.6.2 silent-error: 1.1.1 - simple-html-tokenizer: 0.5.11 transitivePeerDependencies: - - '@glint/template' - - rsvp + - '@babel/core' - supports-color - - webpack - ember-source@5.10.0-beta.2(@glimmer/component@1.1.2(@babel/core@7.24.7))(rsvp@4.8.5)(webpack@5.92.1): + ember-source@4.12.4(@babel/core@7.24.7)(@glimmer/component@1.1.2(@babel/core@7.24.7))(webpack@5.92.1): dependencies: - '@babel/core': 7.24.7 + '@babel/helper-module-imports': 7.24.7(supports-color@8.1.1) + '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) '@ember/edition-utils': 1.2.0 - '@glimmer/compiler': 0.92.0 '@glimmer/component': 1.1.2(@babel/core@7.24.7) - '@glimmer/destroyable': 0.92.0 - '@glimmer/env': 0.1.7 - '@glimmer/global-context': 0.92.0 - '@glimmer/interfaces': 0.92.0 - '@glimmer/manager': 0.92.0 - '@glimmer/node': 0.92.0 - '@glimmer/opcode-compiler': 0.92.0 - '@glimmer/owner': 0.92.0 - '@glimmer/program': 0.92.0 - '@glimmer/reference': 0.92.0 - '@glimmer/runtime': 0.92.0 - '@glimmer/syntax': 0.92.0 - '@glimmer/util': 0.92.0 - '@glimmer/validator': 0.92.0 - '@glimmer/vm': 0.92.0 - '@glimmer/vm-babel-plugins': 0.92.0(@babel/core@7.24.7) + '@glimmer/vm-babel-plugins': 0.84.2(@babel/core@7.24.7) '@simple-dom/interface': 1.4.0 - backburner.js: 2.8.0 + babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.7) + babel-plugin-filter-imports: 4.0.0 + broccoli-concat: 4.2.5 + broccoli-debug: 0.6.5 broccoli-file-creator: 2.1.1 broccoli-funnel: 3.0.8 broccoli-merge-trees: 4.2.0 chalk: 4.1.2 ember-auto-import: 2.7.4(webpack@5.92.1) - ember-cli-babel: 8.2.0(@babel/core@7.24.7) + ember-cli-babel: 7.26.11 ember-cli-get-component-path-option: 1.0.0 ember-cli-is-package-missing: 1.0.0 ember-cli-normalize-entity-name: 1.0.0 @@ -14049,15 +14630,13 @@ snapshots: ember-cli-typescript-blueprint-polyfill: 0.1.0 ember-cli-version-checker: 5.1.2 ember-router-generator: 2.0.0 - inflection: 2.0.1 - route-recognizer: 0.3.4 - router_js: 8.0.5(route-recognizer@0.3.4)(rsvp@4.8.5) + inflection: 1.13.4 + resolve: 1.22.8 semver: 7.6.2 silent-error: 1.1.1 - simple-html-tokenizer: 0.5.11 transitivePeerDependencies: + - '@babel/core' - '@glint/template' - - rsvp - supports-color - webpack @@ -14117,6 +14696,20 @@ snapshots: - supports-color - webpack + ember-template-imports@3.4.2: + dependencies: + babel-import-util: 0.2.0 + broccoli-stew: 3.0.0 + ember-cli-babel-plugin-helpers: 1.1.1 + ember-cli-version-checker: 5.1.2 + line-column: 1.0.2 + magic-string: 0.25.9 + parse-static-imports: 1.1.0 + string.prototype.matchall: 4.0.11 + validate-peer-dependencies: 1.2.0 + transitivePeerDependencies: + - supports-color + ember-template-lint@3.16.0: dependencies: '@ember-template-lint/todo-utils': 10.0.0 @@ -14137,6 +14730,29 @@ snapshots: transitivePeerDependencies: - supports-color + ember-template-lint@5.13.0: + dependencies: + '@lint-todo/utils': 13.1.1 + aria-query: 5.3.0 + chalk: 5.3.0 + ci-info: 3.9.0 + date-fns: 2.30.0 + ember-template-imports: 3.4.2 + ember-template-recast: 6.1.4 + eslint-formatter-kakoune: 1.0.0 + find-up: 6.3.0 + fuse.js: 6.6.2 + get-stdin: 9.0.0 + globby: 13.2.2 + is-glob: 4.0.3 + language-tags: 1.0.9 + micromatch: 4.0.7 + resolve: 1.22.8 + v8-compile-cache: 2.4.0 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + ember-template-recast@5.0.3: dependencies: '@glimmer/reference': 0.65.4 @@ -14153,6 +14769,29 @@ snapshots: transitivePeerDependencies: - supports-color + ember-template-recast@6.1.4: + dependencies: + '@glimmer/reference': 0.84.3 + '@glimmer/syntax': 0.84.3 + '@glimmer/validator': 0.84.3 + async-promise-queue: 1.0.5 + colors: 1.4.0 + commander: 8.3.0 + globby: 11.1.0 + ora: 5.4.1 + slash: 3.0.0 + tmp: 0.2.3 + workerpool: 6.5.1 + transitivePeerDependencies: + - supports-color + + ember-tracked-storage-polyfill@1.0.0: + dependencies: + ember-cli-babel: 7.26.11 + ember-cli-htmlbars: 5.7.2 + transitivePeerDependencies: + - supports-color + ember-try-config@3.0.0: dependencies: ember-source-channel-url: 1.2.0 @@ -14162,6 +14801,16 @@ snapshots: rsvp: 4.8.5 semver: 5.7.2 + ember-try-config@4.0.0(encoding@0.1.13): + dependencies: + ember-source-channel-url: 3.0.0(encoding@0.1.13) + lodash: 4.17.21 + package-json: 6.5.0 + remote-git-tags: 3.0.0 + semver: 7.6.2 + transitivePeerDependencies: + - encoding + ember-try@1.4.0: dependencies: chalk: 2.4.2 @@ -14180,6 +14829,23 @@ snapshots: transitivePeerDependencies: - supports-color + ember-try@3.0.0(encoding@0.1.13): + dependencies: + chalk: 4.1.2 + cli-table3: 0.6.5 + core-object: 3.1.5 + debug: 4.3.5(supports-color@8.1.1) + ember-try-config: 4.0.0(encoding@0.1.13) + execa: 4.1.0 + fs-extra: 6.0.1 + resolve: 1.22.8 + rimraf: 3.0.2 + semver: 7.6.2 + walk-sync: 2.2.0 + transitivePeerDependencies: + - encoding + - supports-color + emit-function@0.0.2: {} emoji-regex@8.0.0: {} @@ -14205,7 +14871,7 @@ snapshots: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.17 - '@types/node': 20.14.8 + '@types/node': 20.14.9 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -14238,14 +14904,14 @@ snapshots: entities@1.1.2: {} - entities@2.0.3: {} - entities@2.1.0: {} entities@2.2.0: {} entities@3.0.1: {} + env-paths@2.2.1: {} + err-code@2.0.3: {} errlop@2.2.0: {} @@ -14351,10 +15017,21 @@ snapshots: optionalDependencies: source-map: 0.6.1 + eslint-compat-utils@0.5.1(eslint@8.57.0): + dependencies: + eslint: 8.57.0 + semver: 7.6.2 + eslint-config-prettier@8.10.0(eslint@7.32.0): dependencies: eslint: 7.32.0 + eslint-config-prettier@9.1.0(eslint@8.57.0): + dependencies: + eslint: 8.57.0 + + eslint-formatter-kakoune@1.0.0: {} + eslint-plugin-ember@10.6.1(eslint@7.32.0): dependencies: '@ember-data/rfc395-data': 0.0.4 @@ -14367,12 +15044,53 @@ snapshots: requireindex: 1.2.0 snake-case: 3.0.4 + eslint-plugin-ember@11.12.0(eslint@8.57.0): + dependencies: + '@ember-data/rfc395-data': 0.0.4 + '@glimmer/syntax': 0.84.3 + css-tree: 2.3.1 + ember-rfc176-data: 0.3.18 + ember-template-imports: 3.4.2 + ember-template-recast: 6.1.4 + eslint: 8.57.0 + eslint-utils: 3.0.0(eslint@8.57.0) + estraverse: 5.3.0 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + magic-string: 0.30.10 + requireindex: 1.2.0 + snake-case: 3.0.4 + transitivePeerDependencies: + - supports-color + + eslint-plugin-es-x@7.7.0(eslint@8.57.0): + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.10.1 + eslint: 8.57.0 + eslint-compat-utils: 0.5.1(eslint@8.57.0) + eslint-plugin-es@3.0.1(eslint@7.32.0): dependencies: eslint: 7.32.0 eslint-utils: 2.1.0 regexpp: 3.2.0 + eslint-plugin-n@16.6.2(eslint@8.57.0): + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + builtins: 5.1.0 + eslint: 8.57.0 + eslint-plugin-es-x: 7.7.0(eslint@8.57.0) + get-tsconfig: 4.7.5 + globals: 13.24.0 + ignore: 5.3.1 + is-builtin-module: 3.2.1 + is-core-module: 2.14.0 + minimatch: 3.1.2 + resolve: 1.22.8 + semver: 7.6.2 + eslint-plugin-node@11.1.0(eslint@7.32.0): dependencies: eslint: 7.32.0 @@ -14391,6 +15109,16 @@ snapshots: optionalDependencies: eslint-config-prettier: 8.10.0(eslint@7.32.0) + eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.2): + dependencies: + eslint: 8.57.0 + prettier: 3.3.2 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.8 + optionalDependencies: + '@types/eslint': 8.56.10 + eslint-config-prettier: 9.1.0(eslint@8.57.0) + eslint-plugin-qunit@6.2.0(eslint@7.32.0): dependencies: eslint-utils: 3.0.0(eslint@7.32.0) @@ -14398,6 +15126,13 @@ snapshots: transitivePeerDependencies: - eslint + eslint-plugin-qunit@8.1.1(eslint@8.57.0): + dependencies: + eslint-utils: 3.0.0(eslint@8.57.0) + requireindex: 1.2.0 + transitivePeerDependencies: + - eslint + eslint-scope@4.0.3: dependencies: esrecurse: 4.3.0 @@ -14408,6 +15143,11 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + eslint-utils@2.1.0: dependencies: eslint-visitor-keys: 1.3.0 @@ -14417,10 +15157,17 @@ snapshots: eslint: 7.32.0 eslint-visitor-keys: 2.1.0 + eslint-utils@3.0.0(eslint@8.57.0): + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 2.1.0 + eslint-visitor-keys@1.3.0: {} eslint-visitor-keys@2.1.0: {} + eslint-visitor-keys@3.4.3: {} + eslint@7.32.0: dependencies: '@babel/code-frame': 7.12.11 @@ -14466,6 +15213,49 @@ snapshots: transitivePeerDependencies: - supports-color + eslint@8.57.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.10.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.5(supports-color@8.1.1) + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + esm@3.2.25: {} espree@7.3.1: @@ -14474,6 +15264,12 @@ snapshots: acorn-jsx: 5.3.2(acorn@7.4.1) eslint-visitor-keys: 1.3.0 + espree@9.6.1: + dependencies: + acorn: 8.12.0 + acorn-jsx: 5.3.2(acorn@8.12.0) + eslint-visitor-keys: 3.4.3 + esprima@3.0.0: {} esprima@4.0.1: {} @@ -14490,6 +15286,8 @@ snapshots: estraverse@5.3.0: {} + estree-walker@0.6.1: {} + estree-walker@1.0.1: {} estree-walker@2.0.2: {} @@ -14665,19 +15463,6 @@ snapshots: dependencies: blank-object: 1.0.2 - fast-sourcemap-concat@1.4.0: - dependencies: - chalk: 2.4.2 - fs-extra: 5.0.0 - heimdalljs-logger: 0.1.10 - memory-streams: 0.1.3 - mkdirp: 0.5.6 - source-map: 0.4.4 - source-map-url: 0.3.0 - sourcemap-validator: 1.1.1 - transitivePeerDependencies: - - supports-color - fast-sourcemap-concat@2.1.1: dependencies: chalk: 2.4.2 @@ -14690,14 +15475,12 @@ snapshots: transitivePeerDependencies: - supports-color + fastest-levenshtein@1.0.16: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 - faye-websocket@0.10.0: - dependencies: - websocket-driver: 0.7.4 - faye-websocket@0.11.4: dependencies: websocket-driver: 0.7.4 @@ -14720,13 +15503,19 @@ snapshots: dependencies: flat-cache: 3.2.0 + file-entry-cache@7.0.2: + dependencies: + flat-cache: 3.2.0 + + file-entry-cache@9.0.0: + dependencies: + flat-cache: 5.0.0 + file-uri-to-path@1.0.0: optional: true filesize@10.1.2: {} - filesize@4.2.1: {} - filesize@6.4.0: {} fill-range@4.0.0: @@ -14853,16 +15642,6 @@ snapshots: tmp: 0.0.33 type-fest: 0.11.0 - fixturify-project@5.2.0: - dependencies: - bin-links: 3.0.3 - deepmerge: 4.3.1 - fixturify: 2.1.1 - resolve-package-path: 4.0.3 - tmp: 0.0.33 - type-fest: 2.19.0 - walk-sync: 3.0.0 - fixturify@1.3.0: dependencies: '@types/fs-extra': 5.1.0 @@ -14886,6 +15665,11 @@ snapshots: keyv: 4.5.4 rimraf: 3.0.2 + flat-cache@5.0.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + flatted@3.3.1: {} flush-write-stream@1.1.1: @@ -15084,6 +15868,8 @@ snapshots: get-stdin@8.0.0: {} + get-stdin@9.0.0: {} + get-stream@3.0.0: {} get-stream@4.1.0: @@ -15102,6 +15888,10 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 + get-tsconfig@4.7.5: + dependencies: + resolve-pkg-maps: 1.0.0 + get-value@2.0.6: {} git-fetch-pack@0.1.1: @@ -15163,13 +15953,17 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + glob-to-regexp@0.4.1: {} glob@10.4.2: dependencies: foreground-child: 3.2.1 jackspeak: 3.4.0 - minimatch: 9.0.4 + minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 path-scurry: 1.11.1 @@ -15212,6 +16006,10 @@ snapshots: is-windows: 1.0.2 resolve-dir: 1.0.1 + global-modules@2.0.0: + dependencies: + global-prefix: 3.0.0 + global-prefix@1.0.2: dependencies: expand-tilde: 2.0.2 @@ -15220,6 +16018,12 @@ snapshots: is-windows: 1.0.2 which: 1.3.1 + global-prefix@3.0.0: + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + globals@11.12.0: {} globals@13.24.0: @@ -15266,6 +16070,16 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 + globby@13.2.2: + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 4.0.0 + + globjoin@0.1.4: {} + globrex@0.1.2: {} gopd@1.0.1: @@ -15330,6 +16144,8 @@ snapshots: graceful-readlink@1.0.1: {} + graphemer@1.4.0: {} + growly@1.3.0: {} handlebars@4.7.8: @@ -15341,6 +16157,8 @@ snapshots: optionalDependencies: uglify-js: 3.18.0 + hard-rejection@2.1.0: {} + has-ansi@2.0.0: dependencies: ansi-regex: 2.1.1 @@ -15425,13 +16243,6 @@ snapshots: dependencies: function-bind: 1.1.2 - heimdalljs-fs-monitor@0.2.3: - dependencies: - heimdalljs: 0.2.6 - heimdalljs-logger: 0.1.10 - transitivePeerDependencies: - - supports-color - heimdalljs-fs-monitor@1.1.1: dependencies: callsites: 3.1.0 @@ -15472,8 +16283,6 @@ snapshots: dependencies: parse-passwd: 1.0.0 - hosted-git-info@2.8.9: {} - hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 @@ -15490,6 +16299,8 @@ snapshots: dependencies: whatwg-encoding: 1.0.5 + html-tags@3.3.1: {} + http-cache-semantics@3.8.1: {} http-cache-semantics@4.1.1: {} @@ -15572,10 +16383,14 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-lazy@4.0.0: {} + imurmurhash@0.1.4: {} indent-string@4.0.0: {} + indent-string@5.0.0: {} + infer-owner@1.0.4: {} inflection@1.13.4: {} @@ -15633,6 +16448,24 @@ snapshots: strip-ansi: 6.0.1 through: 2.3.8 + inquirer@8.2.6: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + inquirer@9.2.23: dependencies: '@inquirer/figures': 1.0.3 @@ -15707,6 +16540,10 @@ snapshots: is-buffer@1.1.6: {} + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + is-callable@1.2.7: {} is-core-module@2.14.0: @@ -15806,6 +16643,10 @@ snapshots: is-redirect@1.0.0: {} + is-reference@1.2.1: + dependencies: + '@types/estree': 1.0.5 + is-regex@1.1.4: dependencies: call-bind: 1.0.7 @@ -15859,10 +16700,6 @@ snapshots: isarray@2.0.5: {} - isbinaryfile@3.0.3: - dependencies: - buffer-alloc: 1.2.0 - isbinaryfile@4.0.10: {} isbinaryfile@5.0.2: {} @@ -15902,7 +16739,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.14.8 + '@types/node': 20.14.9 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -15961,8 +16798,6 @@ snapshots: - supports-color - utf-8-validate - jsesc@0.3.0: {} - jsesc@0.5.0: {} jsesc@1.3.0: {} @@ -16020,6 +16855,10 @@ snapshots: dependencies: json-buffer: 3.0.0 + keyv@3.1.0: + dependencies: + json-buffer: 3.0.0 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -16034,6 +16873,16 @@ snapshots: kind-of@6.0.3: {} + known-css-properties@0.29.0: {} + + known-css-properties@0.31.0: {} + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + latest-version@5.1.0: dependencies: package-json: 6.5.0 @@ -16064,6 +16913,8 @@ snapshots: dependencies: through: 2.2.7 + lines-and-columns@1.2.4: {} + linkify-it@2.2.0: dependencies: uc.micro: 1.0.6 @@ -16076,17 +16927,8 @@ snapshots: dependencies: uc.micro: 1.0.6 - livereload-js@2.4.0: {} - livereload-js@3.4.1: {} - load-json-file@4.0.0: - dependencies: - graceful-fs: 4.2.11 - parse-json: 4.0.0 - pify: 3.0.0 - strip-bom: 3.0.0 - loader-runner@2.4.0: {} loader-runner@4.3.0: {} @@ -16105,6 +16947,8 @@ snapshots: loader.js@4.7.0: {} + locate-character@2.0.5: {} + locate-path@2.0.0: dependencies: p-locate: 2.0.0 @@ -16161,6 +17005,8 @@ snapshots: lodash.assignin@4.2.0: {} + lodash.camelcase@4.3.0: {} + lodash.castarray@4.4.0: {} lodash.clonedeep@4.5.0: {} @@ -16180,8 +17026,6 @@ snapshots: lodash._baseflatten: 3.1.4 lodash._isiterateecall: 3.0.9 - lodash.foreach@4.5.0: {} - lodash.isarguments@3.1.0: {} lodash.isarray@3.0.4: {} @@ -16194,6 +17038,8 @@ snapshots: lodash.isarguments: 3.1.0 lodash.isarray: 3.0.4 + lodash.memoize@4.1.2: {} + lodash.merge@4.6.2: {} lodash.omit@4.5.0: {} @@ -16252,10 +17098,18 @@ snapshots: lru-cache@7.18.3: {} + magic-string@0.24.1: + dependencies: + sourcemap-codec: 1.4.8 + magic-string@0.25.9: dependencies: sourcemap-codec: 1.4.8 + magic-string@0.30.10: + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -16297,18 +17151,14 @@ snapshots: map-cache@0.2.2: {} + map-obj@1.0.1: {} + + map-obj@4.3.0: {} + map-visit@1.0.0: dependencies: object-visit: 1.0.1 - markdown-it-terminal@0.1.0: - dependencies: - ansi-styles: 3.2.1 - cardinal: 1.0.0 - cli-table: 0.3.11 - lodash.merge: 4.6.2 - markdown-it: 8.4.2 - markdown-it-terminal@0.2.1: dependencies: ansi-styles: 3.2.1 @@ -16325,14 +17175,6 @@ snapshots: lodash.merge: 4.6.2 markdown-it: 13.0.2 - markdown-it@11.0.1: - dependencies: - argparse: 1.0.10 - entities: 2.0.3 - linkify-it: 3.0.3 - mdurl: 1.0.1 - uc.micro: 1.0.6 - markdown-it@12.3.2: dependencies: argparse: 2.0.1 @@ -16357,14 +17199,6 @@ snapshots: mdurl: 1.0.1 uc.micro: 1.0.6 - markdown-it@9.1.0: - dependencies: - argparse: 1.0.10 - entities: 1.1.2 - linkify-it: 2.2.0 - mdurl: 1.0.1 - uc.micro: 1.0.6 - matcher-collection@1.1.2: dependencies: minimatch: 3.1.2 @@ -16374,6 +17208,8 @@ snapshots: '@types/minimatch': 3.0.5 minimatch: 3.1.2 + mathml-tag-names@2.1.3: {} + md5.js@1.3.5: dependencies: hash-base: 3.1.0 @@ -16408,7 +17244,22 @@ snapshots: dependencies: readable-stream: 1.0.34 - memorystream@0.3.1: {} + meow@10.1.5: + dependencies: + '@types/minimist': 1.2.5 + camelcase-keys: 7.0.2 + decamelize: 5.0.1 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 8.0.0 + redent: 4.0.0 + trim-newlines: 4.1.1 + type-fest: 1.4.0 + yargs-parser: 20.2.9 + + meow@13.2.0: {} merge-descriptors@1.0.1: {} @@ -16478,6 +17329,8 @@ snapshots: mimic-response@1.0.1: {} + min-indent@1.0.1: {} + mini-css-extract-plugin@2.9.0(webpack@5.92.1): dependencies: schema-utils: 4.2.0 @@ -16504,10 +17357,16 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.4: + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 + minimist-options@4.1.0: + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + minimist@0.2.4: {} minimist@1.2.8: {} @@ -16574,12 +17433,6 @@ snapshots: for-in: 1.0.2 is-extendable: 1.0.1 - mkdirp-infer-owner@2.0.0: - dependencies: - chownr: 2.0.0 - infer-owner: 1.0.4 - mkdirp: 1.0.4 - mkdirp@0.5.6: dependencies: minimist: 1.2.8 @@ -16724,17 +17577,16 @@ snapshots: dependencies: abbrev: 1.1.1 - normalize-package-data@2.5.0: + normalize-package-data@3.0.3: dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 + hosted-git-info: 4.1.0 + is-core-module: 2.14.0 + semver: 7.6.2 validate-npm-package-license: 3.0.4 - normalize-package-data@6.0.1: + normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - is-core-module: 2.14.0 semver: 7.6.2 validate-npm-package-license: 3.0.4 @@ -16756,8 +17608,6 @@ snapshots: dependencies: semver: 7.6.2 - npm-normalize-package-bin@2.0.0: {} - npm-normalize-package-bin@3.0.1: {} npm-package-arg@10.1.0: @@ -16774,13 +17624,6 @@ snapshots: semver: 7.6.2 validate-npm-package-name: 5.0.1 - npm-package-arg@6.1.1: - dependencies: - hosted-git-info: 2.8.9 - osenv: 0.1.5 - semver: 5.7.2 - validate-npm-package-name: 3.0.0 - npm-package-arg@8.1.5: dependencies: hosted-git-info: 4.1.0 @@ -16794,18 +17637,6 @@ snapshots: npm-package-arg: 11.0.2 semver: 7.6.2 - npm-run-all@4.1.5: - dependencies: - ansi-styles: 3.2.1 - chalk: 2.4.2 - cross-spawn: 6.0.5 - memorystream: 0.3.1 - minimatch: 3.1.2 - pidtree: 0.3.1 - read-pkg: 3.0.0 - shell-quote: 1.8.1 - string.prototype.padend: 3.1.6 - npm-run-path@2.0.2: dependencies: path-key: 2.0.1 @@ -17032,10 +17863,14 @@ snapshots: parse-github-repo-url@1.4.1: {} - parse-json@4.0.0: + parse-json@5.2.0: dependencies: + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 - json-parse-better-errors: 1.0.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-ms@1.0.1: {} parse-passwd@1.0.0: {} @@ -17087,10 +17922,6 @@ snapshots: path-to-regexp@0.1.7: {} - path-type@3.0.0: - dependencies: - pify: 3.0.0 - path-type@4.0.0: {} pbkdf2@3.1.2: @@ -17105,8 +17936,6 @@ snapshots: picomatch@2.3.1: {} - pidtree@0.3.1: {} - pify@3.0.0: {} pify@4.0.1: {} @@ -17170,6 +17999,16 @@ snapshots: icss-utils: 5.1.0(postcss@8.4.38) postcss: 8.4.38 + postcss-resolve-nested-selector@0.1.1: {} + + postcss-safe-parser@6.0.0(postcss@8.4.38): + dependencies: + postcss: 8.4.38 + + postcss-safe-parser@7.0.0(postcss@8.4.38): + dependencies: + postcss: 8.4.38 + postcss-selector-parser@6.1.0: dependencies: cssesc: 3.0.0 @@ -17195,6 +18034,12 @@ snapshots: prettier@2.8.8: {} + prettier@3.3.2: {} + + pretty-ms@3.2.0: + dependencies: + parse-ms: 1.0.1 + printf@0.6.1: {} private@0.1.8: {} @@ -17230,13 +18075,11 @@ snapshots: promise.hash.helper@1.0.8: {} - promise.prototype.finally@3.1.8: + proper-lockfile@4.1.2: dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - set-function-name: 2.0.2 + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 proxy-addr@2.0.7: dependencies: @@ -17296,6 +18139,8 @@ snapshots: queue-microtask@1.2.3: {} + quick-lru@5.1.1: {} + quick-temp@0.1.8: dependencies: mktemp: 0.4.0 @@ -17317,6 +18162,17 @@ snapshots: transitivePeerDependencies: - supports-color + qunit-dom@2.0.0: + dependencies: + broccoli-funnel: 3.0.8 + broccoli-merge-trees: 4.2.0 + ember-cli-babel: 7.26.11 + ember-cli-version-checker: 5.1.2 + transitivePeerDependencies: + - supports-color + + qunit-theme-ember@1.0.0: {} + qunit@2.21.0: dependencies: commander: 7.2.0 @@ -17353,13 +18209,18 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - read-cmd-shim@3.0.1: {} + read-pkg-up@8.0.0: + dependencies: + find-up: 5.0.0 + read-pkg: 6.0.0 + type-fest: 1.4.0 - read-pkg@3.0.0: + read-pkg@6.0.0: dependencies: - load-json-file: 4.0.0 - normalize-package-data: 2.5.0 - path-type: 3.0.0 + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 3.0.3 + parse-json: 5.2.0 + type-fest: 1.4.0 read-yaml-file@1.1.0: dependencies: @@ -17412,6 +18273,11 @@ snapshots: private: 0.1.8 source-map: 0.6.1 + redent@4.0.0: + dependencies: + indent-string: 5.0.0 + strip-indent: 4.0.0 + redeyed@1.0.1: dependencies: esprima: 3.0.0 @@ -17528,6 +18394,8 @@ snapshots: git-fetch-pack: 0.1.1 git-transport-protocol: 0.1.0 + remote-git-tags@3.0.0: {} + remove-trailing-separator@1.1.0: {} remove-types@1.0.0: @@ -17551,6 +18419,8 @@ snapshots: require-from-string@2.0.2: {} + require-relative@0.8.7: {} + requireindex@1.2.0: {} requires-port@1.0.0: {} @@ -17566,6 +18436,8 @@ snapshots: resolve-from@4.0.0: {} + resolve-from@5.0.0: {} + resolve-package-path@1.2.7: dependencies: path-root: 0.1.1 @@ -17590,6 +18462,8 @@ snapshots: http-errors: 1.6.3 path-is-absolute: 1.0.1 + resolve-pkg-maps@1.0.0: {} + resolve-url@0.2.1: {} resolve@1.22.8: @@ -17644,6 +18518,24 @@ snapshots: dependencies: del: 5.1.0 + rollup-pluginutils@2.8.2: + dependencies: + estree-walker: 0.6.1 + + rollup@0.57.1: + dependencies: + '@types/acorn': 4.0.6 + acorn: 5.7.4 + acorn-dynamic-import: 3.0.0 + date-time: 2.1.0 + is-reference: 1.2.1 + locate-character: 2.0.5 + pretty-ms: 3.2.0 + require-relative: 0.8.7 + rollup-pluginutils: 2.8.2 + signal-exit: 3.0.7 + sourcemap-codec: 1.4.8 + rollup@2.79.1: optionalDependencies: fsevents: 2.3.3 @@ -17739,14 +18631,6 @@ snapshots: dependencies: xmlchars: 2.2.0 - scenario-tester@2.1.2: - dependencies: - fixturify-project: 5.2.0 - fs-extra: 9.1.0 - glob: 7.2.3 - tmp: 0.2.3 - yargs: 16.2.0 - schema-utils@1.0.0: dependencies: ajv: 6.12.6 @@ -17888,6 +18772,8 @@ snapshots: slash@3.0.0: {} + slash@4.0.0: {} + slice-ansi@4.0.0: dependencies: ansi-styles: 4.3.0 @@ -18007,10 +18893,6 @@ snapshots: source-map-url@0.4.1: {} - source-map@0.1.43: - dependencies: - amdefine: 1.0.1 - source-map@0.4.4: dependencies: amdefine: 1.0.1 @@ -18021,15 +18903,10 @@ snapshots: sourcemap-codec@1.4.8: {} - sourcemap-validator@1.1.1: - dependencies: - jsesc: 0.3.0 - lodash.foreach: 4.5.0 - lodash.template: 4.5.0 - source-map: 0.1.43 - spawn-args@0.2.0: {} + spawn-command@0.0.2: {} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -18133,13 +19010,6 @@ snapshots: set-function-name: 2.0.2 side-channel: 1.0.6 - string.prototype.padend@3.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - string.prototype.trim@1.2.9: dependencies: call-bind: 1.0.7 @@ -18197,6 +19067,10 @@ snapshots: strip-final-newline@2.0.0: {} + strip-indent@4.0.0: + dependencies: + min-indent: 1.0.1 + strip-json-comments@2.0.1: {} strip-json-comments@3.1.1: {} @@ -18207,8 +19081,116 @@ snapshots: schema-utils: 3.3.0 webpack: 5.92.1 + style-search@0.1.0: {} + styled_string@0.0.1: {} + stylelint-config-recommended@13.0.0(stylelint@15.11.0): + dependencies: + stylelint: 15.11.0 + + stylelint-config-standard@34.0.0(stylelint@15.11.0): + dependencies: + stylelint: 15.11.0 + stylelint-config-recommended: 13.0.0(stylelint@15.11.0) + + stylelint-prettier@4.1.0(prettier@3.3.2)(stylelint@15.11.0): + dependencies: + prettier: 3.3.2 + prettier-linter-helpers: 1.0.0 + stylelint: 15.11.0 + + stylelint@15.11.0: + dependencies: + '@csstools/css-parser-algorithms': 2.6.3(@csstools/css-tokenizer@2.3.1) + '@csstools/css-tokenizer': 2.3.1 + '@csstools/media-query-list-parser': 2.1.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1) + '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.0) + balanced-match: 2.0.0 + colord: 2.9.3 + cosmiconfig: 8.3.6 + css-functions-list: 3.2.2 + css-tree: 2.3.1 + debug: 4.3.5(supports-color@8.1.1) + fast-glob: 3.3.2 + fastest-levenshtein: 1.0.16 + file-entry-cache: 7.0.2 + global-modules: 2.0.0 + globby: 11.1.0 + globjoin: 0.1.4 + html-tags: 3.3.1 + ignore: 5.3.1 + import-lazy: 4.0.0 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.29.0 + mathml-tag-names: 2.1.3 + meow: 10.1.5 + micromatch: 4.0.7 + normalize-path: 3.0.0 + picocolors: 1.0.1 + postcss: 8.4.38 + postcss-resolve-nested-selector: 0.1.1 + postcss-safe-parser: 6.0.0(postcss@8.4.38) + postcss-selector-parser: 6.1.0 + postcss-value-parser: 4.2.0 + resolve-from: 5.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + style-search: 0.1.0 + supports-hyperlinks: 3.0.0 + svg-tags: 1.0.0 + table: 6.8.2 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + - typescript + + stylelint@16.6.1: + dependencies: + '@csstools/css-parser-algorithms': 2.6.3(@csstools/css-tokenizer@2.3.1) + '@csstools/css-tokenizer': 2.3.1 + '@csstools/media-query-list-parser': 2.1.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1) + '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.0) + '@dual-bundle/import-meta-resolve': 4.1.0 + balanced-match: 2.0.0 + colord: 2.9.3 + cosmiconfig: 9.0.0 + css-functions-list: 3.2.2 + css-tree: 2.3.1 + debug: 4.3.5(supports-color@8.1.1) + fast-glob: 3.3.2 + fastest-levenshtein: 1.0.16 + file-entry-cache: 9.0.0 + global-modules: 2.0.0 + globby: 11.1.0 + globjoin: 0.1.4 + html-tags: 3.3.1 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.31.0 + mathml-tag-names: 2.1.3 + meow: 13.2.0 + micromatch: 4.0.7 + normalize-path: 3.0.0 + picocolors: 1.0.1 + postcss: 8.4.38 + postcss-resolve-nested-selector: 0.1.1 + postcss-safe-parser: 7.0.0(postcss@8.4.38) + postcss-selector-parser: 6.1.0 + postcss-value-parser: 4.2.0 + resolve-from: 5.0.0 + string-width: 4.2.3 + strip-ansi: 7.1.0 + supports-hyperlinks: 3.0.0 + svg-tags: 1.0.0 + table: 6.8.2 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + - typescript + sum-up@1.0.3: dependencies: chalk: 1.1.3 @@ -18227,8 +19209,15 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-hyperlinks@3.0.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + supports-preserve-symlinks-flag@1.0.0: {} + svg-tags@1.0.0: {} + symbol-tree@3.2.4: {} symlink-or-copy@1.3.1: {} @@ -18253,6 +19242,11 @@ snapshots: transitivePeerDependencies: - supports-color + synckit@0.8.8: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.3 + table@6.8.2: dependencies: ajv: 8.16.0 @@ -18280,10 +19274,6 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - temp@0.9.1: - dependencies: - rimraf: 2.6.3 - temp@0.9.4: dependencies: mkdirp: 0.5.6 @@ -18449,6 +19439,8 @@ snapshots: through@2.3.8: {} + time-zone@1.0.0: {} + timed-out@4.0.1: {} timers-browserify@2.0.12: @@ -18460,17 +19452,6 @@ snapshots: globalyzer: 0.1.0 globrex: 0.1.2 - tiny-lr@1.1.1: - dependencies: - body: 5.1.0 - debug: 3.2.7 - faye-websocket: 0.10.0 - livereload-js: 2.4.0 - object-assign: 4.1.1 - qs: 6.12.1 - transitivePeerDependencies: - - supports-color - tiny-lr@2.0.0: dependencies: body: 5.1.0 @@ -18543,6 +19524,15 @@ snapshots: dependencies: punycode: 2.3.1 + tracked-built-ins@3.3.0: + dependencies: + '@embroider/addon-shim': 1.8.9 + ember-tracked-storage-polyfill: 1.0.0 + transitivePeerDependencies: + - supports-color + + tree-kill@1.2.2: {} + tree-sync@1.4.0: dependencies: debug: 2.6.9 @@ -18563,6 +19553,8 @@ snapshots: transitivePeerDependencies: - supports-color + trim-newlines@4.1.1: {} + trim-right@1.0.1: {} tslib@1.14.1: {} @@ -18581,7 +19573,7 @@ snapshots: type-fest@0.21.3: {} - type-fest@2.19.0: {} + type-fest@1.4.0: {} type-is@1.6.18: dependencies: @@ -18703,6 +19695,8 @@ snapshots: upath@1.2.0: optional: true + upath@2.0.1: {} + update-browserslist-db@1.0.16(browserslist@4.23.1): dependencies: browserslist: 4.23.1 @@ -18751,10 +19745,10 @@ snapshots: utils-merge@1.0.1: {} - uuid@3.4.0: {} - uuid@8.3.2: {} + uuid@9.0.1: {} + v8-compile-cache@2.4.0: {} validate-npm-package-license@3.0.4: @@ -18937,6 +19931,8 @@ snapshots: dependencies: iconv-lite: 0.4.24 + whatwg-fetch@3.6.20: {} + whatwg-mimetype@2.3.0: {} whatwg-url@5.0.0: @@ -19033,10 +20029,10 @@ snapshots: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 - write-file-atomic@4.0.2: + write-file-atomic@5.0.1: dependencies: imurmurhash: 0.1.4 - signal-exit: 3.0.7 + signal-exit: 4.1.0 ws@7.5.10: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index bd9d2234..076ff8fb 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,5 @@ packages: - '.' - - 'test-app' + - 'test-app-3.x' + - 'test-app-4.x' + - 'test-app-5.x' diff --git a/test-app/.eslintrc.js b/test-app-3.x/.eslintrc.js similarity index 100% rename from test-app/.eslintrc.js rename to test-app-3.x/.eslintrc.js diff --git a/test-app-3.x/.npmignore b/test-app-3.x/.npmignore new file mode 100644 index 00000000..0bd5bb56 --- /dev/null +++ b/test-app-3.x/.npmignore @@ -0,0 +1,2 @@ +# this whole test-app-3.x is unpublished +* \ No newline at end of file diff --git a/test-app-3.x/.stylelintrc.js b/test-app-3.x/.stylelintrc.js new file mode 100644 index 00000000..021c539a --- /dev/null +++ b/test-app-3.x/.stylelintrc.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + extends: ['stylelint-config-standard', 'stylelint-prettier/recommended'], +}; diff --git a/test-app-3.x/.template-lintrc.js b/test-app-3.x/.template-lintrc.js new file mode 100644 index 00000000..3f02802d --- /dev/null +++ b/test-app-3.x/.template-lintrc.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = { + extends: 'octane', + rules: { + 'no-curly-component-invocation': { allow: ['utc'] }, + }, +}; diff --git a/test-app/app/app.js b/test-app-3.x/app/app.js similarity index 86% rename from test-app/app/app.js rename to test-app-3.x/app/app.js index 1ba93424..74f6c076 100644 --- a/test-app/app/app.js +++ b/test-app-3.x/app/app.js @@ -1,7 +1,7 @@ import Application from '@ember/application'; import Resolver from 'ember-resolver'; import loadInitializers from 'ember-load-initializers'; -import config from 'test-app/config/environment'; +import config from 'test-app-3.x/config/environment'; export default class App extends Application { modulePrefix = config.modulePrefix; diff --git a/test-app/app/components/.gitkeep b/test-app-3.x/app/components/.gitkeep similarity index 100% rename from test-app/app/components/.gitkeep rename to test-app-3.x/app/components/.gitkeep diff --git a/test-app/app/controllers/index.js b/test-app-3.x/app/controllers/index.js similarity index 100% rename from test-app/app/controllers/index.js rename to test-app-3.x/app/controllers/index.js diff --git a/test-app/app/controllers/smoke.js b/test-app-3.x/app/controllers/smoke.js similarity index 100% rename from test-app/app/controllers/smoke.js rename to test-app-3.x/app/controllers/smoke.js diff --git a/test-app/app/helpers/.gitkeep b/test-app-3.x/app/helpers/.gitkeep similarity index 100% rename from test-app/app/helpers/.gitkeep rename to test-app-3.x/app/helpers/.gitkeep diff --git a/test-app-3.x/app/helpers/get-format.js b/test-app-3.x/app/helpers/get-format.js new file mode 100644 index 00000000..0b7319ee --- /dev/null +++ b/test-app-3.x/app/helpers/get-format.js @@ -0,0 +1,5 @@ +import { helper } from '@ember/component/helper'; + +export default helper(function getFormat(/*positional, named*/) { + return 'L'; +}); diff --git a/test-app/app/index.html b/test-app-3.x/app/index.html similarity index 83% rename from test-app/app/index.html rename to test-app-3.x/app/index.html index 6acd3b56..7a6a3336 100644 --- a/test-app/app/index.html +++ b/test-app-3.x/app/index.html @@ -3,14 +3,14 @@ - test-app + test-app-3.x {{content-for "head"}} - + {{content-for "head-footer"}} @@ -18,7 +18,7 @@ {{content-for "body"}} - + {{content-for "body-footer"}} diff --git a/test-app/app/models/.gitkeep b/test-app-3.x/app/models/.gitkeep similarity index 100% rename from test-app/app/models/.gitkeep rename to test-app-3.x/app/models/.gitkeep diff --git a/test-app/app/router.js b/test-app-3.x/app/router.js similarity index 82% rename from test-app/app/router.js rename to test-app-3.x/app/router.js index 3bccfa0b..8665eb27 100644 --- a/test-app/app/router.js +++ b/test-app-3.x/app/router.js @@ -1,5 +1,5 @@ import EmberRouter from '@ember/routing/router'; -import config from 'test-app/config/environment'; +import config from 'test-app-3.x/config/environment'; export default class Router extends EmberRouter { location = config.locationType; diff --git a/test-app/app/routes/application.js b/test-app-3.x/app/routes/application.js similarity index 100% rename from test-app/app/routes/application.js rename to test-app-3.x/app/routes/application.js diff --git a/test-app/app/routes/index.js b/test-app-3.x/app/routes/index.js similarity index 100% rename from test-app/app/routes/index.js rename to test-app-3.x/app/routes/index.js diff --git a/test-app/app/routes/smoke.js b/test-app-3.x/app/routes/smoke.js similarity index 100% rename from test-app/app/routes/smoke.js rename to test-app-3.x/app/routes/smoke.js diff --git a/test-app/app/styles/app.css b/test-app-3.x/app/styles/app.css similarity index 93% rename from test-app/app/styles/app.css rename to test-app-3.x/app/styles/app.css index 05a8b206..6f0afd54 100644 --- a/test-app/app/styles/app.css +++ b/test-app-3.x/app/styles/app.css @@ -1,4 +1,5 @@ -html, body { +html, +body { margin: 20px; font-family: Helvetica, sans-serif; font-size: 14px; diff --git a/test-app/app/templates/application.hbs b/test-app-3.x/app/templates/application.hbs similarity index 100% rename from test-app/app/templates/application.hbs rename to test-app-3.x/app/templates/application.hbs diff --git a/test-app/app/templates/components/partials/calendar.hbs b/test-app-3.x/app/templates/components/partials/calendar.hbs similarity index 100% rename from test-app/app/templates/components/partials/calendar.hbs rename to test-app-3.x/app/templates/components/partials/calendar.hbs diff --git a/test-app/app/templates/components/partials/diff.hbs b/test-app-3.x/app/templates/components/partials/diff.hbs similarity index 100% rename from test-app/app/templates/components/partials/diff.hbs rename to test-app-3.x/app/templates/components/partials/diff.hbs diff --git a/test-app/app/templates/components/partials/duration.hbs b/test-app-3.x/app/templates/components/partials/duration.hbs similarity index 100% rename from test-app/app/templates/components/partials/duration.hbs rename to test-app-3.x/app/templates/components/partials/duration.hbs diff --git a/test-app/app/templates/components/partials/format.hbs b/test-app-3.x/app/templates/components/partials/format.hbs similarity index 100% rename from test-app/app/templates/components/partials/format.hbs rename to test-app-3.x/app/templates/components/partials/format.hbs diff --git a/test-app/app/templates/components/partials/from-now.hbs b/test-app-3.x/app/templates/components/partials/from-now.hbs similarity index 100% rename from test-app/app/templates/components/partials/from-now.hbs rename to test-app-3.x/app/templates/components/partials/from-now.hbs diff --git a/test-app/app/templates/components/partials/moment.hbs b/test-app-3.x/app/templates/components/partials/moment.hbs similarity index 100% rename from test-app/app/templates/components/partials/moment.hbs rename to test-app-3.x/app/templates/components/partials/moment.hbs diff --git a/test-app/app/templates/components/partials/to-now.hbs b/test-app-3.x/app/templates/components/partials/to-now.hbs similarity index 100% rename from test-app/app/templates/components/partials/to-now.hbs rename to test-app-3.x/app/templates/components/partials/to-now.hbs diff --git a/test-app/app/templates/index.hbs b/test-app-3.x/app/templates/index.hbs similarity index 100% rename from test-app/app/templates/index.hbs rename to test-app-3.x/app/templates/index.hbs diff --git a/test-app/app/templates/smoke.hbs b/test-app-3.x/app/templates/smoke.hbs similarity index 100% rename from test-app/app/templates/smoke.hbs rename to test-app-3.x/app/templates/smoke.hbs diff --git a/test-app/config/ember-cli-update.json b/test-app-3.x/config/ember-cli-update.json similarity index 100% rename from test-app/config/ember-cli-update.json rename to test-app-3.x/config/ember-cli-update.json diff --git a/test-app-3.x/config/ember-try.js b/test-app-3.x/config/ember-try.js new file mode 100644 index 00000000..02b09191 --- /dev/null +++ b/test-app-3.x/config/ember-try.js @@ -0,0 +1,45 @@ +'use strict'; + +const { embroiderSafe, embroiderOptimized } = require('@embroider/test-setup'); + +module.exports = async function () { + return { + usePnpm: true, + scenarios: [ + { + name: 'ember-lts-3.16', + npm: { + devDependencies: { + 'ember-source': '~3.16.0', + }, + }, + }, + { + name: 'ember-lts-3.20', + npm: { + devDependencies: { + 'ember-source': '~3.20.0', + }, + }, + }, + { + name: 'ember-lts-3.24', + npm: { + devDependencies: { + 'ember-source': '~3.24.0', + }, + }, + }, + { + name: 'ember-lts-3.28', + npm: { + devDependencies: { + 'ember-source': '~3.28.0', + }, + }, + }, + embroiderSafe(), + embroiderOptimized(), + ], + }; +}; diff --git a/test-app/config/environment.js b/test-app-3.x/config/environment.js similarity index 97% rename from test-app/config/environment.js rename to test-app-3.x/config/environment.js index 9bafb7b5..96726a15 100644 --- a/test-app/config/environment.js +++ b/test-app-3.x/config/environment.js @@ -2,7 +2,7 @@ module.exports = function (environment) { let ENV = { - modulePrefix: 'test-app', + modulePrefix: 'test-app-3.x', environment, rootURL: '/', locationType: 'auto', diff --git a/test-app/config/optional-features.json b/test-app-3.x/config/optional-features.json similarity index 100% rename from test-app/config/optional-features.json rename to test-app-3.x/config/optional-features.json diff --git a/test-app/config/targets.js b/test-app-3.x/config/targets.js similarity index 100% rename from test-app/config/targets.js rename to test-app-3.x/config/targets.js diff --git a/test-app/ember-cli-build.js b/test-app-3.x/ember-cli-build.js similarity index 100% rename from test-app/ember-cli-build.js rename to test-app-3.x/ember-cli-build.js diff --git a/test-app/package.json b/test-app-3.x/package.json similarity index 75% rename from test-app/package.json rename to test-app-3.x/package.json index b9e1e48f..4a788fe4 100644 --- a/test-app/package.json +++ b/test-app-3.x/package.json @@ -1,30 +1,32 @@ { - "name": "test-app", + "name": "test-app-3.x", "private": true, "version": "1.0.0", - "description": "Test suite for ember-moment", + "description": "Test suite for ember-moment with ember-source 3.x", "license": "MIT", "scripts": { "build": "ember build --environment=production", - "lint": "npm-run-all --aggregate-output --continue-on-error --parallel \"lint:!(fix)\"", - "lint:fix": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*:fix", + "lint": "concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\"", + "lint:css": "stylelint \"**/*.css\"", + "lint:css:fix": "concurrently \"pnpm:lint:css -- --fix\"", + "lint:fix": "concurrently \"pnpm:lint:*:fix\" --names \"fix:\"", "lint:hbs": "ember-template-lint .", "lint:hbs:fix": "ember-template-lint . --fix", "lint:js": "eslint . --cache", "lint:js:fix": "eslint . --fix", "start": "ember serve", - "test": "npm-run-all lint test:*", - "test:ember": "ember test", - "test:ember-compatibility": "ember try:each" + "test": "concurrently \"pnpm:lint\" \"pnpm:test:*\" --names \"lint,test:\"", + "test:ember": "ember test --test-port 0" }, "devDependencies": { "@ember/optional-features": "^2.0.0", "@ember/test-helpers": "^2.6.0", "@ember/string": "^3.1.1", - "@embroider/test-setup": "npm:@embroider/test-setup@latest", + "@embroider/test-setup": "^4.0.0", "@glimmer/component": "^1.0.4", "@glimmer/tracking": "^1.0.4", "babel-eslint": "^10.1.0", + "concurrently": "^8.2.2", "ember-auto-import": "^2.3.0", "ember-cli": "~3.28.5", "ember-cli-babel": "^7.26.10", @@ -43,7 +45,7 @@ "ember-source": "~3.28.8", "ember-source-channel-url": "^3.0.0", "ember-template-lint": "^3.15.0", - "ember-try": "^1.4.0", + "ember-try": "^3.0.0", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-ember": "^10.5.8", @@ -53,12 +55,11 @@ "jquery": "^3.6.0", "loader.js": "^4.7.0", "moment-timezone": "^0.5.33", - "npm-run-all": "^4.1.5", "prettier": "^2.5.1", "qunit": "^2.17.2", "qunit-console-grouper": "^0.3.0", "qunit-dom": "^1.6.0", - "scenario-tester": "^2.0.1", + "stylelint": "^16.6.1", "webpack": "^5.65.0" }, "engines": { diff --git a/test-app/public/crossdomain.xml b/test-app-3.x/public/crossdomain.xml similarity index 100% rename from test-app/public/crossdomain.xml rename to test-app-3.x/public/crossdomain.xml diff --git a/test-app/public/robots.txt b/test-app-3.x/public/robots.txt similarity index 100% rename from test-app/public/robots.txt rename to test-app-3.x/public/robots.txt diff --git a/test-app/testem.js b/test-app-3.x/testem.js similarity index 100% rename from test-app/testem.js rename to test-app-3.x/testem.js diff --git a/test-app/tests/.eslintrc.js b/test-app-3.x/tests/.eslintrc.js similarity index 100% rename from test-app/tests/.eslintrc.js rename to test-app-3.x/tests/.eslintrc.js diff --git a/test-app/tests/acceptance/smoke-test.js b/test-app-3.x/tests/acceptance/smoke-test.js similarity index 100% rename from test-app/tests/acceptance/smoke-test.js rename to test-app-3.x/tests/acceptance/smoke-test.js diff --git a/test-app/tests/helpers/.gitkeep b/test-app-3.x/tests/helpers/.gitkeep similarity index 100% rename from test-app/tests/helpers/.gitkeep rename to test-app-3.x/tests/helpers/.gitkeep diff --git a/test-app/tests/helpers/date.js b/test-app-3.x/tests/helpers/date.js similarity index 100% rename from test-app/tests/helpers/date.js rename to test-app-3.x/tests/helpers/date.js diff --git a/test-app/tests/helpers/run-append.js b/test-app-3.x/tests/helpers/run-append.js similarity index 100% rename from test-app/tests/helpers/run-append.js rename to test-app-3.x/tests/helpers/run-append.js diff --git a/test-app/tests/index.html b/test-app-3.x/tests/index.html similarity index 86% rename from test-app/tests/index.html rename to test-app-3.x/tests/index.html index 0ecd8197..7abae4b9 100644 --- a/test-app/tests/index.html +++ b/test-app-3.x/tests/index.html @@ -3,7 +3,7 @@ - test-app Tests + test-app-3.x Tests @@ -11,7 +11,7 @@ {{content-for "test-head"}} - + {{content-for "head-footer"}} @@ -31,7 +31,7 @@ - + {{content-for "body-footer"}} diff --git a/test-app-3.x/tests/integration/helpers/get-format-test.js b/test-app-3.x/tests/integration/helpers/get-format-test.js new file mode 100644 index 00000000..40c9d7cc --- /dev/null +++ b/test-app-3.x/tests/integration/helpers/get-format-test.js @@ -0,0 +1,17 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Helper | get-format', function (hooks) { + setupRenderingTest(hooks); + + // TODO: Replace this with your real tests. + test('it renders', async function (assert) { + this.set('inputValue', 'L'); + + await render(hbs`{{get-format 'global-format'}}`); + + assert.dom(this.element).hasText('L'); + }); +}); diff --git a/test-app/tests/integration/moment-test.js b/test-app-3.x/tests/integration/moment-test.js similarity index 100% rename from test-app/tests/integration/moment-test.js rename to test-app-3.x/tests/integration/moment-test.js diff --git a/test-app/tests/test-helper.js b/test-app-3.x/tests/test-helper.js similarity index 70% rename from test-app/tests/test-helper.js rename to test-app-3.x/tests/test-helper.js index 81843044..b1b4a31b 100644 --- a/test-app/tests/test-helper.js +++ b/test-app-3.x/tests/test-helper.js @@ -1,5 +1,5 @@ -import Application from 'test-app/app'; -import config from 'test-app/config/environment'; +import Application from 'test-app-3.x/app'; +import config from 'test-app-3.x/config/environment'; import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; import { setup } from 'qunit-dom'; diff --git a/test-app/tests/unit/helpers/is-after-test.js b/test-app-3.x/tests/unit/helpers/is-after-test.js similarity index 100% rename from test-app/tests/unit/helpers/is-after-test.js rename to test-app-3.x/tests/unit/helpers/is-after-test.js diff --git a/test-app/tests/unit/helpers/is-before-test.js b/test-app-3.x/tests/unit/helpers/is-before-test.js similarity index 100% rename from test-app/tests/unit/helpers/is-before-test.js rename to test-app-3.x/tests/unit/helpers/is-before-test.js diff --git a/test-app/tests/unit/helpers/is-between-test.js b/test-app-3.x/tests/unit/helpers/is-between-test.js similarity index 100% rename from test-app/tests/unit/helpers/is-between-test.js rename to test-app-3.x/tests/unit/helpers/is-between-test.js diff --git a/test-app/tests/unit/helpers/is-same-or-after-test.js b/test-app-3.x/tests/unit/helpers/is-same-or-after-test.js similarity index 100% rename from test-app/tests/unit/helpers/is-same-or-after-test.js rename to test-app-3.x/tests/unit/helpers/is-same-or-after-test.js diff --git a/test-app/tests/unit/helpers/is-same-or-before-test.js b/test-app-3.x/tests/unit/helpers/is-same-or-before-test.js similarity index 100% rename from test-app/tests/unit/helpers/is-same-or-before-test.js rename to test-app-3.x/tests/unit/helpers/is-same-or-before-test.js diff --git a/test-app/tests/unit/helpers/is-same-test.js b/test-app-3.x/tests/unit/helpers/is-same-test.js similarity index 100% rename from test-app/tests/unit/helpers/is-same-test.js rename to test-app-3.x/tests/unit/helpers/is-same-test.js diff --git a/test-app/tests/unit/helpers/moment-add-test.js b/test-app-3.x/tests/unit/helpers/moment-add-test.js similarity index 100% rename from test-app/tests/unit/helpers/moment-add-test.js rename to test-app-3.x/tests/unit/helpers/moment-add-test.js diff --git a/test-app/tests/unit/helpers/moment-calendar-test.js b/test-app-3.x/tests/unit/helpers/moment-calendar-test.js similarity index 100% rename from test-app/tests/unit/helpers/moment-calendar-test.js rename to test-app-3.x/tests/unit/helpers/moment-calendar-test.js diff --git a/test-app/tests/unit/helpers/moment-diff-test.js b/test-app-3.x/tests/unit/helpers/moment-diff-test.js similarity index 100% rename from test-app/tests/unit/helpers/moment-diff-test.js rename to test-app-3.x/tests/unit/helpers/moment-diff-test.js diff --git a/test-app/tests/unit/helpers/moment-duration-test.js b/test-app-3.x/tests/unit/helpers/moment-duration-test.js similarity index 100% rename from test-app/tests/unit/helpers/moment-duration-test.js rename to test-app-3.x/tests/unit/helpers/moment-duration-test.js diff --git a/test-app/tests/unit/helpers/moment-format-test.js b/test-app-3.x/tests/unit/helpers/moment-format-test.js similarity index 95% rename from test-app/tests/unit/helpers/moment-format-test.js rename to test-app-3.x/tests/unit/helpers/moment-format-test.js index 5f2c46f9..e7f1cc0b 100644 --- a/test-app/tests/unit/helpers/moment-format-test.js +++ b/test-app-3.x/tests/unit/helpers/moment-format-test.js @@ -1,6 +1,5 @@ import EmberObject from '@ember/object'; import { run } from '@ember/runloop'; -import { helper } from '@ember/component/helper'; import { settled } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; import { module, test } from 'qunit'; @@ -128,13 +127,6 @@ module('moment-format', function (hooks) { test('can be called using subexpression', async function (assert) { assert.expect(1); - this.owner.register( - 'helper:get-format', - helper(function () { - return 'L'; - }) - ); - this.set('date', date(0)); await render(hbs`{{moment-format this.date (get-format 'global-format')}}`); assert.dom(this.element).hasText('12/31/1969'); diff --git a/test-app/tests/unit/helpers/moment-from-now-test.js b/test-app-3.x/tests/unit/helpers/moment-from-now-test.js similarity index 100% rename from test-app/tests/unit/helpers/moment-from-now-test.js rename to test-app-3.x/tests/unit/helpers/moment-from-now-test.js diff --git a/test-app/tests/unit/helpers/moment-from-test.js b/test-app-3.x/tests/unit/helpers/moment-from-test.js similarity index 100% rename from test-app/tests/unit/helpers/moment-from-test.js rename to test-app-3.x/tests/unit/helpers/moment-from-test.js diff --git a/test-app/tests/unit/helpers/moment-subtract-test.js b/test-app-3.x/tests/unit/helpers/moment-subtract-test.js similarity index 100% rename from test-app/tests/unit/helpers/moment-subtract-test.js rename to test-app-3.x/tests/unit/helpers/moment-subtract-test.js diff --git a/test-app/tests/unit/helpers/moment-to-now-test.js b/test-app-3.x/tests/unit/helpers/moment-to-now-test.js similarity index 100% rename from test-app/tests/unit/helpers/moment-to-now-test.js rename to test-app-3.x/tests/unit/helpers/moment-to-now-test.js diff --git a/test-app/tests/unit/helpers/moment-to-test.js b/test-app-3.x/tests/unit/helpers/moment-to-test.js similarity index 100% rename from test-app/tests/unit/helpers/moment-to-test.js rename to test-app-3.x/tests/unit/helpers/moment-to-test.js diff --git a/test-app/tests/unit/helpers/now-test.js b/test-app-3.x/tests/unit/helpers/now-test.js similarity index 100% rename from test-app/tests/unit/helpers/now-test.js rename to test-app-3.x/tests/unit/helpers/now-test.js diff --git a/test-app/tests/unit/helpers/unix-test.js b/test-app-3.x/tests/unit/helpers/unix-test.js similarity index 100% rename from test-app/tests/unit/helpers/unix-test.js rename to test-app-3.x/tests/unit/helpers/unix-test.js diff --git a/test-app/tests/unit/helpers/utc-test.js b/test-app-3.x/tests/unit/helpers/utc-test.js similarity index 100% rename from test-app/tests/unit/helpers/utc-test.js rename to test-app-3.x/tests/unit/helpers/utc-test.js diff --git a/test-app-4.x/.editorconfig b/test-app-4.x/.editorconfig new file mode 100644 index 00000000..c35a0024 --- /dev/null +++ b/test-app-4.x/.editorconfig @@ -0,0 +1,19 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +indent_style = space +indent_size = 2 + +[*.hbs] +insert_final_newline = false + +[*.{diff,md}] +trim_trailing_whitespace = false diff --git a/test-app-4.x/.ember-cli b/test-app-4.x/.ember-cli new file mode 100644 index 00000000..465c4050 --- /dev/null +++ b/test-app-4.x/.ember-cli @@ -0,0 +1,7 @@ +{ + /** + Setting `isTypeScriptProject` to true will force the blueprint generators to generate TypeScript + rather than JavaScript by default, when a TypeScript version of a given blueprint is available. + */ + "isTypeScriptProject": false +} diff --git a/test-app-4.x/.eslintignore b/test-app-4.x/.eslintignore new file mode 100644 index 00000000..768fab33 --- /dev/null +++ b/test-app-4.x/.eslintignore @@ -0,0 +1,14 @@ +# unconventional js +/blueprints/*/files/ + +# compiled output +/declarations/ +/dist/ + +# misc +/coverage/ +!.* +.*/ + +# ember-try +/.node_modules.ember-try/ diff --git a/test-app-4.x/.eslintrc.js b/test-app-4.x/.eslintrc.js new file mode 100644 index 00000000..c4adc3f3 --- /dev/null +++ b/test-app-4.x/.eslintrc.js @@ -0,0 +1,59 @@ +'use strict'; + +module.exports = { + root: true, + parser: '@babel/eslint-parser', + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + requireConfigFile: false, + babelOptions: { + plugins: [ + ['@babel/plugin-proposal-decorators', { decoratorsBeforeExport: true }], + ], + }, + }, + plugins: ['ember'], + extends: [ + 'eslint:recommended', + 'plugin:ember/recommended', + 'plugin:prettier/recommended', + ], + env: { + browser: true, + }, + rules: {}, + overrides: [ + // node files + { + files: [ + './.eslintrc.js', + './.prettierrc.js', + './.stylelintrc.js', + './.template-lintrc.js', + './ember-cli-build.js', + './testem.js', + './blueprints/*/index.js', + './config/**/*.js', + './lib/*/index.js', + './server/**/*.js', + ], + parserOptions: { + sourceType: 'script', + }, + env: { + browser: false, + node: true, + }, + extends: ['plugin:n/recommended'], + }, + { + // test files + files: ['tests/**/*-test.{js,ts}'], + extends: ['plugin:qunit/recommended'], + rules: { + 'qunit/require-expect': 'off', + }, + }, + ], +}; diff --git a/test-app-4.x/.gitignore b/test-app-4.x/.gitignore new file mode 100644 index 00000000..71ad79d0 --- /dev/null +++ b/test-app-4.x/.gitignore @@ -0,0 +1,25 @@ +# compiled output +/dist/ +/declarations/ + +# dependencies +/node_modules/ + +# misc +/.env* +/.pnp* +/.eslintcache +/coverage/ +/npm-debug.log* +/testem.log +/yarn-error.log + +# ember-try +/.node_modules.ember-try/ +/npm-shrinkwrap.json.ember-try +/package.json.ember-try +/package-lock.json.ember-try +/yarn.lock.ember-try + +# broccoli-debug +/DEBUG/ diff --git a/test-app-4.x/.npmignore b/test-app-4.x/.npmignore new file mode 100644 index 00000000..87897e7f --- /dev/null +++ b/test-app-4.x/.npmignore @@ -0,0 +1,2 @@ +# this whole test-app-4.x is unpublished +* \ No newline at end of file diff --git a/test-app-4.x/.prettierignore b/test-app-4.x/.prettierignore new file mode 100644 index 00000000..9385391f --- /dev/null +++ b/test-app-4.x/.prettierignore @@ -0,0 +1,13 @@ +# unconventional js +/blueprints/*/files/ + +# compiled output +/dist/ + +# misc +/coverage/ +!.* +.*/ + +# ember-try +/.node_modules.ember-try/ diff --git a/test-app-4.x/.prettierrc.js b/test-app-4.x/.prettierrc.js new file mode 100644 index 00000000..e5f7b6d1 --- /dev/null +++ b/test-app-4.x/.prettierrc.js @@ -0,0 +1,12 @@ +'use strict'; + +module.exports = { + overrides: [ + { + files: '*.{js,ts}', + options: { + singleQuote: true, + }, + }, + ], +}; diff --git a/test-app-4.x/.stylelintignore b/test-app-4.x/.stylelintignore new file mode 100644 index 00000000..a0cf71cb --- /dev/null +++ b/test-app-4.x/.stylelintignore @@ -0,0 +1,8 @@ +# unconventional files +/blueprints/*/files/ + +# compiled output +/dist/ + +# addons +/.node_modules.ember-try/ diff --git a/test-app-4.x/.stylelintrc.js b/test-app-4.x/.stylelintrc.js new file mode 100644 index 00000000..021c539a --- /dev/null +++ b/test-app-4.x/.stylelintrc.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + extends: ['stylelint-config-standard', 'stylelint-prettier/recommended'], +}; diff --git a/test-app-4.x/.template-lintrc.js b/test-app-4.x/.template-lintrc.js new file mode 100644 index 00000000..6f9a6f02 --- /dev/null +++ b/test-app-4.x/.template-lintrc.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = { + extends: 'recommended', + rules: { + 'no-curly-component-invocation': { allow: ['utc'] }, + }, +}; diff --git a/test-app-4.x/.watchmanconfig b/test-app-4.x/.watchmanconfig new file mode 100644 index 00000000..f9c3d8f8 --- /dev/null +++ b/test-app-4.x/.watchmanconfig @@ -0,0 +1,3 @@ +{ + "ignore_dirs": ["dist"] +} diff --git a/test-app-4.x/README.md b/test-app-4.x/README.md new file mode 100644 index 00000000..5e64515b --- /dev/null +++ b/test-app-4.x/README.md @@ -0,0 +1,57 @@ +# test-app-4.x + +This README outlines the details of collaborating on this Ember application. +A short introduction of this app could easily go here. + +## Prerequisites + +You will need the following things properly installed on your computer. + +- [Git](https://git-scm.com/) +- [Node.js](https://nodejs.org/) +- [pnpm](https://pnpm.io/) +- [Ember CLI](https://cli.emberjs.com/release/) +- [Google Chrome](https://google.com/chrome/) + +## Installation + +- `git clone ` this repository +- `cd test-app-4.x` +- `pnpm install` + +## Running / Development + +- `pnpm start` +- Visit your app at [http://localhost:4200](http://localhost:4200). +- Visit your tests at [http://localhost:4200/tests](http://localhost:4200/tests). + +### Code Generators + +Make use of the many generators for code, try `ember help generate` for more details + +### Running Tests + +- `pnpm test` +- `pnpm test:ember --server` + +### Linting + +- `pnpm lint` +- `pnpm lint:fix` + +### Building + +- `pnpm ember build` (development) +- `pnpm build` (production) + +### Deploying + +Specify what it takes to deploy your app. + +## Further Reading / Useful Links + +- [ember.js](https://emberjs.com/) +- [ember-cli](https://cli.emberjs.com/release/) +- Development Browser Extensions + - [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi) + - [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/) diff --git a/test-app-4.x/app/app.js b/test-app-4.x/app/app.js new file mode 100644 index 00000000..d421d86f --- /dev/null +++ b/test-app-4.x/app/app.js @@ -0,0 +1,12 @@ +import Application from '@ember/application'; +import Resolver from 'ember-resolver'; +import loadInitializers from 'ember-load-initializers'; +import config from 'test-app-4.x/config/environment'; + +export default class App extends Application { + modulePrefix = config.modulePrefix; + podModulePrefix = config.podModulePrefix; + Resolver = Resolver; +} + +loadInitializers(App, config.modulePrefix); diff --git a/test-app-4.x/app/components/.gitkeep b/test-app-4.x/app/components/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test-app-4.x/app/controllers/.gitkeep b/test-app-4.x/app/controllers/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test-app-4.x/app/controllers/index.js b/test-app-4.x/app/controllers/index.js new file mode 100644 index 00000000..c04a32ce --- /dev/null +++ b/test-app-4.x/app/controllers/index.js @@ -0,0 +1,37 @@ +import { action, set } from '@ember/object'; +import { dependentKeyCompat } from '@ember/object/compat'; +import { tracked } from '@glimmer/tracking'; +import { inject as service } from '@ember/service'; +import Controller from '@ember/controller'; + +export default class Index extends Controller { + @service moment; + + @action + changeLocale(locale) { + this.moment.changeLocale(locale); + } + @action + changeDefaultFormat(defaultFormat) { + set(this, 'moment.defaultFormat', defaultFormat); + } + + @tracked emptyDate = null; + @tracked numHours = 822; + @tracked unixTimeStamp = 946684799; + @tracked date = new Date(); + @tracked currentTime = new Date(); + + get inTwelveHours() { + return new Date(new Date().valueOf() + 12 * 60 * 60 * 1000); + } + + @dependentKeyCompat + get lastHour() { + return new Date(new Date().valueOf() - 60 * 60 * 1000); + } + + get usIndependenceDay() { + return new Date(1776, 6, 4, 12, 0, 0); + } +} diff --git a/test-app-4.x/app/controllers/smoke.js b/test-app-4.x/app/controllers/smoke.js new file mode 100644 index 00000000..d95a9ecd --- /dev/null +++ b/test-app-4.x/app/controllers/smoke.js @@ -0,0 +1,11 @@ +import Controller from '@ember/controller'; + +export default class Smoke extends Controller { + get currentTime() { + return new Date(); + } + + get usIndependenceDay() { + return new Date(1776, 6, 4, 12, 0, 0); + } +} diff --git a/test-app-4.x/app/helpers/.gitkeep b/test-app-4.x/app/helpers/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test-app-4.x/app/helpers/get-format.js b/test-app-4.x/app/helpers/get-format.js new file mode 100644 index 00000000..0b7319ee --- /dev/null +++ b/test-app-4.x/app/helpers/get-format.js @@ -0,0 +1,5 @@ +import { helper } from '@ember/component/helper'; + +export default helper(function getFormat(/*positional, named*/) { + return 'L'; +}); diff --git a/test-app-4.x/app/index.html b/test-app-4.x/app/index.html new file mode 100644 index 00000000..7f8dc903 --- /dev/null +++ b/test-app-4.x/app/index.html @@ -0,0 +1,24 @@ + + + + + TestApp + + + + {{content-for "head"}} + + + + + {{content-for "head-footer"}} + + + {{content-for "body"}} + + + + + {{content-for "body-footer"}} + + diff --git a/test-app-4.x/app/models/.gitkeep b/test-app-4.x/app/models/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test-app-4.x/app/router.js b/test-app-4.x/app/router.js new file mode 100644 index 00000000..cbea8770 --- /dev/null +++ b/test-app-4.x/app/router.js @@ -0,0 +1,12 @@ +import EmberRouter from '@ember/routing/router'; +import config from 'test-app-4.x/config/environment'; + +export default class Router extends EmberRouter { + location = config.locationType; + rootURL = config.rootURL; +} + +Router.map(function () { + this.route('index', { path: '/' }); + this.route('smoke'); +}); diff --git a/test-app-4.x/app/routes/.gitkeep b/test-app-4.x/app/routes/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test-app-4.x/app/routes/application.js b/test-app-4.x/app/routes/application.js new file mode 100644 index 00000000..2f8aeeb4 --- /dev/null +++ b/test-app-4.x/app/routes/application.js @@ -0,0 +1,10 @@ +import Route from '@ember/routing/route'; +import { inject as service } from '@ember/service'; + +export default class Application extends Route { + @service moment; + + beforeModel() { + this.moment.changeLocale('en'); + } +} diff --git a/test-app-4.x/app/routes/index.js b/test-app-4.x/app/routes/index.js new file mode 100644 index 00000000..598979c8 --- /dev/null +++ b/test-app-4.x/app/routes/index.js @@ -0,0 +1,22 @@ +import Route from '@ember/routing/route'; +import { inject as service } from '@ember/service'; +import { set } from '@ember/object'; +import { run } from '@ember/runloop'; + +export default class Index extends Route { + @service moment; + + beforeModel() { + set(this, 'moment.locale', 'en'); + } + + setupController(controller, model) { + super.setupController(controller, model); + + setInterval(function () { + run(function () { + controller.set('date', new Date()); + }); + }, 1000); + } +} diff --git a/test-app-4.x/app/routes/smoke.js b/test-app-4.x/app/routes/smoke.js new file mode 100644 index 00000000..2a8486c3 --- /dev/null +++ b/test-app-4.x/app/routes/smoke.js @@ -0,0 +1,9 @@ +import Route from '@ember/routing/route'; +import moment from 'moment-timezone'; + +export default class Smoke extends Route { + setupController(controller, model) { + moment.locale('en'); + return super.setupController(controller, model); + } +} diff --git a/test-app-4.x/app/styles/app.css b/test-app-4.x/app/styles/app.css new file mode 100644 index 00000000..e5d2d6af --- /dev/null +++ b/test-app-4.x/app/styles/app.css @@ -0,0 +1,19 @@ +/* Ember supports plain CSS out of the box. More info: https://cli.emberjs.com/release/advanced-use/stylesheets/ */ + +html, +body { + margin: 20px; + font-family: Helvetica, sans-serif; + font-size: 14px; +} + +.example { + padding: 5px; + margin: 2px 0; + background: #f1f1f1; +} + +code { + color: #333; + font-size: 13px; +} diff --git a/test-app-4.x/app/templates/application.hbs b/test-app-4.x/app/templates/application.hbs new file mode 100644 index 00000000..abb003e1 --- /dev/null +++ b/test-app-4.x/app/templates/application.hbs @@ -0,0 +1,5 @@ +{{page-title "ember-moment"}} + +

ember-moment

+ +{{outlet}} diff --git a/test-app-4.x/app/templates/components/partials/calendar.hbs b/test-app-4.x/app/templates/components/partials/calendar.hbs new file mode 100644 index 00000000..0fa54f0e --- /dev/null +++ b/test-app-4.x/app/templates/components/partials/calendar.hbs @@ -0,0 +1,6 @@ +
+ {{moment-calendar this.currentTime this.lastHour}} + + \{{moment-calendar this.currentTime this.lastHour}} + +
\ No newline at end of file diff --git a/test-app-4.x/app/templates/components/partials/diff.hbs b/test-app-4.x/app/templates/components/partials/diff.hbs new file mode 100644 index 00000000..b8878cfa --- /dev/null +++ b/test-app-4.x/app/templates/components/partials/diff.hbs @@ -0,0 +1,36 @@ +
+ {{moment-diff this.lastHour this.currentTime}} + + \{{moment-diff this.lastHour this.currentTime}} + +
+ +
+ {{moment-diff this.currentTime this.inTwelveHours precision='hour'}} + + \{{moment-diff this.currentTime this.inTwelveHours precision='hour'}} + +
+ +
+ {{moment-diff this.currentTime this.inTwelveHours precision='day' float=true}} + + {{! template linter bug: https://github.com/ember-template-lint/ember-template-lint/issues/2330 }} + {{! template-lint-disable no-unbalanced-curlies}} + \{{moment-diff this.currentTime this.inTwelveHours precision='day' float=true}} + +
+ +
+ {{moment-diff this.usIndependenceDay this.currentTime precision='year'}} + + \{{moment-diff this.usIndependenceDay this.currentTime precision='year'}} + +
+ +
+ {{moment-diff this.currentTime this.usIndependenceDay precision='year'}} + + \{{moment-diff this.currentTime this.usIndependenceDay precision='year'}} + +
\ No newline at end of file diff --git a/test-app-4.x/app/templates/components/partials/duration.hbs b/test-app-4.x/app/templates/components/partials/duration.hbs new file mode 100644 index 00000000..98490f42 --- /dev/null +++ b/test-app-4.x/app/templates/components/partials/duration.hbs @@ -0,0 +1,34 @@ +
+{{moment-duration 5000}} + + \{{moment-duration 5000}} + +
+ +
+{{moment-duration 600000}} + + \{{moment-duration 600000}} + +
+ +
+{{moment-duration 86400000}} + + \{{moment-duration 86400000}} + +
+ +
+{{moment-duration '7.23:59:59'}} + + \{{moment-duration '7.23:59:59'}} + +
+ +
+{{moment-duration 210 'days'}} + + \{{moment-duration 210 'days'}} + +
diff --git a/test-app-4.x/app/templates/components/partials/format.hbs b/test-app-4.x/app/templates/components/partials/format.hbs new file mode 100644 index 00000000..5fdaaaf7 --- /dev/null +++ b/test-app-4.x/app/templates/components/partials/format.hbs @@ -0,0 +1,69 @@ +
+ {{moment-format (moment this.currentTime) 'LLLL'}} + + \{{moment-format (moment this.currentTime) 'LLLL'}} + +
+ +
+ {{moment-format (moment this.currentTime) 'LLLL'}} + + \{{moment-format (moment this.currentTime) 'LLLL'}} + +
+ +
+ {{moment-format (moment '123' 'hmm') 'HH:mm'}} + + \{{moment-format (moment '123' 'hmm') 'HH:mm'}} + +
+ +
+ {{moment-format (now interval=1000) 'MMMM Do YYYY, h:mm:ss a'}} + + \{{moment-format (now interval=1000) 'MMMM Do YYYY, h:mm:ss a'}} + +
+ +
+ {{moment-format (moment this.currentTime)}} + + \{{moment-format (moment this.currentTime)}} + +
+ +
+ {{moment-format (moment this.usIndependenceDay) 'LLLL'}} + + \{{moment-format (moment this.usIndependenceDay) 'LLLL'}} + +
+ +
+ {{moment-format (utc (moment this.usIndependenceDay)) 'LLLL'}} + + \{{moment-format (utc (moment this.usIndependenceDay)) 'LLLL'}} + +
+ +
+ {{moment-format (moment this.usIndependenceDay) 'MMM DD, YYYY'}} + + \{{moment-format (moment this.usIndependenceDay) 'MMM DD, YYYY'}} + +
+ +
+ {{moment-format (moment this.currentTime) 'LL' 'LLLL'}} + + \{{moment-format (moment this.currentTime) 'LL' 'LLLL'}} + +
+ +
+ {{moment-format (unix this.unixTimeStamp) 'LL' 'LLLL'}} + + \{{moment-format (unix this.unixTimeStamp) 'LL' 'LLLL'}} + +
\ No newline at end of file diff --git a/test-app-4.x/app/templates/components/partials/from-now.hbs b/test-app-4.x/app/templates/components/partials/from-now.hbs new file mode 100644 index 00000000..1eac6209 --- /dev/null +++ b/test-app-4.x/app/templates/components/partials/from-now.hbs @@ -0,0 +1,20 @@ +
+ {{moment-from-now this.currentTime}} + + \{{moment-from-now this.currentTime}} + +
+ +
+ {{moment-from-now this.currentTime interval=1000}} + + \{{moment-from-now this.currentTime interval=1000}} + +
+ +
+ {{moment-from-now this.usIndependenceDay}} + + \{{moment-from-now this.usIndependenceDay}} + +
\ No newline at end of file diff --git a/test-app-4.x/app/templates/components/partials/moment.hbs b/test-app-4.x/app/templates/components/partials/moment.hbs new file mode 100644 index 00000000..4c01d2f0 --- /dev/null +++ b/test-app-4.x/app/templates/components/partials/moment.hbs @@ -0,0 +1,41 @@ +
+ {{moment this.currentTime}} + + \{{moment this.currentTime}} + +
+ +
+ {{moment (now interval=1000)}} + + \{{moment (now interval=1000)}} + +
+ +
+ {{moment '12-25-1995' 'MM-DD-YYYY'}} + + \{{moment '12-25-1995' 'MM-DD-YYYY'}} + +
+ +
+ {{utc '12-25-1995 23:45:21' 'MM-DD-YYYY HH:mm:ss'}} + + \{{utc '12-25-1995 23:45:21' 'MM-DD-YYYY HH:mm:ss'}} + +
+ +
+ {{utc interval=1000}} + + \{{utc interval=1000}} + +
+ +
+ {{utc (moment this.now)}} + + \{{utc (moment this.now)}} + +
\ No newline at end of file diff --git a/test-app-4.x/app/templates/components/partials/to-now.hbs b/test-app-4.x/app/templates/components/partials/to-now.hbs new file mode 100644 index 00000000..ff3c6d93 --- /dev/null +++ b/test-app-4.x/app/templates/components/partials/to-now.hbs @@ -0,0 +1,20 @@ +
+ {{moment-to-now this.currentTime}} + + \{{moment-to-now this.currentTime}} + +
+ +
+ {{moment-to-now this.currentTime interval=1000}} + + \{{moment-to-now this.currentTime interval=1000}} + +
+ +
+ {{moment-to-now this.usIndependenceDay}} + + \{{moment-to-now this.usIndependenceDay}} + +
\ No newline at end of file diff --git a/test-app-4.x/app/templates/index.hbs b/test-app-4.x/app/templates/index.hbs new file mode 100644 index 00000000..1193600e --- /dev/null +++ b/test-app-4.x/app/templates/index.hbs @@ -0,0 +1,51 @@ +Locale: + + + + +
+Default Format: + + + + +
+ +

Moment

+ + + +

Format

+ + + +
+ +

From Now

+ + + +

To Now

+ + + +
+ +

Calendar

+ + + +
+ +

Duration

+ + + +
+ +

Difference

+ + \ No newline at end of file diff --git a/test-app-4.x/app/templates/smoke.hbs b/test-app-4.x/app/templates/smoke.hbs new file mode 100644 index 00000000..4643a4b3 --- /dev/null +++ b/test-app-4.x/app/templates/smoke.hbs @@ -0,0 +1,6 @@ +
{{moment-format + this.usIndependenceDay + 'MMM DD, YYYY' + }}
+
{{moment-from-now this.currentTime}}
+
{{moment-duration 420000}}
\ No newline at end of file diff --git a/test-app-4.x/config/ember-cli-update.json b/test-app-4.x/config/ember-cli-update.json new file mode 100644 index 00000000..f8ced50c --- /dev/null +++ b/test-app-4.x/config/ember-cli-update.json @@ -0,0 +1,22 @@ +{ + "schemaVersion": "1.0.0", + "packages": [ + { + "name": "ember-cli", + "version": "5.9.0", + "blueprints": [ + { + "name": "app", + "outputRepo": "https://github.com/ember-cli/ember-new-output", + "codemodsSource": "ember-app-codemods-manifest@1", + "isBaseBlueprint": true, + "options": [ + "--no-welcome", + "--pnpm", + "--ci-provider=travis" + ] + } + ] + } + ] +} diff --git a/test-app-4.x/config/ember-try.js b/test-app-4.x/config/ember-try.js new file mode 100644 index 00000000..93ebdb61 --- /dev/null +++ b/test-app-4.x/config/ember-try.js @@ -0,0 +1,37 @@ +'use strict'; + +const { embroiderSafe, embroiderOptimized } = require('@embroider/test-setup'); + +module.exports = async function () { + return { + usePnpm: true, + scenarios: [ + { + name: 'ember-lts-4.4', + npm: { + devDependencies: { + 'ember-source': '~4.4.0', + }, + }, + }, + { + name: 'ember-lts-4.8', + npm: { + devDependencies: { + 'ember-source': '~4.8.0', + }, + }, + }, + { + name: 'ember-lts-4.12', + npm: { + devDependencies: { + 'ember-source': '~4.12.0', + }, + }, + }, + embroiderSafe(), + embroiderOptimized(), + ], + }; +}; diff --git a/test-app-4.x/config/environment.js b/test-app-4.x/config/environment.js new file mode 100644 index 00000000..e8977b5f --- /dev/null +++ b/test-app-4.x/config/environment.js @@ -0,0 +1,52 @@ +'use strict'; + +module.exports = function (environment) { + const ENV = { + modulePrefix: 'test-app-4.x', + environment, + rootURL: '/', + locationType: 'history', + 'ember-moment': { + allowEmpty: true, + outputFormat: 'LLLL', + }, + EmberENV: { + EXTEND_PROTOTYPES: false, + FEATURES: { + // Here you can enable experimental features on an ember canary build + // e.g. EMBER_NATIVE_DECORATOR_SUPPORT: true + }, + }, + + APP: { + // Here you can pass flags/options to your application instance + // when it is created + }, + }; + + if (environment === 'development') { + // ENV.APP.LOG_RESOLVER = true; + // ENV.APP.LOG_ACTIVE_GENERATION = true; + // ENV.APP.LOG_TRANSITIONS = true; + // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; + // ENV.APP.LOG_VIEW_LOOKUPS = true; + } + + if (environment === 'test') { + // Testem prefers this... + ENV.locationType = 'none'; + + // keep test console output quieter + ENV.APP.LOG_ACTIVE_GENERATION = false; + ENV.APP.LOG_VIEW_LOOKUPS = false; + + ENV.APP.rootElement = '#ember-testing'; + ENV.APP.autoboot = false; + } + + if (environment === 'production') { + // here you can enable a production-specific feature + } + + return ENV; +}; diff --git a/test-app-4.x/config/optional-features.json b/test-app-4.x/config/optional-features.json new file mode 100644 index 00000000..5329dd99 --- /dev/null +++ b/test-app-4.x/config/optional-features.json @@ -0,0 +1,7 @@ +{ + "application-template-wrapper": false, + "default-async-observers": true, + "jquery-integration": false, + "template-only-glimmer-components": true, + "no-implicit-route-model": true +} diff --git a/test-app-4.x/config/targets.js b/test-app-4.x/config/targets.js new file mode 100644 index 00000000..1e48e059 --- /dev/null +++ b/test-app-4.x/config/targets.js @@ -0,0 +1,11 @@ +'use strict'; + +const browsers = [ + 'last 1 Chrome versions', + 'last 1 Firefox versions', + 'last 1 Safari versions', +]; + +module.exports = { + browsers, +}; diff --git a/test-app-4.x/ember-cli-build.js b/test-app-4.x/ember-cli-build.js new file mode 100644 index 00000000..1344c767 --- /dev/null +++ b/test-app-4.x/ember-cli-build.js @@ -0,0 +1,26 @@ +'use strict'; + +const EmberApp = require('ember-cli/lib/broccoli/ember-app'); + +module.exports = function (defaults) { + let app = new EmberApp(defaults, { + autoImport: { + watchDependencies: ['ember-moment'], + }, + }); + + const { maybeEmbroider } = require('@embroider/test-setup'); + return maybeEmbroider(app, { + skipBabel: [ + { + package: 'qunit', + }, + { + package: 'moment', + }, + { + package: 'moment-timezone', + }, + ], + }); +}; diff --git a/test-app-4.x/package.json b/test-app-4.x/package.json new file mode 100644 index 00000000..ca85e21a --- /dev/null +++ b/test-app-4.x/package.json @@ -0,0 +1,83 @@ +{ + "name": "test-app-4.x", + "version": "0.0.0", + "private": true, + "description": "Test app for ember-moment addon with ember-source 4.x", + "repository": "", + "license": "MIT", + "author": "", + "directories": { + "doc": "doc", + "test": "tests" + }, + "scripts": { + "build": "ember build --environment=production", + "lint": "concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\"", + "lint:css": "stylelint \"**/*.css\"", + "lint:css:fix": "concurrently \"pnpm:lint:css -- --fix\"", + "lint:fix": "concurrently \"pnpm:lint:*:fix\" --names \"fix:\"", + "lint:hbs": "ember-template-lint .", + "lint:hbs:fix": "ember-template-lint . --fix", + "lint:js": "eslint . --cache", + "lint:js:fix": "eslint . --fix", + "start": "ember serve", + "test": "concurrently \"pnpm:lint\" \"pnpm:test:*\" --names \"lint,test:\"", + "test:ember": "ember test --test-port 0" + }, + "devDependencies": { + "@babel/core": "^7.24.7", + "@babel/eslint-parser": "^7.24.7", + "@babel/plugin-proposal-decorators": "^7.24.7", + "@ember/optional-features": "^2.1.0", + "@ember/string": "^3.1.1", + "@ember/test-helpers": "^3.3.0", + "@embroider/test-setup": "^3.0.1", + "@glimmer/component": "^1.1.2", + "@glimmer/tracking": "^1.1.2", + "broccoli-asset-rev": "^3.0.0", + "concurrently": "^8.2.2", + "ember-auto-import": "^2.7.3", + "ember-cli": "~4.12.3", + "ember-cli-app-version": "^6.0.1", + "ember-cli-babel": "^8.2.0", + "ember-cli-clean-css": "^3.0.0", + "ember-cli-dependency-checker": "^3.3.2", + "ember-cli-htmlbars": "^6.3.0", + "ember-cli-inject-live-reload": "^2.1.0", + "ember-cli-sri": "^2.1.1", + "ember-cli-terser": "^4.0.2", + "ember-fetch": "^8.1.2", + "ember-load-initializers": "^2.1.2", + "ember-modifier": "^4.1.0", + "ember-moment": "workspace:*", + "ember-page-title": "^8.2.3", + "ember-qunit": "^8.0.2", + "ember-resolver": "^11.0.1", + "ember-source": "~4.12.4", + "ember-source-channel-url": "^3.0.0", + "ember-template-lint": "^5.13.0", + "ember-try": "^3.0.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-ember": "^11.12.0", + "eslint-plugin-n": "^16.6.2", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-qunit": "^8.1.1", + "loader.js": "^4.7.0", + "moment-timezone": "^0.5.45", + "prettier": "^3.3.1", + "qunit": "^2.21.0", + "qunit-dom": "^2.0.0", + "stylelint": "^15.11.0", + "stylelint-config-standard": "^34.0.0", + "stylelint-prettier": "^4.1.0", + "tracked-built-ins": "^3.3.0", + "webpack": "^5.91.0" + }, + "engines": { + "node": ">= 18" + }, + "ember": { + "edition": "octane" + } +} \ No newline at end of file diff --git a/test-app-4.x/public/robots.txt b/test-app-4.x/public/robots.txt new file mode 100644 index 00000000..f5916452 --- /dev/null +++ b/test-app-4.x/public/robots.txt @@ -0,0 +1,3 @@ +# http://www.robotstxt.org +User-agent: * +Disallow: diff --git a/test-app-4.x/testem.js b/test-app-4.x/testem.js new file mode 100644 index 00000000..ed2f3712 --- /dev/null +++ b/test-app-4.x/testem.js @@ -0,0 +1,23 @@ +'use strict'; + +module.exports = { + test_page: 'tests/index.html?hidepassed', + disable_watching: true, + launch_in_ci: ['Chrome'], + launch_in_dev: ['Chrome'], + browser_start_timeout: 120, + browser_args: { + Chrome: { + ci: [ + // --no-sandbox is needed when running Chrome inside a container + process.env.CI ? '--no-sandbox' : null, + '--headless', + '--disable-dev-shm-usage', + '--disable-software-rasterizer', + '--mute-audio', + '--remote-debugging-port=0', + '--window-size=1440,900', + ].filter(Boolean), + }, + }, +}; diff --git a/test-app-4.x/tests/acceptance/smoke-test.js b/test-app-4.x/tests/acceptance/smoke-test.js new file mode 100644 index 00000000..4fc46fc3 --- /dev/null +++ b/test-app-4.x/tests/acceptance/smoke-test.js @@ -0,0 +1,25 @@ +import { module, test } from 'qunit'; +import { visit } from '@ember/test-helpers'; +import { setupApplicationTest } from 'ember-qunit'; + +module('Acceptance: Smoke', function (hooks) { + setupApplicationTest(hooks); + test('moment', async function (assert) { + assert.expect(1); + await visit('/smoke'); + assert.dom('.moment-independence-day').hasText('Jul 04, 1776'); + }); + + test('ago', async function (assert) { + assert.expect(1); + await visit('/smoke'); + + assert.dom('.ago-now').hasText('a few seconds ago'); + }); + + test('duration', async function (assert) { + assert.expect(1); + await visit('/smoke'); + assert.dom('.duration-seven-minutes').hasText('7 minutes'); + }); +}); diff --git a/test-app-4.x/tests/helpers/date.js b/test-app-4.x/tests/helpers/date.js new file mode 100644 index 00000000..0d49090a --- /dev/null +++ b/test-app-4.x/tests/helpers/date.js @@ -0,0 +1,7 @@ +import moment from 'moment-timezone'; + +moment.tz.add(['America/New_York|EST EDT|50 40|0101|1Lz50 1zb0 Op0']); + +export default function (time) { + return moment(new Date(time)).tz('America/New_York'); +} diff --git a/test-app-4.x/tests/helpers/index.js b/test-app-4.x/tests/helpers/index.js new file mode 100644 index 00000000..d37dd680 --- /dev/null +++ b/test-app-4.x/tests/helpers/index.js @@ -0,0 +1,42 @@ +import { + setupApplicationTest as upstreamSetupApplicationTest, + setupRenderingTest as upstreamSetupRenderingTest, + setupTest as upstreamSetupTest, +} from 'ember-qunit'; + +// This file exists to provide wrappers around ember-qunit's +// test setup functions. This way, you can easily extend the setup that is +// needed per test type. + +function setupApplicationTest(hooks, options) { + upstreamSetupApplicationTest(hooks, options); + + // Additional setup for application tests can be done here. + // + // For example, if you need an authenticated session for each + // application test, you could do: + // + // hooks.beforeEach(async function () { + // await authenticateSession(); // ember-simple-auth + // }); + // + // This is also a good place to call test setup functions coming + // from other addons: + // + // setupIntl(hooks); // ember-intl + // setupMirage(hooks); // ember-cli-mirage +} + +function setupRenderingTest(hooks, options) { + upstreamSetupRenderingTest(hooks, options); + + // Additional setup for rendering tests can be done here. +} + +function setupTest(hooks, options) { + upstreamSetupTest(hooks, options); + + // Additional setup for unit tests can be done here. +} + +export { setupApplicationTest, setupRenderingTest, setupTest }; diff --git a/test-app-4.x/tests/helpers/run-append.js b/test-app-4.x/tests/helpers/run-append.js new file mode 100644 index 00000000..6fb7d8fd --- /dev/null +++ b/test-app-4.x/tests/helpers/run-append.js @@ -0,0 +1,13 @@ +import { run } from '@ember/runloop'; + +function runAppend(view) { + run(view, 'appendTo', '#qunit-fixture'); +} + +function runDestroy(destroyed) { + if (destroyed) { + run(destroyed, 'destroy'); + } +} + +export { runAppend, runDestroy }; diff --git a/test-app-4.x/tests/index.html b/test-app-4.x/tests/index.html new file mode 100644 index 00000000..9ebf5100 --- /dev/null +++ b/test-app-4.x/tests/index.html @@ -0,0 +1,39 @@ + + + + + TestApp Tests + + + + {{content-for "head"}} + {{content-for "test-head"}} + + + + + + {{content-for "head-footer"}} + {{content-for "test-head-footer"}} + + + {{content-for "body"}} + {{content-for "test-body"}} + +
+
+
+
+
+
+ + + + + + + + {{content-for "body-footer"}} + {{content-for "test-body-footer"}} + + diff --git a/test-app-4.x/tests/integration/.gitkeep b/test-app-4.x/tests/integration/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test-app-4.x/tests/integration/helpers/get-format-test.js b/test-app-4.x/tests/integration/helpers/get-format-test.js new file mode 100644 index 00000000..40c9d7cc --- /dev/null +++ b/test-app-4.x/tests/integration/helpers/get-format-test.js @@ -0,0 +1,17 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Helper | get-format', function (hooks) { + setupRenderingTest(hooks); + + // TODO: Replace this with your real tests. + test('it renders', async function (assert) { + this.set('inputValue', 'L'); + + await render(hbs`{{get-format 'global-format'}}`); + + assert.dom(this.element).hasText('L'); + }); +}); diff --git a/test-app-4.x/tests/integration/moment-test.js b/test-app-4.x/tests/integration/moment-test.js new file mode 100644 index 00000000..24c06828 --- /dev/null +++ b/test-app-4.x/tests/integration/moment-test.js @@ -0,0 +1,115 @@ +import moment from 'moment-timezone'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.service = this.owner.lookup('service:moment'); + this.service.changeLocale('en'); + }); + + test('moment-from and moment integration', async function (assert) { + assert.expect(1); + + this.set('tomorrow', moment().add(1, 'day')); + await render(hbs`{{moment-from (moment) this.tomorrow}}`); + + assert.dom(this.element).hasText('a day ago'); + }); + + test('moment-to and moment integration', async function (assert) { + assert.expect(1); + + this.set('tomorrow', moment().add(1, 'day')); + await render(hbs`{{moment-to (moment) this.tomorrow}}`); + + assert.dom(this.element).hasText('in a day'); + }); + + test('moment and moment-format helper integration #2', async function (assert) { + assert.expect(1); + + this.setProperties({ + inputFormat: 'M/D/YY', + outputFormat: 'MMMM D, YYYY', + date: '5/3/10', + }); + + await render( + hbs`{{moment-format (moment this.date this.inputFormat) this.outputFormat}}`, + ); + assert.dom(this.element).hasText('May 3, 2010'); + }); + + test('moment can use the service locale', async function (assert) { + assert.expect(1); + + this.setProperties({ + inputFormat: 'M/D/YY', + outputFormat: 'MMMM D, YYYY', + date: '5/3/10', + }); + + this.service.changeLocale('fr'); + await render( + hbs`{{moment-format (moment this.date this.inputFormat) this.outputFormat}}`, + ); + + assert.dom(this.element).hasText('mai 3, 2010'); + }); + + test('changing moment service locale changes global locale', function (assert) { + const done = assert.async(); + assert.expect(1); + + this.service.on('localeChanged', function () { + assert.strictEqual(moment.locale(), 'es'); + done(); + }); + + this.service.setLocale('es'); + }); + + test('changing timeZone triggers event', function (assert) { + const done = assert.async(); + assert.expect(1); + + this.service.on('timeZoneChanged', function () { + assert.ok(true); + done(); + }); + + this.service.setTimeZone('PST'); + }); + + test('moment can use the service locale (setLocale)', async function (assert) { + assert.expect(1); + + this.setProperties({ + inputFormat: 'M/D/YY', + outputFormat: 'MMMM D, YYYY', + date: '5/3/10', + }); + + this.service.setLocale('fr'); + await render( + hbs`{{moment-format (moment this.date this.inputFormat) this.outputFormat}}`, + ); + + assert.dom(this.element).hasText('mai 3, 2010'); + }); + + test('moment can update service locale (updateLocale)', function (assert) { + assert.expect(2); + + this.service.updateLocale('en', { week: { dow: 3 } }); + assert.strictEqual(moment().weekday(0).format('dddd'), 'Wednesday'); + this.service.updateLocale('en', { week: { dow: 0 } }); + assert.strictEqual(moment().weekday(0).format('dddd'), 'Sunday'); + }); +}); diff --git a/test-app-4.x/tests/test-helper.js b/test-app-4.x/tests/test-helper.js new file mode 100644 index 00000000..c7363597 --- /dev/null +++ b/test-app-4.x/tests/test-helper.js @@ -0,0 +1,12 @@ +import Application from 'test-app-4.x/app'; +import config from 'test-app-4.x/config/environment'; +import * as QUnit from 'qunit'; +import { setApplication } from '@ember/test-helpers'; +import { setup } from 'qunit-dom'; +import { start } from 'ember-qunit'; + +setApplication(Application.create(config.APP)); + +setup(QUnit.assert); + +start(); diff --git a/test-app-4.x/tests/unit/.gitkeep b/test-app-4.x/tests/unit/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test-app-4.x/tests/unit/helpers/is-after-test.js b/test-app-4.x/tests/unit/helpers/is-after-test.js new file mode 100644 index 00000000..8b60840a --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/is-after-test.js @@ -0,0 +1,62 @@ +import EmberObject from '@ember/object'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('is-after', function (hooks) { + setupRenderingTest(hooks); + + test('one arg (comparisonDate)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const today = momentService.moment(); + const threeDaysFromNow = today.add(3, 'days'); + const context = EmberObject.create({ + date: threeDaysFromNow, + }); + this.set('context', context); + + await render(hbs`{{is-after this.context.date}}`); + assert.dom(this.element).hasText('false'); + }); + + test('one arg with precision (comparisonDate, precision)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const today = momentService.moment(); + const threeYearsAgo = today.subtract(3, 'years'); + const context = EmberObject.create({ + date: threeYearsAgo, + }); + this.set('context', context); + + await render(hbs`{{is-after this.context.date precision='year'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args (evaluatedDate, comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-after '2010-10-20' '2010-10-19'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args with precision (evaluatedDate, comparisonDate, precision)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-after '2010-12-20' '2010-10-19' precision='year'}}`); + assert.dom(this.element).hasText('false'); + }); + + test('can be called with null when allow-empty is set to true', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{is-after null allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/is-before-test.js b/test-app-4.x/tests/unit/helpers/is-before-test.js new file mode 100644 index 00000000..4d05dd67 --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/is-before-test.js @@ -0,0 +1,45 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('is-before', function (hooks) { + setupRenderingTest(hooks); + + test('one arg (comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-before '2011-10-19'}}`); + assert.dom(this.element).hasText('false'); + }); + + test('one arg with precision (comparisonDate, precision)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-before '2011-10-19' precision='year'}}`); + assert.dom(this.element).hasText('false'); + }); + + test('two args (evaluatedDate, comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-before '2010-10-20' '2011-10-19'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args with precision (evaluatedDate, comparisonDate, precision)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-before '2010-10-20' '2010-12-19' precision='year'}}`); + assert.dom(this.element).hasText('false'); + }); + + test('can be called with null when allow-empty is set to true', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{is-before null allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/is-between-test.js b/test-app-4.x/tests/unit/helpers/is-between-test.js new file mode 100644 index 00000000..0bd1140c --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/is-between-test.js @@ -0,0 +1,101 @@ +import EmberObject from '@ember/object'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('is-between', function (hooks) { + setupRenderingTest(hooks); + + test('two args (comparisonDate1, comparisonDate2)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const today = momentService.moment(); + const threeDaysFromNow = today.add(3, 'days'); + const context = EmberObject.create({ + date: threeDaysFromNow, + }); + this.set('context', context); + + await render(hbs`{{is-between '2010-10-19' this.context.date}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args (comparisonDate1, comparisonDate2, precision)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const today = momentService.moment(); + const threeYearsFromNow = today.add(3, 'years'); + const context = EmberObject.create({ + date: threeYearsFromNow, + }); + this.set('context', context); + + await render( + hbs`{{is-between '2010-10-19' this.context.date precision='year'}}`, + ); + assert.dom(this.element).hasText('true'); + }); + + test('two args (comparisonDate1, comparisonDate2, precision, inclusivity)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const today = momentService.moment(); + const threeDaysFromNow = today.add(3, 'days'); + const context = EmberObject.create({ + date: threeDaysFromNow, + }); + this.set('context', context); + + await render( + hbs`{{is-between '2010-10-19' this.context.date precision='year' inclusivity='()'}}`, + ); + assert.dom(this.element).hasText('false'); + }); + + test('three args (evaluatedDate, comparisonDate1, comparisonDate2)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-between '2010-10-20' '2010-10-19' '2010-10-25'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('three args with precision (evaluatedDate, comparisonDate1, comparisonDate2, precision)', async function (assert) { + assert.expect(1); + + await render( + hbs`{{is-between '2010-10-20' '2009-12-31' '2012-01-01' precision='year'}}`, + ); + assert.dom(this.element).hasText('true'); + }); + + test('three args with inclusivity (evaluatedDate, comparisonDate1, comparisonDate2, inclusivity)', async function (assert) { + assert.expect(1); + + await render( + hbs`{{is-between '2016-10-30' '2016-10-30' '2016-12-30' inclusivity='[)'}}`, + ); + assert.dom(this.element).hasText('true'); + }); + + test('three args with precision and inclusivity (evaluatedDate, comparisonDate1, comparisonDate2, precision, inclusivity)', async function (assert) { + assert.expect(1); + + await render( + hbs`{{is-between '2016-10-30' '2016-10-30' '2017-12-30' precision='year' inclusivity='[]'}}`, + ); + assert.dom(this.element).hasText('true'); + }); + + test('can be called with null when allow-empty is set to true', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{is-between null null allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/is-same-or-after-test.js b/test-app-4.x/tests/unit/helpers/is-same-or-after-test.js new file mode 100644 index 00000000..0fa24916 --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/is-same-or-after-test.js @@ -0,0 +1,64 @@ +import EmberObject from '@ember/object'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('is-same-or-after', function (hooks) { + setupRenderingTest(hooks); + + test('one arg (comparisonDate)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const today = momentService.moment(); + const threeDaysFromNow = today.add(3, 'days'); + const context = EmberObject.create({ + date: threeDaysFromNow, + }); + this.set('context', context); + + await render(hbs`{{is-same-or-after this.context.date}}`); + assert.dom(this.element).hasText('false'); + }); + + test('one arg with precision (comparisonDate, precision)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const today = momentService.moment(); + const threeYearsAgo = today.subtract(3, 'years'); + const context = EmberObject.create({ + date: threeYearsAgo, + }); + this.set('context', context); + + await render(hbs`{{is-same-or-after this.context.date precision='year'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args (evaluatedDate, comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-same-or-after '2010-10-20' '2010-10-20'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args with precision (evaluatedDate, comparisonDate, precision)', async function (assert) { + assert.expect(1); + + await render( + hbs`{{is-same-or-after '2010-12-20' '2010-10-19' precision='year'}}`, + ); + assert.dom(this.element).hasText('true'); + }); + + test('can be called with null when allow-empty is set to true', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{is-same-or-after null allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/is-same-or-before-test.js b/test-app-4.x/tests/unit/helpers/is-same-or-before-test.js new file mode 100644 index 00000000..555b83ba --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/is-same-or-before-test.js @@ -0,0 +1,47 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('is-same-or-before', function (hooks) { + setupRenderingTest(hooks); + + test('one arg (comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-same-or-before '2011-10-19'}}`); + assert.dom(this.element).hasText('false'); + }); + + test('one arg with precision (comparisonDate, precision)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-same-or-before '2011-10-19' precision='year'}}`); + assert.dom(this.element).hasText('false'); + }); + + test('two args (evaluatedDate, comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-same-or-before '2010-10-20' '2011-10-19'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args with precision (evaluatedDate, comparisonDate, precision)', async function (assert) { + assert.expect(1); + + await render( + hbs`{{is-same-or-before '2010-12-20' '2010-12-19' precision='year'}}`, + ); + assert.dom(this.element).hasText('true'); + }); + + test('can be called with null when allow-empty is set to true', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{is-same-or-before null allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/is-same-test.js b/test-app-4.x/tests/unit/helpers/is-same-test.js new file mode 100644 index 00000000..aca42c7e --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/is-same-test.js @@ -0,0 +1,53 @@ +import EmberObject from '@ember/object'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('is-same', function (hooks) { + setupRenderingTest(hooks); + + test('one arg (comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-same '2011-10-19'}}`); + assert.dom(this.element).hasText('false'); + }); + + test('one arg with precision (comparisonDate, precision)', async function (assert) { + assert.expect(1); + + const today = new Date(); + const date = `${today.getFullYear()}-10-19`; + const context = EmberObject.create({ + date: date, + }); + this.set('context', context); + + await render(hbs`{{is-same this.context.date precision='year'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args (evaluatedDate, comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-same '2010-10-20' '2010-10-20'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args with precision (evaluatedDate, comparisonDate, precision)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-same '2010-10-20' '2010-12-19' precision='year'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('can be called with null when allow-empty is set to true', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{is-same null allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/moment-add-test.js b/test-app-4.x/tests/unit/helpers/moment-add-test.js new file mode 100644 index 00000000..ebaae5da --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/moment-add-test.js @@ -0,0 +1,88 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-add', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg adds duration', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const duration = { days: 3 }; + this.set('duration', duration); + const expectedString = momentService + .moment() + .add(duration) + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-add this.duration}}`); + //assert.ok(this.$().text().match()); + assert.dom(this.element).hasText(new RegExp(expectedString)); + }); + + test('two args with number and string', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const number = 3; + const precision = 'days'; + this.setProperties({ + number, + precision, + }); + const expectedString = momentService + .moment() + .add(number, precision) + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-add this.number this.precision}}`); + assert.dom(this.element).hasText(new RegExp(expectedString)); + }); + + test('two args with date and duration', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const duration = { days: 3 }; + this.set('duration', duration); + const expectedString = momentService + .moment('2016-06-01') + .add(duration) + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-add '2016-06-01' this.duration}}`); + assert.dom(this.element).hasText(new RegExp(expectedString)); + }); + + test('one arg with precision', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const number = 3; + this.set('number', number); + const expectedString = momentService + .moment() + .add(number, 'days') + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-add this.number precision='days'}}`); + assert.dom(this.element).hasText(new RegExp(expectedString)); + }); + + test('two args with precision', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const number = 3; + this.set('number', number); + const expectedString = momentService + .moment('2016-06-01') + .add(number, 'days') + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-add '2016-06-01' this.number precision='days'}}`); + assert.dom(this.element).hasText(new RegExp(expectedString)); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/moment-calendar-test.js b/test-app-4.x/tests/unit/helpers/moment-calendar-test.js new file mode 100644 index 00000000..87dc2111 --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/moment-calendar-test.js @@ -0,0 +1,135 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +import date from '../../helpers/date'; + +module('moment-calendar', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg (date)', async function (assert) { + assert.expect(1); + + this.set('date', date(date(0))); + await render(hbs`{{moment-calendar this.date}}`); + assert.dom(this.element).hasText('12/31/1969'); + }); + + test('two args (date, referenceDate)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + date: momentService.moment('2013-01-01T02:30:26Z'), + referenceDate: momentService.moment('2013-01-01T12:00:00Z'), + }); + + await render( + hbs`{{moment-calendar this.date this.referenceDate timeZone='America/New_York'}}`, + ); + assert.dom(this.element).hasText('Yesterday at 9:30 PM'); + }); + + test('two args (date, referenceDate) with formats', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + date: momentService.moment('2013-01-01T02:30:26Z'), + referenceDate: momentService.moment('2013-01-01T12:00:00Z'), + formats: { + sameDay: '[Today]', + nextDay: '[Tomorrow]', + nextWeek: 'dddd', + lastDay: '[Yesterday]', + lastWeek: '[Last] dddd', + sameElse: 'DD/MM/YYYY', + }, + }); + + await render( + hbs`{{moment-calendar this.date this.referenceDate this.formats timeZone='America/New_York'}}`, + ); + assert.dom().hasText('Yesterday'); + }); + + test('can pass individual formats', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + date: momentService.moment('2013-01-01T02:30:26Z'), + referenceDate: momentService.moment('2013-01-01T12:00:00Z'), + lastDay: '[Yesterday!]', + }); + + await render( + hbs`{{moment-calendar this.date this.referenceDate lastDay=this.lastDay timeZone='America/New_York'}}`, + ); + assert.dom(this.element).hasText('Yesterday!'); + }); + + test('can use a combination of hash options and positional params', async function (assert) { + assert.expect(2); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + date: momentService.moment('2013-01-01T02:30:26Z'), + referenceDate: momentService.moment('2013-01-01T12:00:00Z'), + formats: { + sameDay: '[Today!]', + sameElse: 'DD/MM/YYYY', + }, + }); + + await render( + hbs`{{moment-calendar this.date this.referenceDate this.formats lastDay='[YESTERDAY]' timeZone='America/New_York'}}`, + ); + + assert.strictEqual( + Object.keys(this.formats).length, + 2, + 'formats object shape does not change', + ); + assert.dom(this.element).hasText('YESTERDAY'); + }); + + test('with es locale', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + date: momentService.moment('2013-01-01T08:30:26Z'), + referenceDate: momentService.moment('2013-01-01T12:00:00Z'), + }); + + await render( + hbs`{{moment-calendar this.date this.referenceDate locale="es" timeZone='America/New_York'}}`, + ); + assert.dom(this.element).hasText('hoy a las 3:30'); + }); + + test('can inline timeZone (Sydney)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + date: momentService.moment('2013-01-01T08:30:26Z'), + referenceDate: momentService.moment('2013-01-01T12:00:00Z'), + }); + + await render( + hbs`{{moment-calendar this.date this.referenceDate timeZone='Australia/Sydney'}}`, + ); + + assert + .dom(this.element) + .hasText('Today at 7:30 PM', 'Australia is 11 hours ahead of UTC'); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/moment-diff-test.js b/test-app-4.x/tests/unit/helpers/moment-diff-test.js new file mode 100644 index 00000000..bc6b9ff8 --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/moment-diff-test.js @@ -0,0 +1,75 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-diff', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('two args with (dateA, dateB)', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: momentService.moment('2017-01-10'), + dateB: momentService.moment('2017-01-15'), + }); + + await render(hbs`{{moment-diff this.dateA this.dateB}}`); + assert.dom(this.element).hasText('432000000'); + }); + + test('two args with a moment and a string (dateMoment, dateString)', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateMoment: momentService.moment('2017-01-10'), + dateString: '2017-01-15', + }); + + await render(hbs`{{moment-diff this.dateMoment this.dateString}}`); + assert.dom(this.element).hasText('432000000'); + }); + + test('two args with (dateA, dateB) and expect a negative result', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: momentService.moment('2017-01-15'), + dateB: momentService.moment('2017-01-10'), + }); + + await render(hbs`{{moment-diff this.dateA this.dateB}}`); + assert.dom(this.element).hasText('-432000000'); + }); + + test('two args with precision (dateA, dateB, precision)', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().add(5, 'day'), + }); + + await render(hbs`{{moment-diff this.dateA this.dateB precision='day'}}`); + assert.dom().hasText('5'); + }); + + test('two args with precision and float (dateA, dateB, precision, float)', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().add(6, 'month'), + }); + + await render( + hbs`{{moment-diff this.dateA this.dateB precision='year' float=true}}`, + ); + assert.dom().containsText('.5'); // good ol' rounding error + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/moment-duration-test.js b/test-app-4.x/tests/unit/helpers/moment-duration-test.js new file mode 100644 index 00000000..e1e53fcd --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/moment-duration-test.js @@ -0,0 +1,99 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-duration', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg (ms)', async function (assert) { + assert.expect(1); + + this.set('date', 86400000); + await render(hbs`{{moment-duration this.date}}`); + assert.dom(this.element).hasText('a day'); + }); + + test('one arg (empty string)', async function (assert) { + assert.expect(1); + + this.set('date', ''); + await render(hbs`{{moment-duration this.date}}`); + assert.dom(this.element).hasText('a few seconds'); + }); + + test('one arg (object)', async function (assert) { + assert.expect(1); + + this.set('date', { + seconds: 2, + minutes: 2, + hours: 2, + days: 2, + weeks: 2, + months: 2, + years: 2, + }); + + await render(hbs`{{moment-duration this.date}}`); + assert.dom(this.element).hasText('2 years'); + }); + + test('one arg (string)', async function (assert) { + assert.expect(1); + + this.set('date', '23:59:59'); + await render(hbs`{{moment-duration this.date}}`); + assert.dom(this.element).hasText('a day'); + }); + + test('two args (value, units) - minute', async function (assert) { + assert.expect(1); + + this.setProperties({ + unit: 'minutes', + date: 1, + }); + + await render(hbs`{{moment-duration this.date this.unit}}`); + + assert.dom(this.element).hasText('a minute'); + }); + + test('two args (value, units) - day', async function (assert) { + assert.expect(1); + + this.setProperties({ + unit: 'day', + date: 1, + }); + + await render(hbs`{{moment-duration this.date this.unit}}`); + assert.dom(this.element).hasText('a day'); + }); + + test('two args (value, units) - empty value', async function (assert) { + assert.expect(1); + + this.setProperties({ + unit: 'minutes', + date: null, + }); + + await render(hbs`{{moment-duration this.date this.unit}}`); + assert.dom(this.element).hasText('a few seconds'); + }); + + test('can inline a locale instead of using global locale', async function (assert) { + assert.expect(1); + + this.set('date', 86400000); + await render(hbs`{{moment-duration this.date locale='es'}}`); + assert.dom(this.element).hasText('un día'); // note: that's not an `i` in día + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/moment-format-test.js b/test-app-4.x/tests/unit/helpers/moment-format-test.js new file mode 100644 index 00000000..bfb4ed38 --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/moment-format-test.js @@ -0,0 +1,134 @@ +import EmberObject from '@ember/object'; +import { run } from '@ember/runloop'; +import { settled } from '@ember/test-helpers'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +import date from '../../helpers/date'; + +module('moment-format', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg (date)', async function (assert) { + assert.expect(1); + + this.set('date', date(date(0))); + await render(hbs`{{moment-format this.date}}`); + assert.dom(this.element).hasText('Wednesday, December 31, 1969 7:00 PM'); + }); + + test('updating default format recomputes moment-format', async function (assert) { + assert.expect(2); + + this.set('date', date(date(0))); + await render(hbs`{{moment-format this.date}}`); + + const service = this.owner.lookup('service:moment'); + + assert.dom(this.element).hasText('Wednesday, December 31, 1969 7:00 PM'); + + service.set('defaultFormat', 'DD.MM.YYYY'); + await settled(); + + assert.dom(this.element).hasText('31.12.1969'); + }); + + test('two args (date, inputFormat)', async function (assert) { + assert.expect(1); + + this.setProperties({ + format: 'MMMM D, YYYY', + date: date(Date.parse('2011-10-10T14:48:00-05:00')), + }); + + await render(hbs`{{moment-format this.date this.format}}`); + assert.dom(this.element).hasText('October 10, 2011'); + }); + + test('three args (date, outputFormat, inputFormat)', async function (assert) { + assert.expect(1); + + this.setProperties({ + inputFormat: 'M/D/YY', + outputFormat: 'MMMM D, YYYY', + date: '5/3/10', + }); + + await render( + hbs`{{moment-format this.date this.outputFormat this.inputFormat}}`, + ); + assert.dom(this.element).hasText('May 3, 2010'); + }); + + test('change date input and change is reflected by bound helper', async function (assert) { + assert.expect(2); + + const context = EmberObject.create({ + date: date(0), + }); + + this.set('context', context); + + await render(hbs`{{moment-format this.context.date}}`); + assert.dom(this.element).hasText('Wednesday, December 31, 1969 7:00 PM'); + + run(function () { + context.set('date', date(60 * 60 * 24)); + }); + + assert.dom(this.element).hasText('Wednesday, December 31, 1969 7:01 PM'); + }); + + test('can inline a locale instead of using global locale', async function (assert) { + assert.expect(1); + this.set('date', date(date(0))); + + await render(hbs`{{moment-format this.date 'LLLL' locale='es'}}`); + assert + .dom(this.element) + .hasText('miércoles, 31 de diciembre de 1969 19:00'); + }); + + test('can inline timeZone (New York)', async function (assert) { + assert.expect(1); + + this.set('date', 0); + await render( + hbs`{{moment-format this.date 'LLLL' timeZone='America/New_York'}}`, + ); + assert.dom(this.element).hasText('Wednesday, December 31, 1969 7:00 PM'); + }); + + test('can inline timeZone (Los Angeles)', async function (assert) { + assert.expect(1); + + this.set('date', 0); + await render( + hbs`{{moment-format this.date 'LLLL' timeZone='America/Los_Angeles'}}`, + ); + assert.dom(this.element).hasText('Wednesday, December 31, 1969 4:00 PM'); + }); + + test('can be called with null when allow-empty is set to true', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{moment-format null allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); + + test('can be called using subexpression', async function (assert) { + assert.expect(1); + + this.set('date', date(0)); + await render(hbs`{{moment-format this.date (get-format 'global-format')}}`); + assert.dom(this.element).hasText('12/31/1969'); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/moment-from-now-test.js b/test-app-4.x/tests/unit/helpers/moment-from-now-test.js new file mode 100644 index 00000000..236f63f3 --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/moment-from-now-test.js @@ -0,0 +1,104 @@ +import EmberObject from '@ember/object'; +import { run } from '@ember/runloop'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-from-now', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg (date)', async function (assert) { + assert.expect(1); + + const threeDaysAgo = new Date(); + threeDaysAgo.setDate(threeDaysAgo.getDate() - 3); + + const context = EmberObject.create({ + date: threeDaysAgo, + }); + + this.set('context', context); + + await render(hbs`{{moment-from-now this.context.date}}`); + assert.dom(this.element).hasText('3 days ago'); + }); + + test('one arg (dateA, hideAffix=boolean)', async function (assert) { + assert.expect(2); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: momentService.moment().add(3, 'day'), + }); + + await render(hbs`{{moment-to-now this.dateA hideAffix=true}}`); + assert.dom(this.element).hasText('3 days'); + await render(hbs`{{moment-to-now this.dateA hideAffix=false}}`); + assert.dom(this.element).hasText('3 days ago'); + }); + + test('two args (date, inputFormat)', async function (assert) { + assert.expect(1); + + const threeDaysAgo = new Date(); + threeDaysAgo.setDate(threeDaysAgo.getDate() - 3); + + this.setProperties({ + inputFormat: 'LLLL', + date: threeDaysAgo, + }); + + await render(hbs`{{moment-from-now this.date this.inputFormat}}`); + assert.dom(this.element).hasText('3 days ago'); + }); + + test('change date input and change is reflected by bound helper', async function (assert) { + assert.expect(2); + + const momentService = this.owner.lookup('service:moment'); + const context = EmberObject.create({ + date: momentService.moment().subtract(1, 'hour'), + }); + + this.set('context', context); + + await render(hbs`{{moment-from-now this.context.date}}`); + assert.dom(this.element).hasText('an hour ago'); + + run(function () { + context.set('date', momentService.moment().subtract(2, 'hours')); + }); + + assert.dom(this.element).hasText('2 hours ago'); + }); + + test('can inline a locale instead of using global locale', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + + this.set('date', momentService.moment().subtract(1, 'hour')); + await render(hbs`{{moment-from-now this.date locale='es'}}`); + assert.dom(this.element).hasText('hace una hora'); + }); + + test('can be called with null', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{moment-from-now this.date allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); + + test('localize arabic - issue 239', async function (assert) { + this.set('date', new Date()); + await render(hbs`{{moment-from-now this.date locale='ar' hideAffix=true}}`); + assert.dom(this.element).hasText('ثانية واحدة'); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/moment-from-test.js b/test-app-4.x/tests/unit/helpers/moment-from-test.js new file mode 100644 index 00000000..005bf194 --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/moment-from-test.js @@ -0,0 +1,76 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-from', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg (date)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + + this.set('date', momentService.moment().add(3, 'day')); + + await render(hbs`{{moment-from this.date}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('two args (dateA, dateB)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().add(3, 'day'), + }); + + await render(hbs`{{moment-from this.dateB this.dateA}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('two args (dateA, dateB, hideAffix=boolean)', async function (assert) { + assert.expect(2); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().add(3, 'day'), + }); + + await render(hbs`{{moment-from this.dateB this.dateA hideAffix=true}}`); + assert.dom(this.element).hasText('3 days'); + await render(hbs`{{moment-from this.dateB this.dateA hideAffix=false}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('three args (dateA, dateB, boolean)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().subtract(3, 'day'), + }); + + await render(hbs`{{moment-from this.dateA this.dateB true}}`); + assert.dom(this.element).hasText('3 days'); + }); + + test('can inline a locale', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.set('dateA', momentService.moment()); + this.set('dateB', momentService.moment().subtract(2, 'day')); + + await render(hbs`{{moment-from this.dateA this.dateB locale='es'}}`); + assert.dom(this.element).hasText('en 2 días'); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/moment-subtract-test.js b/test-app-4.x/tests/unit/helpers/moment-subtract-test.js new file mode 100644 index 00000000..f7adf92e --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/moment-subtract-test.js @@ -0,0 +1,89 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-subtract', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg subtracts duration', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const duration = { days: 3 }; + this.set('duration', duration); + const expectedString = momentService + .moment() + .subtract(duration) + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-subtract this.duration}}`); + assert.dom().containsText(expectedString); + }); + + test('two args with number and string', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const number = 3; + const precision = 'days'; + this.setProperties({ + number, + precision, + }); + const expectedString = momentService + .moment() + .subtract(number, precision) + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-subtract this.number this.precision}}`); + assert.dom().containsText(expectedString); + }); + + test('two args with date and duration', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const duration = { days: 3 }; + this.set('duration', duration); + const expectedString = momentService + .moment('2016-06-01') + .subtract(duration) + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-subtract '2016-06-01' this.duration}}`); + assert.dom().containsText(expectedString); + }); + + test('one arg with precision', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const number = 3; + this.set('number', number); + const expectedString = momentService + .moment() + .subtract(number, 'days') + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-subtract this.number precision='days'}}`); + assert.dom().containsText(expectedString); + }); + + test('two args with precision', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const number = 3; + this.set('number', number); + const expectedString = momentService + .moment('2016-06-01') + .subtract(number, 'days') + .format('ddd MMM DD YYYY'); + + await render( + hbs`{{moment-subtract '2016-06-01' this.number precision='days'}}`, + ); + assert.dom().containsText(expectedString); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/moment-to-now-test.js b/test-app-4.x/tests/unit/helpers/moment-to-now-test.js new file mode 100644 index 00000000..7c63615d --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/moment-to-now-test.js @@ -0,0 +1,106 @@ +import EmberObject from '@ember/object'; +import { run } from '@ember/runloop'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-to-now', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg (date)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: momentService.moment().subtract(3, 'day'), + }); + + await render(hbs`{{moment-to-now this.dateA}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('one arg (date, hideAffix=boolean)', async function (assert) { + assert.expect(2); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + date: momentService.moment().subtract(3, 'day'), + }); + + await render(hbs`{{moment-to-now this.date hideAffix=true}}`); + assert.dom(this.element).hasText('3 days'); + await render(hbs`{{moment-to-now this.date hideAffix=false}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('two args (date, inputFormat)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + format: 'LLLL', + date: momentService.moment().subtract(3, 'day'), + }); + + await render(hbs`{{moment-to-now this.date this.format}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('change date input and change is reflected by bound helper', async function (assert) { + assert.expect(2); + + const momentService = this.owner.lookup('service:moment'); + const context = EmberObject.create({ + date: momentService.moment().subtract(1, 'hour'), + }); + + this.set('context', context); + await render(hbs`{{moment-to-now this.context.date}}`); + assert.dom(this.element).hasText('in an hour'); + + run(function () { + context.set('date', momentService.moment().subtract(2, 'hour')); + }); + + assert.dom(this.element).hasText('in 2 hours'); + }); + + test('can inline a locale instead of using global locale', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.set('date', momentService.moment().subtract(1, 'hour')); + await render(hbs`{{moment-to-now this.date locale='es'}}`); + assert.dom(this.element).hasText('en una hora'); + }); + + test('can be called with null', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{moment-to-now this.date allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); + + test('can be called with null using global config option', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{moment-to-now this.date}}`); + assert.dom(this.element).hasText(''); + }); + + test('unable to called with null overriding global config option', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{moment-to-now this.date allow-empty=false}}`); + assert.dom(this.element).hasText('Invalid date'); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/moment-to-test.js b/test-app-4.x/tests/unit/helpers/moment-to-test.js new file mode 100644 index 00000000..bacb90d0 --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/moment-to-test.js @@ -0,0 +1,75 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-to', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg (date)', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + + this.set('date', momentService.moment().subtract(3, 'day')); + + await render(hbs`{{moment-to this.date}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('two args (dateA, dateB)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().subtract(3, 'day'), + }); + + await render(hbs`{{moment-to this.dateB this.dateA}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('two args (dateA, dateB, hideAffix=boolean)', async function (assert) { + assert.expect(2); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().add(3, 'day'), + }); + + await render(hbs`{{moment-to this.dateA this.dateB hideAffix=true}}`); + assert.dom(this.element).hasText('3 days'); + await render(hbs`{{moment-to this.dateA this.dateB hideAffix=false}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('three args (dateA, dateB, boolean)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().add(3, 'day'), + }); + + await render(hbs`{{moment-to this.dateA this.dateB true}}`); + assert.dom(this.element).hasText('3 days'); + }); + + test('can inline a locale', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.set('dateA', momentService.moment()); + this.set('dateB', momentService.moment().add(2, 'day')); + + await render(hbs`{{moment-to this.dateA this.dateB locale='es'}}`); + assert.dom(this.element).hasText('en 2 días'); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/now-test.js b/test-app-4.x/tests/unit/helpers/now-test.js new file mode 100644 index 00000000..273c91eb --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/now-test.js @@ -0,0 +1,45 @@ +import moment from 'moment-timezone'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +let now = moment.now; +let momentFromService; + +module('now', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.moment = this.owner.lookup('service:moment'); + this.moment.changeLocale('en'); + momentFromService = this.moment.moment; + }); + + hooks.afterEach(function () { + moment.now = now; + this.moment.now = now; + this.moment.moment = momentFromService; + }); + + test('returns the result of moment.now', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const current = momentService.moment('20111031'); + moment.now = () => current; + await render(hbs`{{moment-format (now) 'YYYYMMDD'}}`); + assert.dom(this.element).hasText('20111031'); + }); + + test('returns the result of this.moment.now', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const current = momentService.moment('20011031'); + this.moment.moment = () => current; + await render(hbs`{{moment-format (now) 'YYYYMMDD'}}`); + assert.dom().hasText('20011031'); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/unix-test.js b/test-app-4.x/tests/unit/helpers/unix-test.js new file mode 100644 index 00000000..ce8f3280 --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/unix-test.js @@ -0,0 +1,22 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('unix', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('returns the result of moment.unix', async function (assert) { + assert.expect(1); + + await render( + hbs`{{moment-format (unix 946684799) 'YYYYMMDD' timeZone='America/Los_Angeles'}}`, + ); + assert.dom(this.element).hasText('19991231'); + }); +}); diff --git a/test-app-4.x/tests/unit/helpers/utc-test.js b/test-app-4.x/tests/unit/helpers/utc-test.js new file mode 100644 index 00000000..d12d3e27 --- /dev/null +++ b/test-app-4.x/tests/unit/helpers/utc-test.js @@ -0,0 +1,68 @@ +import moment from 'moment-timezone'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +let utc = moment.utc; + +module('utc', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.moment = this.owner.lookup('service:moment'); + this.moment.changeLocale('en'); + }); + + hooks.afterEach(function () { + moment.utc = utc; + this.moment.utc = utc; + }); + + test('returns the result of moment.utc', async function (assert) { + assert.expect(1); + + const timeStr = '2001-10-31T13:24:56'; + const fmtStr = 'YYYY-MM-DDTHH:mm:ss'; + const momentService = this.owner.lookup('service:moment'); + const current = momentService.utc(timeStr, fmtStr); + moment.utc = () => current; + await render(hbs`{{moment-format (utc) 'YYYY-MM-DDTHH:mm:ss'}}`); + assert.dom(this.element).hasText(timeStr); + }); + + test('returns the result of this.moment.utc', async function (assert) { + assert.expect(1); + + const timeStr = '2001-10-31T13:24:56'; + const fmtStr = 'YYYY-MM-DDTHH:mm:ss'; + const momentService = this.owner.lookup('service:moment'); + const current = momentService.utc(timeStr, fmtStr); + this.moment.utc = () => current; + await render(hbs`{{moment-format (utc) 'YYYY-MM-DDTHH:mm:ss'}}`); + assert.dom().hasText(timeStr); + }); + + test('utc of existing moment', async function (assert) { + assert.expect(2); + + const utcTimeStr = '2001-10-31T13:24:56 +00:00'; + const estTimeStr = '2001-10-31T08:24:56 -05:00'; + const fmtStr = 'YYYY-MM-DDTHH:mm:ss Z'; + const momentService = this.owner.lookup('service:moment'); + const estValue = momentService.moment(estTimeStr, fmtStr); + this.set('estValue', estValue); + const utcValue = momentService.utc(utcTimeStr, fmtStr); + this.set('utcValue', utcValue); + await render( + hbs`{{moment-format (utc this.estValue) 'YYYY-MM-DDTHH:mm:ss Z'}}`, + ); + assert.dom(this.element).hasText(utcTimeStr); + + await render( + hbs`{{moment-format (utc this.utcValue) 'YYYY-MM-DDTHH:mm:ss Z'}}`, + ); + assert.dom(this.element).hasText(utcTimeStr); + }); +}); diff --git a/test-app-5.x/.editorconfig b/test-app-5.x/.editorconfig new file mode 100644 index 00000000..c35a0024 --- /dev/null +++ b/test-app-5.x/.editorconfig @@ -0,0 +1,19 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +indent_style = space +indent_size = 2 + +[*.hbs] +insert_final_newline = false + +[*.{diff,md}] +trim_trailing_whitespace = false diff --git a/test-app-5.x/.ember-cli b/test-app-5.x/.ember-cli new file mode 100644 index 00000000..465c4050 --- /dev/null +++ b/test-app-5.x/.ember-cli @@ -0,0 +1,7 @@ +{ + /** + Setting `isTypeScriptProject` to true will force the blueprint generators to generate TypeScript + rather than JavaScript by default, when a TypeScript version of a given blueprint is available. + */ + "isTypeScriptProject": false +} diff --git a/test-app-5.x/.eslintignore b/test-app-5.x/.eslintignore new file mode 100644 index 00000000..768fab33 --- /dev/null +++ b/test-app-5.x/.eslintignore @@ -0,0 +1,14 @@ +# unconventional js +/blueprints/*/files/ + +# compiled output +/declarations/ +/dist/ + +# misc +/coverage/ +!.* +.*/ + +# ember-try +/.node_modules.ember-try/ diff --git a/test-app-5.x/.eslintrc.js b/test-app-5.x/.eslintrc.js new file mode 100644 index 00000000..c4adc3f3 --- /dev/null +++ b/test-app-5.x/.eslintrc.js @@ -0,0 +1,59 @@ +'use strict'; + +module.exports = { + root: true, + parser: '@babel/eslint-parser', + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + requireConfigFile: false, + babelOptions: { + plugins: [ + ['@babel/plugin-proposal-decorators', { decoratorsBeforeExport: true }], + ], + }, + }, + plugins: ['ember'], + extends: [ + 'eslint:recommended', + 'plugin:ember/recommended', + 'plugin:prettier/recommended', + ], + env: { + browser: true, + }, + rules: {}, + overrides: [ + // node files + { + files: [ + './.eslintrc.js', + './.prettierrc.js', + './.stylelintrc.js', + './.template-lintrc.js', + './ember-cli-build.js', + './testem.js', + './blueprints/*/index.js', + './config/**/*.js', + './lib/*/index.js', + './server/**/*.js', + ], + parserOptions: { + sourceType: 'script', + }, + env: { + browser: false, + node: true, + }, + extends: ['plugin:n/recommended'], + }, + { + // test files + files: ['tests/**/*-test.{js,ts}'], + extends: ['plugin:qunit/recommended'], + rules: { + 'qunit/require-expect': 'off', + }, + }, + ], +}; diff --git a/test-app-5.x/.gitignore b/test-app-5.x/.gitignore new file mode 100644 index 00000000..71ad79d0 --- /dev/null +++ b/test-app-5.x/.gitignore @@ -0,0 +1,25 @@ +# compiled output +/dist/ +/declarations/ + +# dependencies +/node_modules/ + +# misc +/.env* +/.pnp* +/.eslintcache +/coverage/ +/npm-debug.log* +/testem.log +/yarn-error.log + +# ember-try +/.node_modules.ember-try/ +/npm-shrinkwrap.json.ember-try +/package.json.ember-try +/package-lock.json.ember-try +/yarn.lock.ember-try + +# broccoli-debug +/DEBUG/ diff --git a/test-app-5.x/.npmignore b/test-app-5.x/.npmignore new file mode 100644 index 00000000..c64569f1 --- /dev/null +++ b/test-app-5.x/.npmignore @@ -0,0 +1,2 @@ +# this whole test-app-5.x is unpublished +* \ No newline at end of file diff --git a/test-app-5.x/.prettierignore b/test-app-5.x/.prettierignore new file mode 100644 index 00000000..9385391f --- /dev/null +++ b/test-app-5.x/.prettierignore @@ -0,0 +1,13 @@ +# unconventional js +/blueprints/*/files/ + +# compiled output +/dist/ + +# misc +/coverage/ +!.* +.*/ + +# ember-try +/.node_modules.ember-try/ diff --git a/test-app-5.x/.prettierrc.js b/test-app-5.x/.prettierrc.js new file mode 100644 index 00000000..e5f7b6d1 --- /dev/null +++ b/test-app-5.x/.prettierrc.js @@ -0,0 +1,12 @@ +'use strict'; + +module.exports = { + overrides: [ + { + files: '*.{js,ts}', + options: { + singleQuote: true, + }, + }, + ], +}; diff --git a/test-app-5.x/.stylelintignore b/test-app-5.x/.stylelintignore new file mode 100644 index 00000000..a0cf71cb --- /dev/null +++ b/test-app-5.x/.stylelintignore @@ -0,0 +1,8 @@ +# unconventional files +/blueprints/*/files/ + +# compiled output +/dist/ + +# addons +/.node_modules.ember-try/ diff --git a/test-app-5.x/.stylelintrc.js b/test-app-5.x/.stylelintrc.js new file mode 100644 index 00000000..021c539a --- /dev/null +++ b/test-app-5.x/.stylelintrc.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + extends: ['stylelint-config-standard', 'stylelint-prettier/recommended'], +}; diff --git a/test-app-5.x/.template-lintrc.js b/test-app-5.x/.template-lintrc.js new file mode 100644 index 00000000..6f9a6f02 --- /dev/null +++ b/test-app-5.x/.template-lintrc.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = { + extends: 'recommended', + rules: { + 'no-curly-component-invocation': { allow: ['utc'] }, + }, +}; diff --git a/test-app-5.x/.watchmanconfig b/test-app-5.x/.watchmanconfig new file mode 100644 index 00000000..f9c3d8f8 --- /dev/null +++ b/test-app-5.x/.watchmanconfig @@ -0,0 +1,3 @@ +{ + "ignore_dirs": ["dist"] +} diff --git a/test-app-5.x/README.md b/test-app-5.x/README.md new file mode 100644 index 00000000..8ed5438e --- /dev/null +++ b/test-app-5.x/README.md @@ -0,0 +1,57 @@ +# test-app-5.x + +This README outlines the details of collaborating on this Ember application. +A short introduction of this app could easily go here. + +## Prerequisites + +You will need the following things properly installed on your computer. + +- [Git](https://git-scm.com/) +- [Node.js](https://nodejs.org/) +- [pnpm](https://pnpm.io/) +- [Ember CLI](https://cli.emberjs.com/release/) +- [Google Chrome](https://google.com/chrome/) + +## Installation + +- `git clone ` this repository +- `cd test-app-5.x` +- `pnpm install` + +## Running / Development + +- `pnpm start` +- Visit your app at [http://localhost:4200](http://localhost:4200). +- Visit your tests at [http://localhost:4200/tests](http://localhost:4200/tests). + +### Code Generators + +Make use of the many generators for code, try `ember help generate` for more details + +### Running Tests + +- `pnpm test` +- `pnpm test:ember --server` + +### Linting + +- `pnpm lint` +- `pnpm lint:fix` + +### Building + +- `pnpm ember build` (development) +- `pnpm build` (production) + +### Deploying + +Specify what it takes to deploy your app. + +## Further Reading / Useful Links + +- [ember.js](https://emberjs.com/) +- [ember-cli](https://cli.emberjs.com/release/) +- Development Browser Extensions + - [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi) + - [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/) diff --git a/test-app-5.x/app/app.js b/test-app-5.x/app/app.js new file mode 100644 index 00000000..43d0d386 --- /dev/null +++ b/test-app-5.x/app/app.js @@ -0,0 +1,12 @@ +import Application from '@ember/application'; +import Resolver from 'ember-resolver'; +import loadInitializers from 'ember-load-initializers'; +import config from 'test-app-5.x/config/environment'; + +export default class App extends Application { + modulePrefix = config.modulePrefix; + podModulePrefix = config.podModulePrefix; + Resolver = Resolver; +} + +loadInitializers(App, config.modulePrefix); diff --git a/test-app-5.x/app/components/.gitkeep b/test-app-5.x/app/components/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test-app-5.x/app/controllers/.gitkeep b/test-app-5.x/app/controllers/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test-app-5.x/app/controllers/index.js b/test-app-5.x/app/controllers/index.js new file mode 100644 index 00000000..c04a32ce --- /dev/null +++ b/test-app-5.x/app/controllers/index.js @@ -0,0 +1,37 @@ +import { action, set } from '@ember/object'; +import { dependentKeyCompat } from '@ember/object/compat'; +import { tracked } from '@glimmer/tracking'; +import { inject as service } from '@ember/service'; +import Controller from '@ember/controller'; + +export default class Index extends Controller { + @service moment; + + @action + changeLocale(locale) { + this.moment.changeLocale(locale); + } + @action + changeDefaultFormat(defaultFormat) { + set(this, 'moment.defaultFormat', defaultFormat); + } + + @tracked emptyDate = null; + @tracked numHours = 822; + @tracked unixTimeStamp = 946684799; + @tracked date = new Date(); + @tracked currentTime = new Date(); + + get inTwelveHours() { + return new Date(new Date().valueOf() + 12 * 60 * 60 * 1000); + } + + @dependentKeyCompat + get lastHour() { + return new Date(new Date().valueOf() - 60 * 60 * 1000); + } + + get usIndependenceDay() { + return new Date(1776, 6, 4, 12, 0, 0); + } +} diff --git a/test-app-5.x/app/controllers/smoke.js b/test-app-5.x/app/controllers/smoke.js new file mode 100644 index 00000000..d95a9ecd --- /dev/null +++ b/test-app-5.x/app/controllers/smoke.js @@ -0,0 +1,11 @@ +import Controller from '@ember/controller'; + +export default class Smoke extends Controller { + get currentTime() { + return new Date(); + } + + get usIndependenceDay() { + return new Date(1776, 6, 4, 12, 0, 0); + } +} diff --git a/test-app-5.x/app/helpers/.gitkeep b/test-app-5.x/app/helpers/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test-app-5.x/app/helpers/get-format.js b/test-app-5.x/app/helpers/get-format.js new file mode 100644 index 00000000..0b7319ee --- /dev/null +++ b/test-app-5.x/app/helpers/get-format.js @@ -0,0 +1,5 @@ +import { helper } from '@ember/component/helper'; + +export default helper(function getFormat(/*positional, named*/) { + return 'L'; +}); diff --git a/test-app-5.x/app/index.html b/test-app-5.x/app/index.html new file mode 100644 index 00000000..600c1390 --- /dev/null +++ b/test-app-5.x/app/index.html @@ -0,0 +1,24 @@ + + + + + TestApp + + + + {{content-for "head"}} + + + + + {{content-for "head-footer"}} + + + {{content-for "body"}} + + + + + {{content-for "body-footer"}} + + diff --git a/test-app-5.x/app/models/.gitkeep b/test-app-5.x/app/models/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test-app-5.x/app/router.js b/test-app-5.x/app/router.js new file mode 100644 index 00000000..7ea39ed6 --- /dev/null +++ b/test-app-5.x/app/router.js @@ -0,0 +1,12 @@ +import EmberRouter from '@ember/routing/router'; +import config from 'test-app-5.x/config/environment'; + +export default class Router extends EmberRouter { + location = config.locationType; + rootURL = config.rootURL; +} + +Router.map(function () { + this.route('index', { path: '/' }); + this.route('smoke'); +}); diff --git a/test-app-5.x/app/routes/.gitkeep b/test-app-5.x/app/routes/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test-app-5.x/app/routes/application.js b/test-app-5.x/app/routes/application.js new file mode 100644 index 00000000..2f8aeeb4 --- /dev/null +++ b/test-app-5.x/app/routes/application.js @@ -0,0 +1,10 @@ +import Route from '@ember/routing/route'; +import { inject as service } from '@ember/service'; + +export default class Application extends Route { + @service moment; + + beforeModel() { + this.moment.changeLocale('en'); + } +} diff --git a/test-app-5.x/app/routes/index.js b/test-app-5.x/app/routes/index.js new file mode 100644 index 00000000..598979c8 --- /dev/null +++ b/test-app-5.x/app/routes/index.js @@ -0,0 +1,22 @@ +import Route from '@ember/routing/route'; +import { inject as service } from '@ember/service'; +import { set } from '@ember/object'; +import { run } from '@ember/runloop'; + +export default class Index extends Route { + @service moment; + + beforeModel() { + set(this, 'moment.locale', 'en'); + } + + setupController(controller, model) { + super.setupController(controller, model); + + setInterval(function () { + run(function () { + controller.set('date', new Date()); + }); + }, 1000); + } +} diff --git a/test-app-5.x/app/routes/smoke.js b/test-app-5.x/app/routes/smoke.js new file mode 100644 index 00000000..2a8486c3 --- /dev/null +++ b/test-app-5.x/app/routes/smoke.js @@ -0,0 +1,9 @@ +import Route from '@ember/routing/route'; +import moment from 'moment-timezone'; + +export default class Smoke extends Route { + setupController(controller, model) { + moment.locale('en'); + return super.setupController(controller, model); + } +} diff --git a/test-app-5.x/app/styles/app.css b/test-app-5.x/app/styles/app.css new file mode 100644 index 00000000..e5d2d6af --- /dev/null +++ b/test-app-5.x/app/styles/app.css @@ -0,0 +1,19 @@ +/* Ember supports plain CSS out of the box. More info: https://cli.emberjs.com/release/advanced-use/stylesheets/ */ + +html, +body { + margin: 20px; + font-family: Helvetica, sans-serif; + font-size: 14px; +} + +.example { + padding: 5px; + margin: 2px 0; + background: #f1f1f1; +} + +code { + color: #333; + font-size: 13px; +} diff --git a/test-app-5.x/app/templates/application.hbs b/test-app-5.x/app/templates/application.hbs new file mode 100644 index 00000000..abb003e1 --- /dev/null +++ b/test-app-5.x/app/templates/application.hbs @@ -0,0 +1,5 @@ +{{page-title "ember-moment"}} + +

ember-moment

+ +{{outlet}} diff --git a/test-app-5.x/app/templates/components/partials/calendar.hbs b/test-app-5.x/app/templates/components/partials/calendar.hbs new file mode 100644 index 00000000..0fa54f0e --- /dev/null +++ b/test-app-5.x/app/templates/components/partials/calendar.hbs @@ -0,0 +1,6 @@ +
+ {{moment-calendar this.currentTime this.lastHour}} + + \{{moment-calendar this.currentTime this.lastHour}} + +
\ No newline at end of file diff --git a/test-app-5.x/app/templates/components/partials/diff.hbs b/test-app-5.x/app/templates/components/partials/diff.hbs new file mode 100644 index 00000000..b8878cfa --- /dev/null +++ b/test-app-5.x/app/templates/components/partials/diff.hbs @@ -0,0 +1,36 @@ +
+ {{moment-diff this.lastHour this.currentTime}} + + \{{moment-diff this.lastHour this.currentTime}} + +
+ +
+ {{moment-diff this.currentTime this.inTwelveHours precision='hour'}} + + \{{moment-diff this.currentTime this.inTwelveHours precision='hour'}} + +
+ +
+ {{moment-diff this.currentTime this.inTwelveHours precision='day' float=true}} + + {{! template linter bug: https://github.com/ember-template-lint/ember-template-lint/issues/2330 }} + {{! template-lint-disable no-unbalanced-curlies}} + \{{moment-diff this.currentTime this.inTwelveHours precision='day' float=true}} + +
+ +
+ {{moment-diff this.usIndependenceDay this.currentTime precision='year'}} + + \{{moment-diff this.usIndependenceDay this.currentTime precision='year'}} + +
+ +
+ {{moment-diff this.currentTime this.usIndependenceDay precision='year'}} + + \{{moment-diff this.currentTime this.usIndependenceDay precision='year'}} + +
\ No newline at end of file diff --git a/test-app-5.x/app/templates/components/partials/duration.hbs b/test-app-5.x/app/templates/components/partials/duration.hbs new file mode 100644 index 00000000..98490f42 --- /dev/null +++ b/test-app-5.x/app/templates/components/partials/duration.hbs @@ -0,0 +1,34 @@ +
+{{moment-duration 5000}} + + \{{moment-duration 5000}} + +
+ +
+{{moment-duration 600000}} + + \{{moment-duration 600000}} + +
+ +
+{{moment-duration 86400000}} + + \{{moment-duration 86400000}} + +
+ +
+{{moment-duration '7.23:59:59'}} + + \{{moment-duration '7.23:59:59'}} + +
+ +
+{{moment-duration 210 'days'}} + + \{{moment-duration 210 'days'}} + +
diff --git a/test-app-5.x/app/templates/components/partials/format.hbs b/test-app-5.x/app/templates/components/partials/format.hbs new file mode 100644 index 00000000..5fdaaaf7 --- /dev/null +++ b/test-app-5.x/app/templates/components/partials/format.hbs @@ -0,0 +1,69 @@ +
+ {{moment-format (moment this.currentTime) 'LLLL'}} + + \{{moment-format (moment this.currentTime) 'LLLL'}} + +
+ +
+ {{moment-format (moment this.currentTime) 'LLLL'}} + + \{{moment-format (moment this.currentTime) 'LLLL'}} + +
+ +
+ {{moment-format (moment '123' 'hmm') 'HH:mm'}} + + \{{moment-format (moment '123' 'hmm') 'HH:mm'}} + +
+ +
+ {{moment-format (now interval=1000) 'MMMM Do YYYY, h:mm:ss a'}} + + \{{moment-format (now interval=1000) 'MMMM Do YYYY, h:mm:ss a'}} + +
+ +
+ {{moment-format (moment this.currentTime)}} + + \{{moment-format (moment this.currentTime)}} + +
+ +
+ {{moment-format (moment this.usIndependenceDay) 'LLLL'}} + + \{{moment-format (moment this.usIndependenceDay) 'LLLL'}} + +
+ +
+ {{moment-format (utc (moment this.usIndependenceDay)) 'LLLL'}} + + \{{moment-format (utc (moment this.usIndependenceDay)) 'LLLL'}} + +
+ +
+ {{moment-format (moment this.usIndependenceDay) 'MMM DD, YYYY'}} + + \{{moment-format (moment this.usIndependenceDay) 'MMM DD, YYYY'}} + +
+ +
+ {{moment-format (moment this.currentTime) 'LL' 'LLLL'}} + + \{{moment-format (moment this.currentTime) 'LL' 'LLLL'}} + +
+ +
+ {{moment-format (unix this.unixTimeStamp) 'LL' 'LLLL'}} + + \{{moment-format (unix this.unixTimeStamp) 'LL' 'LLLL'}} + +
\ No newline at end of file diff --git a/test-app-5.x/app/templates/components/partials/from-now.hbs b/test-app-5.x/app/templates/components/partials/from-now.hbs new file mode 100644 index 00000000..1eac6209 --- /dev/null +++ b/test-app-5.x/app/templates/components/partials/from-now.hbs @@ -0,0 +1,20 @@ +
+ {{moment-from-now this.currentTime}} + + \{{moment-from-now this.currentTime}} + +
+ +
+ {{moment-from-now this.currentTime interval=1000}} + + \{{moment-from-now this.currentTime interval=1000}} + +
+ +
+ {{moment-from-now this.usIndependenceDay}} + + \{{moment-from-now this.usIndependenceDay}} + +
\ No newline at end of file diff --git a/test-app-5.x/app/templates/components/partials/moment.hbs b/test-app-5.x/app/templates/components/partials/moment.hbs new file mode 100644 index 00000000..4c01d2f0 --- /dev/null +++ b/test-app-5.x/app/templates/components/partials/moment.hbs @@ -0,0 +1,41 @@ +
+ {{moment this.currentTime}} + + \{{moment this.currentTime}} + +
+ +
+ {{moment (now interval=1000)}} + + \{{moment (now interval=1000)}} + +
+ +
+ {{moment '12-25-1995' 'MM-DD-YYYY'}} + + \{{moment '12-25-1995' 'MM-DD-YYYY'}} + +
+ +
+ {{utc '12-25-1995 23:45:21' 'MM-DD-YYYY HH:mm:ss'}} + + \{{utc '12-25-1995 23:45:21' 'MM-DD-YYYY HH:mm:ss'}} + +
+ +
+ {{utc interval=1000}} + + \{{utc interval=1000}} + +
+ +
+ {{utc (moment this.now)}} + + \{{utc (moment this.now)}} + +
\ No newline at end of file diff --git a/test-app-5.x/app/templates/components/partials/to-now.hbs b/test-app-5.x/app/templates/components/partials/to-now.hbs new file mode 100644 index 00000000..ff3c6d93 --- /dev/null +++ b/test-app-5.x/app/templates/components/partials/to-now.hbs @@ -0,0 +1,20 @@ +
+ {{moment-to-now this.currentTime}} + + \{{moment-to-now this.currentTime}} + +
+ +
+ {{moment-to-now this.currentTime interval=1000}} + + \{{moment-to-now this.currentTime interval=1000}} + +
+ +
+ {{moment-to-now this.usIndependenceDay}} + + \{{moment-to-now this.usIndependenceDay}} + +
\ No newline at end of file diff --git a/test-app-5.x/app/templates/index.hbs b/test-app-5.x/app/templates/index.hbs new file mode 100644 index 00000000..1193600e --- /dev/null +++ b/test-app-5.x/app/templates/index.hbs @@ -0,0 +1,51 @@ +Locale: + + + + +
+Default Format: + + + + +
+ +

Moment

+ + + +

Format

+ + + +
+ +

From Now

+ + + +

To Now

+ + + +
+ +

Calendar

+ + + +
+ +

Duration

+ + + +
+ +

Difference

+ + \ No newline at end of file diff --git a/test-app-5.x/app/templates/smoke.hbs b/test-app-5.x/app/templates/smoke.hbs new file mode 100644 index 00000000..4643a4b3 --- /dev/null +++ b/test-app-5.x/app/templates/smoke.hbs @@ -0,0 +1,6 @@ +
{{moment-format + this.usIndependenceDay + 'MMM DD, YYYY' + }}
+
{{moment-from-now this.currentTime}}
+
{{moment-duration 420000}}
\ No newline at end of file diff --git a/test-app-5.x/config/ember-cli-update.json b/test-app-5.x/config/ember-cli-update.json new file mode 100644 index 00000000..f8ced50c --- /dev/null +++ b/test-app-5.x/config/ember-cli-update.json @@ -0,0 +1,22 @@ +{ + "schemaVersion": "1.0.0", + "packages": [ + { + "name": "ember-cli", + "version": "5.9.0", + "blueprints": [ + { + "name": "app", + "outputRepo": "https://github.com/ember-cli/ember-new-output", + "codemodsSource": "ember-app-codemods-manifest@1", + "isBaseBlueprint": true, + "options": [ + "--no-welcome", + "--pnpm", + "--ci-provider=travis" + ] + } + ] + } + ] +} diff --git a/test-app-5.x/config/ember-try.js b/test-app-5.x/config/ember-try.js new file mode 100644 index 00000000..00d91379 --- /dev/null +++ b/test-app-5.x/config/ember-try.js @@ -0,0 +1,54 @@ +'use strict'; + +const getChannelURL = require('ember-source-channel-url'); +const { embroiderSafe, embroiderOptimized } = require('@embroider/test-setup'); + +module.exports = async function () { + return { + usePnpm: true, + scenarios: [ + { + name: 'ember-lts-5.4', + npm: { + devDependencies: { + 'ember-source': '~5.4.0', + }, + }, + }, + { + name: 'ember-lts-5.8', + npm: { + devDependencies: { + 'ember-source': '~5.8.0', + }, + }, + }, + { + name: 'ember-release', + npm: { + devDependencies: { + 'ember-source': await getChannelURL('release'), + }, + }, + }, + { + name: 'ember-beta', + npm: { + devDependencies: { + 'ember-source': await getChannelURL('beta'), + }, + }, + }, + { + name: 'ember-canary', + npm: { + devDependencies: { + 'ember-source': await getChannelURL('canary'), + }, + }, + }, + embroiderSafe(), + embroiderOptimized(), + ], + }; +}; diff --git a/test-app-5.x/config/environment.js b/test-app-5.x/config/environment.js new file mode 100644 index 00000000..9237fc4a --- /dev/null +++ b/test-app-5.x/config/environment.js @@ -0,0 +1,52 @@ +'use strict'; + +module.exports = function (environment) { + const ENV = { + modulePrefix: 'test-app-5.x', + environment, + rootURL: '/', + locationType: 'history', + 'ember-moment': { + allowEmpty: true, + outputFormat: 'LLLL', + }, + EmberENV: { + EXTEND_PROTOTYPES: false, + FEATURES: { + // Here you can enable experimental features on an ember canary build + // e.g. EMBER_NATIVE_DECORATOR_SUPPORT: true + }, + }, + + APP: { + // Here you can pass flags/options to your application instance + // when it is created + }, + }; + + if (environment === 'development') { + // ENV.APP.LOG_RESOLVER = true; + // ENV.APP.LOG_ACTIVE_GENERATION = true; + // ENV.APP.LOG_TRANSITIONS = true; + // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; + // ENV.APP.LOG_VIEW_LOOKUPS = true; + } + + if (environment === 'test') { + // Testem prefers this... + ENV.locationType = 'none'; + + // keep test console output quieter + ENV.APP.LOG_ACTIVE_GENERATION = false; + ENV.APP.LOG_VIEW_LOOKUPS = false; + + ENV.APP.rootElement = '#ember-testing'; + ENV.APP.autoboot = false; + } + + if (environment === 'production') { + // here you can enable a production-specific feature + } + + return ENV; +}; diff --git a/test-app-5.x/config/optional-features.json b/test-app-5.x/config/optional-features.json new file mode 100644 index 00000000..5329dd99 --- /dev/null +++ b/test-app-5.x/config/optional-features.json @@ -0,0 +1,7 @@ +{ + "application-template-wrapper": false, + "default-async-observers": true, + "jquery-integration": false, + "template-only-glimmer-components": true, + "no-implicit-route-model": true +} diff --git a/test-app-5.x/config/targets.js b/test-app-5.x/config/targets.js new file mode 100644 index 00000000..1e48e059 --- /dev/null +++ b/test-app-5.x/config/targets.js @@ -0,0 +1,11 @@ +'use strict'; + +const browsers = [ + 'last 1 Chrome versions', + 'last 1 Firefox versions', + 'last 1 Safari versions', +]; + +module.exports = { + browsers, +}; diff --git a/test-app-5.x/ember-cli-build.js b/test-app-5.x/ember-cli-build.js new file mode 100644 index 00000000..1344c767 --- /dev/null +++ b/test-app-5.x/ember-cli-build.js @@ -0,0 +1,26 @@ +'use strict'; + +const EmberApp = require('ember-cli/lib/broccoli/ember-app'); + +module.exports = function (defaults) { + let app = new EmberApp(defaults, { + autoImport: { + watchDependencies: ['ember-moment'], + }, + }); + + const { maybeEmbroider } = require('@embroider/test-setup'); + return maybeEmbroider(app, { + skipBabel: [ + { + package: 'qunit', + }, + { + package: 'moment', + }, + { + package: 'moment-timezone', + }, + ], + }); +}; diff --git a/test-app-5.x/package.json b/test-app-5.x/package.json new file mode 100644 index 00000000..c89931e0 --- /dev/null +++ b/test-app-5.x/package.json @@ -0,0 +1,82 @@ +{ + "name": "test-app-5.x", + "version": "0.0.0", + "private": true, + "description": "Test app for ember-moment addon with ember-source 5.x", + "repository": "", + "license": "MIT", + "author": "", + "directories": { + "doc": "doc", + "test": "tests" + }, + "scripts": { + "build": "ember build --environment=production", + "lint": "concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\"", + "lint:css": "stylelint \"**/*.css\"", + "lint:css:fix": "concurrently \"pnpm:lint:css -- --fix\"", + "lint:fix": "concurrently \"pnpm:lint:*:fix\" --names \"fix:\"", + "lint:hbs": "ember-template-lint .", + "lint:hbs:fix": "ember-template-lint . --fix", + "lint:js": "eslint . --cache", + "lint:js:fix": "eslint . --fix", + "start": "ember serve", + "test:ember": "ember test --test-port 0" + }, + "devDependencies": { + "@babel/core": "^7.24.7", + "@babel/eslint-parser": "^7.24.7", + "@babel/plugin-proposal-decorators": "^7.24.7", + "@ember/optional-features": "^2.1.0", + "@ember/string": "^3.1.1", + "@ember/test-helpers": "^3.3.0", + "@embroider/test-setup": "^3.0.1", + "@glimmer/component": "^1.1.2", + "@glimmer/tracking": "^1.1.2", + "broccoli-asset-rev": "^3.0.0", + "concurrently": "^8.2.2", + "ember-auto-import": "^2.7.3", + "ember-cli": "~5.9.0", + "ember-cli-app-version": "^6.0.1", + "ember-cli-babel": "^8.2.0", + "ember-cli-clean-css": "^3.0.0", + "ember-cli-dependency-checker": "^3.3.2", + "ember-cli-htmlbars": "^6.3.0", + "ember-cli-inject-live-reload": "^2.1.0", + "ember-cli-sri": "^2.1.1", + "ember-cli-terser": "^4.0.2", + "ember-fetch": "^8.1.2", + "ember-load-initializers": "^2.1.2", + "ember-modifier": "^4.1.0", + "ember-moment": "workspace:*", + "ember-page-title": "^8.2.3", + "ember-qunit": "^8.0.2", + "ember-resolver": "^11.0.1", + "ember-source": "~5.9.0", + "ember-source-channel-url": "^3.0.0", + "ember-template-lint": "^5.13.0", + "ember-try": "^3.0.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-ember": "^11.12.0", + "eslint-plugin-n": "^16.6.2", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-qunit": "^8.1.1", + "loader.js": "^4.7.0", + "moment-timezone": "^0.5.45", + "prettier": "^3.3.1", + "qunit": "^2.21.0", + "qunit-dom": "^2.0.0", + "stylelint": "^15.11.0", + "stylelint-config-standard": "^34.0.0", + "stylelint-prettier": "^4.1.0", + "tracked-built-ins": "^3.3.0", + "webpack": "^5.91.0" + }, + "engines": { + "node": ">= 18" + }, + "ember": { + "edition": "octane" + } +} \ No newline at end of file diff --git a/test-app-5.x/public/robots.txt b/test-app-5.x/public/robots.txt new file mode 100644 index 00000000..f5916452 --- /dev/null +++ b/test-app-5.x/public/robots.txt @@ -0,0 +1,3 @@ +# http://www.robotstxt.org +User-agent: * +Disallow: diff --git a/test-app-5.x/testem.js b/test-app-5.x/testem.js new file mode 100644 index 00000000..ed2f3712 --- /dev/null +++ b/test-app-5.x/testem.js @@ -0,0 +1,23 @@ +'use strict'; + +module.exports = { + test_page: 'tests/index.html?hidepassed', + disable_watching: true, + launch_in_ci: ['Chrome'], + launch_in_dev: ['Chrome'], + browser_start_timeout: 120, + browser_args: { + Chrome: { + ci: [ + // --no-sandbox is needed when running Chrome inside a container + process.env.CI ? '--no-sandbox' : null, + '--headless', + '--disable-dev-shm-usage', + '--disable-software-rasterizer', + '--mute-audio', + '--remote-debugging-port=0', + '--window-size=1440,900', + ].filter(Boolean), + }, + }, +}; diff --git a/test-app-5.x/tests/acceptance/smoke-test.js b/test-app-5.x/tests/acceptance/smoke-test.js new file mode 100644 index 00000000..4fc46fc3 --- /dev/null +++ b/test-app-5.x/tests/acceptance/smoke-test.js @@ -0,0 +1,25 @@ +import { module, test } from 'qunit'; +import { visit } from '@ember/test-helpers'; +import { setupApplicationTest } from 'ember-qunit'; + +module('Acceptance: Smoke', function (hooks) { + setupApplicationTest(hooks); + test('moment', async function (assert) { + assert.expect(1); + await visit('/smoke'); + assert.dom('.moment-independence-day').hasText('Jul 04, 1776'); + }); + + test('ago', async function (assert) { + assert.expect(1); + await visit('/smoke'); + + assert.dom('.ago-now').hasText('a few seconds ago'); + }); + + test('duration', async function (assert) { + assert.expect(1); + await visit('/smoke'); + assert.dom('.duration-seven-minutes').hasText('7 minutes'); + }); +}); diff --git a/test-app-5.x/tests/helpers/date.js b/test-app-5.x/tests/helpers/date.js new file mode 100644 index 00000000..0d49090a --- /dev/null +++ b/test-app-5.x/tests/helpers/date.js @@ -0,0 +1,7 @@ +import moment from 'moment-timezone'; + +moment.tz.add(['America/New_York|EST EDT|50 40|0101|1Lz50 1zb0 Op0']); + +export default function (time) { + return moment(new Date(time)).tz('America/New_York'); +} diff --git a/test-app-5.x/tests/helpers/index.js b/test-app-5.x/tests/helpers/index.js new file mode 100644 index 00000000..d37dd680 --- /dev/null +++ b/test-app-5.x/tests/helpers/index.js @@ -0,0 +1,42 @@ +import { + setupApplicationTest as upstreamSetupApplicationTest, + setupRenderingTest as upstreamSetupRenderingTest, + setupTest as upstreamSetupTest, +} from 'ember-qunit'; + +// This file exists to provide wrappers around ember-qunit's +// test setup functions. This way, you can easily extend the setup that is +// needed per test type. + +function setupApplicationTest(hooks, options) { + upstreamSetupApplicationTest(hooks, options); + + // Additional setup for application tests can be done here. + // + // For example, if you need an authenticated session for each + // application test, you could do: + // + // hooks.beforeEach(async function () { + // await authenticateSession(); // ember-simple-auth + // }); + // + // This is also a good place to call test setup functions coming + // from other addons: + // + // setupIntl(hooks); // ember-intl + // setupMirage(hooks); // ember-cli-mirage +} + +function setupRenderingTest(hooks, options) { + upstreamSetupRenderingTest(hooks, options); + + // Additional setup for rendering tests can be done here. +} + +function setupTest(hooks, options) { + upstreamSetupTest(hooks, options); + + // Additional setup for unit tests can be done here. +} + +export { setupApplicationTest, setupRenderingTest, setupTest }; diff --git a/test-app-5.x/tests/helpers/run-append.js b/test-app-5.x/tests/helpers/run-append.js new file mode 100644 index 00000000..6fb7d8fd --- /dev/null +++ b/test-app-5.x/tests/helpers/run-append.js @@ -0,0 +1,13 @@ +import { run } from '@ember/runloop'; + +function runAppend(view) { + run(view, 'appendTo', '#qunit-fixture'); +} + +function runDestroy(destroyed) { + if (destroyed) { + run(destroyed, 'destroy'); + } +} + +export { runAppend, runDestroy }; diff --git a/test-app-5.x/tests/index.html b/test-app-5.x/tests/index.html new file mode 100644 index 00000000..959a0efc --- /dev/null +++ b/test-app-5.x/tests/index.html @@ -0,0 +1,39 @@ + + + + + TestApp Tests + + + + {{content-for "head"}} + {{content-for "test-head"}} + + + + + + {{content-for "head-footer"}} + {{content-for "test-head-footer"}} + + + {{content-for "body"}} + {{content-for "test-body"}} + +
+
+
+
+
+
+ + + + + + + + {{content-for "body-footer"}} + {{content-for "test-body-footer"}} + + diff --git a/test-app-5.x/tests/integration/.gitkeep b/test-app-5.x/tests/integration/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test-app-5.x/tests/integration/helpers/get-format-test.js b/test-app-5.x/tests/integration/helpers/get-format-test.js new file mode 100644 index 00000000..40c9d7cc --- /dev/null +++ b/test-app-5.x/tests/integration/helpers/get-format-test.js @@ -0,0 +1,17 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Helper | get-format', function (hooks) { + setupRenderingTest(hooks); + + // TODO: Replace this with your real tests. + test('it renders', async function (assert) { + this.set('inputValue', 'L'); + + await render(hbs`{{get-format 'global-format'}}`); + + assert.dom(this.element).hasText('L'); + }); +}); diff --git a/test-app-5.x/tests/integration/moment-test.js b/test-app-5.x/tests/integration/moment-test.js new file mode 100644 index 00000000..24c06828 --- /dev/null +++ b/test-app-5.x/tests/integration/moment-test.js @@ -0,0 +1,115 @@ +import moment from 'moment-timezone'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.service = this.owner.lookup('service:moment'); + this.service.changeLocale('en'); + }); + + test('moment-from and moment integration', async function (assert) { + assert.expect(1); + + this.set('tomorrow', moment().add(1, 'day')); + await render(hbs`{{moment-from (moment) this.tomorrow}}`); + + assert.dom(this.element).hasText('a day ago'); + }); + + test('moment-to and moment integration', async function (assert) { + assert.expect(1); + + this.set('tomorrow', moment().add(1, 'day')); + await render(hbs`{{moment-to (moment) this.tomorrow}}`); + + assert.dom(this.element).hasText('in a day'); + }); + + test('moment and moment-format helper integration #2', async function (assert) { + assert.expect(1); + + this.setProperties({ + inputFormat: 'M/D/YY', + outputFormat: 'MMMM D, YYYY', + date: '5/3/10', + }); + + await render( + hbs`{{moment-format (moment this.date this.inputFormat) this.outputFormat}}`, + ); + assert.dom(this.element).hasText('May 3, 2010'); + }); + + test('moment can use the service locale', async function (assert) { + assert.expect(1); + + this.setProperties({ + inputFormat: 'M/D/YY', + outputFormat: 'MMMM D, YYYY', + date: '5/3/10', + }); + + this.service.changeLocale('fr'); + await render( + hbs`{{moment-format (moment this.date this.inputFormat) this.outputFormat}}`, + ); + + assert.dom(this.element).hasText('mai 3, 2010'); + }); + + test('changing moment service locale changes global locale', function (assert) { + const done = assert.async(); + assert.expect(1); + + this.service.on('localeChanged', function () { + assert.strictEqual(moment.locale(), 'es'); + done(); + }); + + this.service.setLocale('es'); + }); + + test('changing timeZone triggers event', function (assert) { + const done = assert.async(); + assert.expect(1); + + this.service.on('timeZoneChanged', function () { + assert.ok(true); + done(); + }); + + this.service.setTimeZone('PST'); + }); + + test('moment can use the service locale (setLocale)', async function (assert) { + assert.expect(1); + + this.setProperties({ + inputFormat: 'M/D/YY', + outputFormat: 'MMMM D, YYYY', + date: '5/3/10', + }); + + this.service.setLocale('fr'); + await render( + hbs`{{moment-format (moment this.date this.inputFormat) this.outputFormat}}`, + ); + + assert.dom(this.element).hasText('mai 3, 2010'); + }); + + test('moment can update service locale (updateLocale)', function (assert) { + assert.expect(2); + + this.service.updateLocale('en', { week: { dow: 3 } }); + assert.strictEqual(moment().weekday(0).format('dddd'), 'Wednesday'); + this.service.updateLocale('en', { week: { dow: 0 } }); + assert.strictEqual(moment().weekday(0).format('dddd'), 'Sunday'); + }); +}); diff --git a/test-app-5.x/tests/test-helper.js b/test-app-5.x/tests/test-helper.js new file mode 100644 index 00000000..5d0f7507 --- /dev/null +++ b/test-app-5.x/tests/test-helper.js @@ -0,0 +1,12 @@ +import Application from 'test-app-5.x/app'; +import config from 'test-app-5.x/config/environment'; +import * as QUnit from 'qunit'; +import { setApplication } from '@ember/test-helpers'; +import { setup } from 'qunit-dom'; +import { start } from 'ember-qunit'; + +setApplication(Application.create(config.APP)); + +setup(QUnit.assert); + +start(); diff --git a/test-app-5.x/tests/unit/.gitkeep b/test-app-5.x/tests/unit/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test-app-5.x/tests/unit/helpers/is-after-test.js b/test-app-5.x/tests/unit/helpers/is-after-test.js new file mode 100644 index 00000000..8b60840a --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/is-after-test.js @@ -0,0 +1,62 @@ +import EmberObject from '@ember/object'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('is-after', function (hooks) { + setupRenderingTest(hooks); + + test('one arg (comparisonDate)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const today = momentService.moment(); + const threeDaysFromNow = today.add(3, 'days'); + const context = EmberObject.create({ + date: threeDaysFromNow, + }); + this.set('context', context); + + await render(hbs`{{is-after this.context.date}}`); + assert.dom(this.element).hasText('false'); + }); + + test('one arg with precision (comparisonDate, precision)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const today = momentService.moment(); + const threeYearsAgo = today.subtract(3, 'years'); + const context = EmberObject.create({ + date: threeYearsAgo, + }); + this.set('context', context); + + await render(hbs`{{is-after this.context.date precision='year'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args (evaluatedDate, comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-after '2010-10-20' '2010-10-19'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args with precision (evaluatedDate, comparisonDate, precision)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-after '2010-12-20' '2010-10-19' precision='year'}}`); + assert.dom(this.element).hasText('false'); + }); + + test('can be called with null when allow-empty is set to true', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{is-after null allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/is-before-test.js b/test-app-5.x/tests/unit/helpers/is-before-test.js new file mode 100644 index 00000000..4d05dd67 --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/is-before-test.js @@ -0,0 +1,45 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('is-before', function (hooks) { + setupRenderingTest(hooks); + + test('one arg (comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-before '2011-10-19'}}`); + assert.dom(this.element).hasText('false'); + }); + + test('one arg with precision (comparisonDate, precision)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-before '2011-10-19' precision='year'}}`); + assert.dom(this.element).hasText('false'); + }); + + test('two args (evaluatedDate, comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-before '2010-10-20' '2011-10-19'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args with precision (evaluatedDate, comparisonDate, precision)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-before '2010-10-20' '2010-12-19' precision='year'}}`); + assert.dom(this.element).hasText('false'); + }); + + test('can be called with null when allow-empty is set to true', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{is-before null allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/is-between-test.js b/test-app-5.x/tests/unit/helpers/is-between-test.js new file mode 100644 index 00000000..0bd1140c --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/is-between-test.js @@ -0,0 +1,101 @@ +import EmberObject from '@ember/object'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('is-between', function (hooks) { + setupRenderingTest(hooks); + + test('two args (comparisonDate1, comparisonDate2)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const today = momentService.moment(); + const threeDaysFromNow = today.add(3, 'days'); + const context = EmberObject.create({ + date: threeDaysFromNow, + }); + this.set('context', context); + + await render(hbs`{{is-between '2010-10-19' this.context.date}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args (comparisonDate1, comparisonDate2, precision)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const today = momentService.moment(); + const threeYearsFromNow = today.add(3, 'years'); + const context = EmberObject.create({ + date: threeYearsFromNow, + }); + this.set('context', context); + + await render( + hbs`{{is-between '2010-10-19' this.context.date precision='year'}}`, + ); + assert.dom(this.element).hasText('true'); + }); + + test('two args (comparisonDate1, comparisonDate2, precision, inclusivity)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const today = momentService.moment(); + const threeDaysFromNow = today.add(3, 'days'); + const context = EmberObject.create({ + date: threeDaysFromNow, + }); + this.set('context', context); + + await render( + hbs`{{is-between '2010-10-19' this.context.date precision='year' inclusivity='()'}}`, + ); + assert.dom(this.element).hasText('false'); + }); + + test('three args (evaluatedDate, comparisonDate1, comparisonDate2)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-between '2010-10-20' '2010-10-19' '2010-10-25'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('three args with precision (evaluatedDate, comparisonDate1, comparisonDate2, precision)', async function (assert) { + assert.expect(1); + + await render( + hbs`{{is-between '2010-10-20' '2009-12-31' '2012-01-01' precision='year'}}`, + ); + assert.dom(this.element).hasText('true'); + }); + + test('three args with inclusivity (evaluatedDate, comparisonDate1, comparisonDate2, inclusivity)', async function (assert) { + assert.expect(1); + + await render( + hbs`{{is-between '2016-10-30' '2016-10-30' '2016-12-30' inclusivity='[)'}}`, + ); + assert.dom(this.element).hasText('true'); + }); + + test('three args with precision and inclusivity (evaluatedDate, comparisonDate1, comparisonDate2, precision, inclusivity)', async function (assert) { + assert.expect(1); + + await render( + hbs`{{is-between '2016-10-30' '2016-10-30' '2017-12-30' precision='year' inclusivity='[]'}}`, + ); + assert.dom(this.element).hasText('true'); + }); + + test('can be called with null when allow-empty is set to true', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{is-between null null allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/is-same-or-after-test.js b/test-app-5.x/tests/unit/helpers/is-same-or-after-test.js new file mode 100644 index 00000000..0fa24916 --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/is-same-or-after-test.js @@ -0,0 +1,64 @@ +import EmberObject from '@ember/object'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('is-same-or-after', function (hooks) { + setupRenderingTest(hooks); + + test('one arg (comparisonDate)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const today = momentService.moment(); + const threeDaysFromNow = today.add(3, 'days'); + const context = EmberObject.create({ + date: threeDaysFromNow, + }); + this.set('context', context); + + await render(hbs`{{is-same-or-after this.context.date}}`); + assert.dom(this.element).hasText('false'); + }); + + test('one arg with precision (comparisonDate, precision)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const today = momentService.moment(); + const threeYearsAgo = today.subtract(3, 'years'); + const context = EmberObject.create({ + date: threeYearsAgo, + }); + this.set('context', context); + + await render(hbs`{{is-same-or-after this.context.date precision='year'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args (evaluatedDate, comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-same-or-after '2010-10-20' '2010-10-20'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args with precision (evaluatedDate, comparisonDate, precision)', async function (assert) { + assert.expect(1); + + await render( + hbs`{{is-same-or-after '2010-12-20' '2010-10-19' precision='year'}}`, + ); + assert.dom(this.element).hasText('true'); + }); + + test('can be called with null when allow-empty is set to true', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{is-same-or-after null allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/is-same-or-before-test.js b/test-app-5.x/tests/unit/helpers/is-same-or-before-test.js new file mode 100644 index 00000000..555b83ba --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/is-same-or-before-test.js @@ -0,0 +1,47 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('is-same-or-before', function (hooks) { + setupRenderingTest(hooks); + + test('one arg (comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-same-or-before '2011-10-19'}}`); + assert.dom(this.element).hasText('false'); + }); + + test('one arg with precision (comparisonDate, precision)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-same-or-before '2011-10-19' precision='year'}}`); + assert.dom(this.element).hasText('false'); + }); + + test('two args (evaluatedDate, comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-same-or-before '2010-10-20' '2011-10-19'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args with precision (evaluatedDate, comparisonDate, precision)', async function (assert) { + assert.expect(1); + + await render( + hbs`{{is-same-or-before '2010-12-20' '2010-12-19' precision='year'}}`, + ); + assert.dom(this.element).hasText('true'); + }); + + test('can be called with null when allow-empty is set to true', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{is-same-or-before null allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/is-same-test.js b/test-app-5.x/tests/unit/helpers/is-same-test.js new file mode 100644 index 00000000..aca42c7e --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/is-same-test.js @@ -0,0 +1,53 @@ +import EmberObject from '@ember/object'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('is-same', function (hooks) { + setupRenderingTest(hooks); + + test('one arg (comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-same '2011-10-19'}}`); + assert.dom(this.element).hasText('false'); + }); + + test('one arg with precision (comparisonDate, precision)', async function (assert) { + assert.expect(1); + + const today = new Date(); + const date = `${today.getFullYear()}-10-19`; + const context = EmberObject.create({ + date: date, + }); + this.set('context', context); + + await render(hbs`{{is-same this.context.date precision='year'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args (evaluatedDate, comparisonDate)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-same '2010-10-20' '2010-10-20'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('two args with precision (evaluatedDate, comparisonDate, precision)', async function (assert) { + assert.expect(1); + + await render(hbs`{{is-same '2010-10-20' '2010-12-19' precision='year'}}`); + assert.dom(this.element).hasText('true'); + }); + + test('can be called with null when allow-empty is set to true', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{is-same null allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/moment-add-test.js b/test-app-5.x/tests/unit/helpers/moment-add-test.js new file mode 100644 index 00000000..ebaae5da --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/moment-add-test.js @@ -0,0 +1,88 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-add', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg adds duration', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const duration = { days: 3 }; + this.set('duration', duration); + const expectedString = momentService + .moment() + .add(duration) + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-add this.duration}}`); + //assert.ok(this.$().text().match()); + assert.dom(this.element).hasText(new RegExp(expectedString)); + }); + + test('two args with number and string', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const number = 3; + const precision = 'days'; + this.setProperties({ + number, + precision, + }); + const expectedString = momentService + .moment() + .add(number, precision) + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-add this.number this.precision}}`); + assert.dom(this.element).hasText(new RegExp(expectedString)); + }); + + test('two args with date and duration', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const duration = { days: 3 }; + this.set('duration', duration); + const expectedString = momentService + .moment('2016-06-01') + .add(duration) + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-add '2016-06-01' this.duration}}`); + assert.dom(this.element).hasText(new RegExp(expectedString)); + }); + + test('one arg with precision', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const number = 3; + this.set('number', number); + const expectedString = momentService + .moment() + .add(number, 'days') + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-add this.number precision='days'}}`); + assert.dom(this.element).hasText(new RegExp(expectedString)); + }); + + test('two args with precision', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const number = 3; + this.set('number', number); + const expectedString = momentService + .moment('2016-06-01') + .add(number, 'days') + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-add '2016-06-01' this.number precision='days'}}`); + assert.dom(this.element).hasText(new RegExp(expectedString)); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/moment-calendar-test.js b/test-app-5.x/tests/unit/helpers/moment-calendar-test.js new file mode 100644 index 00000000..87dc2111 --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/moment-calendar-test.js @@ -0,0 +1,135 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +import date from '../../helpers/date'; + +module('moment-calendar', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg (date)', async function (assert) { + assert.expect(1); + + this.set('date', date(date(0))); + await render(hbs`{{moment-calendar this.date}}`); + assert.dom(this.element).hasText('12/31/1969'); + }); + + test('two args (date, referenceDate)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + date: momentService.moment('2013-01-01T02:30:26Z'), + referenceDate: momentService.moment('2013-01-01T12:00:00Z'), + }); + + await render( + hbs`{{moment-calendar this.date this.referenceDate timeZone='America/New_York'}}`, + ); + assert.dom(this.element).hasText('Yesterday at 9:30 PM'); + }); + + test('two args (date, referenceDate) with formats', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + date: momentService.moment('2013-01-01T02:30:26Z'), + referenceDate: momentService.moment('2013-01-01T12:00:00Z'), + formats: { + sameDay: '[Today]', + nextDay: '[Tomorrow]', + nextWeek: 'dddd', + lastDay: '[Yesterday]', + lastWeek: '[Last] dddd', + sameElse: 'DD/MM/YYYY', + }, + }); + + await render( + hbs`{{moment-calendar this.date this.referenceDate this.formats timeZone='America/New_York'}}`, + ); + assert.dom().hasText('Yesterday'); + }); + + test('can pass individual formats', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + date: momentService.moment('2013-01-01T02:30:26Z'), + referenceDate: momentService.moment('2013-01-01T12:00:00Z'), + lastDay: '[Yesterday!]', + }); + + await render( + hbs`{{moment-calendar this.date this.referenceDate lastDay=this.lastDay timeZone='America/New_York'}}`, + ); + assert.dom(this.element).hasText('Yesterday!'); + }); + + test('can use a combination of hash options and positional params', async function (assert) { + assert.expect(2); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + date: momentService.moment('2013-01-01T02:30:26Z'), + referenceDate: momentService.moment('2013-01-01T12:00:00Z'), + formats: { + sameDay: '[Today!]', + sameElse: 'DD/MM/YYYY', + }, + }); + + await render( + hbs`{{moment-calendar this.date this.referenceDate this.formats lastDay='[YESTERDAY]' timeZone='America/New_York'}}`, + ); + + assert.strictEqual( + Object.keys(this.formats).length, + 2, + 'formats object shape does not change', + ); + assert.dom(this.element).hasText('YESTERDAY'); + }); + + test('with es locale', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + date: momentService.moment('2013-01-01T08:30:26Z'), + referenceDate: momentService.moment('2013-01-01T12:00:00Z'), + }); + + await render( + hbs`{{moment-calendar this.date this.referenceDate locale="es" timeZone='America/New_York'}}`, + ); + assert.dom(this.element).hasText('hoy a las 3:30'); + }); + + test('can inline timeZone (Sydney)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + date: momentService.moment('2013-01-01T08:30:26Z'), + referenceDate: momentService.moment('2013-01-01T12:00:00Z'), + }); + + await render( + hbs`{{moment-calendar this.date this.referenceDate timeZone='Australia/Sydney'}}`, + ); + + assert + .dom(this.element) + .hasText('Today at 7:30 PM', 'Australia is 11 hours ahead of UTC'); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/moment-diff-test.js b/test-app-5.x/tests/unit/helpers/moment-diff-test.js new file mode 100644 index 00000000..bc6b9ff8 --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/moment-diff-test.js @@ -0,0 +1,75 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-diff', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('two args with (dateA, dateB)', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: momentService.moment('2017-01-10'), + dateB: momentService.moment('2017-01-15'), + }); + + await render(hbs`{{moment-diff this.dateA this.dateB}}`); + assert.dom(this.element).hasText('432000000'); + }); + + test('two args with a moment and a string (dateMoment, dateString)', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateMoment: momentService.moment('2017-01-10'), + dateString: '2017-01-15', + }); + + await render(hbs`{{moment-diff this.dateMoment this.dateString}}`); + assert.dom(this.element).hasText('432000000'); + }); + + test('two args with (dateA, dateB) and expect a negative result', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: momentService.moment('2017-01-15'), + dateB: momentService.moment('2017-01-10'), + }); + + await render(hbs`{{moment-diff this.dateA this.dateB}}`); + assert.dom(this.element).hasText('-432000000'); + }); + + test('two args with precision (dateA, dateB, precision)', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().add(5, 'day'), + }); + + await render(hbs`{{moment-diff this.dateA this.dateB precision='day'}}`); + assert.dom().hasText('5'); + }); + + test('two args with precision and float (dateA, dateB, precision, float)', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().add(6, 'month'), + }); + + await render( + hbs`{{moment-diff this.dateA this.dateB precision='year' float=true}}`, + ); + assert.dom().containsText('.5'); // good ol' rounding error + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/moment-duration-test.js b/test-app-5.x/tests/unit/helpers/moment-duration-test.js new file mode 100644 index 00000000..e1e53fcd --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/moment-duration-test.js @@ -0,0 +1,99 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-duration', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg (ms)', async function (assert) { + assert.expect(1); + + this.set('date', 86400000); + await render(hbs`{{moment-duration this.date}}`); + assert.dom(this.element).hasText('a day'); + }); + + test('one arg (empty string)', async function (assert) { + assert.expect(1); + + this.set('date', ''); + await render(hbs`{{moment-duration this.date}}`); + assert.dom(this.element).hasText('a few seconds'); + }); + + test('one arg (object)', async function (assert) { + assert.expect(1); + + this.set('date', { + seconds: 2, + minutes: 2, + hours: 2, + days: 2, + weeks: 2, + months: 2, + years: 2, + }); + + await render(hbs`{{moment-duration this.date}}`); + assert.dom(this.element).hasText('2 years'); + }); + + test('one arg (string)', async function (assert) { + assert.expect(1); + + this.set('date', '23:59:59'); + await render(hbs`{{moment-duration this.date}}`); + assert.dom(this.element).hasText('a day'); + }); + + test('two args (value, units) - minute', async function (assert) { + assert.expect(1); + + this.setProperties({ + unit: 'minutes', + date: 1, + }); + + await render(hbs`{{moment-duration this.date this.unit}}`); + + assert.dom(this.element).hasText('a minute'); + }); + + test('two args (value, units) - day', async function (assert) { + assert.expect(1); + + this.setProperties({ + unit: 'day', + date: 1, + }); + + await render(hbs`{{moment-duration this.date this.unit}}`); + assert.dom(this.element).hasText('a day'); + }); + + test('two args (value, units) - empty value', async function (assert) { + assert.expect(1); + + this.setProperties({ + unit: 'minutes', + date: null, + }); + + await render(hbs`{{moment-duration this.date this.unit}}`); + assert.dom(this.element).hasText('a few seconds'); + }); + + test('can inline a locale instead of using global locale', async function (assert) { + assert.expect(1); + + this.set('date', 86400000); + await render(hbs`{{moment-duration this.date locale='es'}}`); + assert.dom(this.element).hasText('un día'); // note: that's not an `i` in día + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/moment-format-test.js b/test-app-5.x/tests/unit/helpers/moment-format-test.js new file mode 100644 index 00000000..bfb4ed38 --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/moment-format-test.js @@ -0,0 +1,134 @@ +import EmberObject from '@ember/object'; +import { run } from '@ember/runloop'; +import { settled } from '@ember/test-helpers'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +import date from '../../helpers/date'; + +module('moment-format', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg (date)', async function (assert) { + assert.expect(1); + + this.set('date', date(date(0))); + await render(hbs`{{moment-format this.date}}`); + assert.dom(this.element).hasText('Wednesday, December 31, 1969 7:00 PM'); + }); + + test('updating default format recomputes moment-format', async function (assert) { + assert.expect(2); + + this.set('date', date(date(0))); + await render(hbs`{{moment-format this.date}}`); + + const service = this.owner.lookup('service:moment'); + + assert.dom(this.element).hasText('Wednesday, December 31, 1969 7:00 PM'); + + service.set('defaultFormat', 'DD.MM.YYYY'); + await settled(); + + assert.dom(this.element).hasText('31.12.1969'); + }); + + test('two args (date, inputFormat)', async function (assert) { + assert.expect(1); + + this.setProperties({ + format: 'MMMM D, YYYY', + date: date(Date.parse('2011-10-10T14:48:00-05:00')), + }); + + await render(hbs`{{moment-format this.date this.format}}`); + assert.dom(this.element).hasText('October 10, 2011'); + }); + + test('three args (date, outputFormat, inputFormat)', async function (assert) { + assert.expect(1); + + this.setProperties({ + inputFormat: 'M/D/YY', + outputFormat: 'MMMM D, YYYY', + date: '5/3/10', + }); + + await render( + hbs`{{moment-format this.date this.outputFormat this.inputFormat}}`, + ); + assert.dom(this.element).hasText('May 3, 2010'); + }); + + test('change date input and change is reflected by bound helper', async function (assert) { + assert.expect(2); + + const context = EmberObject.create({ + date: date(0), + }); + + this.set('context', context); + + await render(hbs`{{moment-format this.context.date}}`); + assert.dom(this.element).hasText('Wednesday, December 31, 1969 7:00 PM'); + + run(function () { + context.set('date', date(60 * 60 * 24)); + }); + + assert.dom(this.element).hasText('Wednesday, December 31, 1969 7:01 PM'); + }); + + test('can inline a locale instead of using global locale', async function (assert) { + assert.expect(1); + this.set('date', date(date(0))); + + await render(hbs`{{moment-format this.date 'LLLL' locale='es'}}`); + assert + .dom(this.element) + .hasText('miércoles, 31 de diciembre de 1969 19:00'); + }); + + test('can inline timeZone (New York)', async function (assert) { + assert.expect(1); + + this.set('date', 0); + await render( + hbs`{{moment-format this.date 'LLLL' timeZone='America/New_York'}}`, + ); + assert.dom(this.element).hasText('Wednesday, December 31, 1969 7:00 PM'); + }); + + test('can inline timeZone (Los Angeles)', async function (assert) { + assert.expect(1); + + this.set('date', 0); + await render( + hbs`{{moment-format this.date 'LLLL' timeZone='America/Los_Angeles'}}`, + ); + assert.dom(this.element).hasText('Wednesday, December 31, 1969 4:00 PM'); + }); + + test('can be called with null when allow-empty is set to true', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{moment-format null allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); + + test('can be called using subexpression', async function (assert) { + assert.expect(1); + + this.set('date', date(0)); + await render(hbs`{{moment-format this.date (get-format 'global-format')}}`); + assert.dom(this.element).hasText('12/31/1969'); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/moment-from-now-test.js b/test-app-5.x/tests/unit/helpers/moment-from-now-test.js new file mode 100644 index 00000000..236f63f3 --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/moment-from-now-test.js @@ -0,0 +1,104 @@ +import EmberObject from '@ember/object'; +import { run } from '@ember/runloop'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-from-now', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg (date)', async function (assert) { + assert.expect(1); + + const threeDaysAgo = new Date(); + threeDaysAgo.setDate(threeDaysAgo.getDate() - 3); + + const context = EmberObject.create({ + date: threeDaysAgo, + }); + + this.set('context', context); + + await render(hbs`{{moment-from-now this.context.date}}`); + assert.dom(this.element).hasText('3 days ago'); + }); + + test('one arg (dateA, hideAffix=boolean)', async function (assert) { + assert.expect(2); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: momentService.moment().add(3, 'day'), + }); + + await render(hbs`{{moment-to-now this.dateA hideAffix=true}}`); + assert.dom(this.element).hasText('3 days'); + await render(hbs`{{moment-to-now this.dateA hideAffix=false}}`); + assert.dom(this.element).hasText('3 days ago'); + }); + + test('two args (date, inputFormat)', async function (assert) { + assert.expect(1); + + const threeDaysAgo = new Date(); + threeDaysAgo.setDate(threeDaysAgo.getDate() - 3); + + this.setProperties({ + inputFormat: 'LLLL', + date: threeDaysAgo, + }); + + await render(hbs`{{moment-from-now this.date this.inputFormat}}`); + assert.dom(this.element).hasText('3 days ago'); + }); + + test('change date input and change is reflected by bound helper', async function (assert) { + assert.expect(2); + + const momentService = this.owner.lookup('service:moment'); + const context = EmberObject.create({ + date: momentService.moment().subtract(1, 'hour'), + }); + + this.set('context', context); + + await render(hbs`{{moment-from-now this.context.date}}`); + assert.dom(this.element).hasText('an hour ago'); + + run(function () { + context.set('date', momentService.moment().subtract(2, 'hours')); + }); + + assert.dom(this.element).hasText('2 hours ago'); + }); + + test('can inline a locale instead of using global locale', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + + this.set('date', momentService.moment().subtract(1, 'hour')); + await render(hbs`{{moment-from-now this.date locale='es'}}`); + assert.dom(this.element).hasText('hace una hora'); + }); + + test('can be called with null', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{moment-from-now this.date allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); + + test('localize arabic - issue 239', async function (assert) { + this.set('date', new Date()); + await render(hbs`{{moment-from-now this.date locale='ar' hideAffix=true}}`); + assert.dom(this.element).hasText('ثانية واحدة'); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/moment-from-test.js b/test-app-5.x/tests/unit/helpers/moment-from-test.js new file mode 100644 index 00000000..005bf194 --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/moment-from-test.js @@ -0,0 +1,76 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-from', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg (date)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + + this.set('date', momentService.moment().add(3, 'day')); + + await render(hbs`{{moment-from this.date}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('two args (dateA, dateB)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().add(3, 'day'), + }); + + await render(hbs`{{moment-from this.dateB this.dateA}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('two args (dateA, dateB, hideAffix=boolean)', async function (assert) { + assert.expect(2); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().add(3, 'day'), + }); + + await render(hbs`{{moment-from this.dateB this.dateA hideAffix=true}}`); + assert.dom(this.element).hasText('3 days'); + await render(hbs`{{moment-from this.dateB this.dateA hideAffix=false}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('three args (dateA, dateB, boolean)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().subtract(3, 'day'), + }); + + await render(hbs`{{moment-from this.dateA this.dateB true}}`); + assert.dom(this.element).hasText('3 days'); + }); + + test('can inline a locale', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.set('dateA', momentService.moment()); + this.set('dateB', momentService.moment().subtract(2, 'day')); + + await render(hbs`{{moment-from this.dateA this.dateB locale='es'}}`); + assert.dom(this.element).hasText('en 2 días'); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/moment-subtract-test.js b/test-app-5.x/tests/unit/helpers/moment-subtract-test.js new file mode 100644 index 00000000..f7adf92e --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/moment-subtract-test.js @@ -0,0 +1,89 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-subtract', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg subtracts duration', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const duration = { days: 3 }; + this.set('duration', duration); + const expectedString = momentService + .moment() + .subtract(duration) + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-subtract this.duration}}`); + assert.dom().containsText(expectedString); + }); + + test('two args with number and string', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const number = 3; + const precision = 'days'; + this.setProperties({ + number, + precision, + }); + const expectedString = momentService + .moment() + .subtract(number, precision) + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-subtract this.number this.precision}}`); + assert.dom().containsText(expectedString); + }); + + test('two args with date and duration', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const duration = { days: 3 }; + this.set('duration', duration); + const expectedString = momentService + .moment('2016-06-01') + .subtract(duration) + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-subtract '2016-06-01' this.duration}}`); + assert.dom().containsText(expectedString); + }); + + test('one arg with precision', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const number = 3; + this.set('number', number); + const expectedString = momentService + .moment() + .subtract(number, 'days') + .format('ddd MMM DD YYYY'); + + await render(hbs`{{moment-subtract this.number precision='days'}}`); + assert.dom().containsText(expectedString); + }); + + test('two args with precision', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + const number = 3; + this.set('number', number); + const expectedString = momentService + .moment('2016-06-01') + .subtract(number, 'days') + .format('ddd MMM DD YYYY'); + + await render( + hbs`{{moment-subtract '2016-06-01' this.number precision='days'}}`, + ); + assert.dom().containsText(expectedString); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/moment-to-now-test.js b/test-app-5.x/tests/unit/helpers/moment-to-now-test.js new file mode 100644 index 00000000..7c63615d --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/moment-to-now-test.js @@ -0,0 +1,106 @@ +import EmberObject from '@ember/object'; +import { run } from '@ember/runloop'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-to-now', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg (date)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: momentService.moment().subtract(3, 'day'), + }); + + await render(hbs`{{moment-to-now this.dateA}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('one arg (date, hideAffix=boolean)', async function (assert) { + assert.expect(2); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + date: momentService.moment().subtract(3, 'day'), + }); + + await render(hbs`{{moment-to-now this.date hideAffix=true}}`); + assert.dom(this.element).hasText('3 days'); + await render(hbs`{{moment-to-now this.date hideAffix=false}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('two args (date, inputFormat)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + format: 'LLLL', + date: momentService.moment().subtract(3, 'day'), + }); + + await render(hbs`{{moment-to-now this.date this.format}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('change date input and change is reflected by bound helper', async function (assert) { + assert.expect(2); + + const momentService = this.owner.lookup('service:moment'); + const context = EmberObject.create({ + date: momentService.moment().subtract(1, 'hour'), + }); + + this.set('context', context); + await render(hbs`{{moment-to-now this.context.date}}`); + assert.dom(this.element).hasText('in an hour'); + + run(function () { + context.set('date', momentService.moment().subtract(2, 'hour')); + }); + + assert.dom(this.element).hasText('in 2 hours'); + }); + + test('can inline a locale instead of using global locale', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.set('date', momentService.moment().subtract(1, 'hour')); + await render(hbs`{{moment-to-now this.date locale='es'}}`); + assert.dom(this.element).hasText('en una hora'); + }); + + test('can be called with null', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{moment-to-now this.date allow-empty=true}}`); + assert.dom(this.element).hasText(''); + }); + + test('can be called with null using global config option', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{moment-to-now this.date}}`); + assert.dom(this.element).hasText(''); + }); + + test('unable to called with null overriding global config option', async function (assert) { + assert.expect(1); + + this.set('date', null); + await render(hbs`{{moment-to-now this.date allow-empty=false}}`); + assert.dom(this.element).hasText('Invalid date'); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/moment-to-test.js b/test-app-5.x/tests/unit/helpers/moment-to-test.js new file mode 100644 index 00000000..bacb90d0 --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/moment-to-test.js @@ -0,0 +1,75 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('moment-to', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('one arg (date)', async function (assert) { + assert.expect(1); + const momentService = this.owner.lookup('service:moment'); + + this.set('date', momentService.moment().subtract(3, 'day')); + + await render(hbs`{{moment-to this.date}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('two args (dateA, dateB)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().subtract(3, 'day'), + }); + + await render(hbs`{{moment-to this.dateB this.dateA}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('two args (dateA, dateB, hideAffix=boolean)', async function (assert) { + assert.expect(2); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().add(3, 'day'), + }); + + await render(hbs`{{moment-to this.dateA this.dateB hideAffix=true}}`); + assert.dom(this.element).hasText('3 days'); + await render(hbs`{{moment-to this.dateA this.dateB hideAffix=false}}`); + assert.dom(this.element).hasText('in 3 days'); + }); + + test('three args (dateA, dateB, boolean)', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.setProperties({ + dateA: new Date(), + dateB: momentService.moment().add(3, 'day'), + }); + + await render(hbs`{{moment-to this.dateA this.dateB true}}`); + assert.dom(this.element).hasText('3 days'); + }); + + test('can inline a locale', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + this.set('dateA', momentService.moment()); + this.set('dateB', momentService.moment().add(2, 'day')); + + await render(hbs`{{moment-to this.dateA this.dateB locale='es'}}`); + assert.dom(this.element).hasText('en 2 días'); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/now-test.js b/test-app-5.x/tests/unit/helpers/now-test.js new file mode 100644 index 00000000..273c91eb --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/now-test.js @@ -0,0 +1,45 @@ +import moment from 'moment-timezone'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +let now = moment.now; +let momentFromService; + +module('now', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.moment = this.owner.lookup('service:moment'); + this.moment.changeLocale('en'); + momentFromService = this.moment.moment; + }); + + hooks.afterEach(function () { + moment.now = now; + this.moment.now = now; + this.moment.moment = momentFromService; + }); + + test('returns the result of moment.now', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const current = momentService.moment('20111031'); + moment.now = () => current; + await render(hbs`{{moment-format (now) 'YYYYMMDD'}}`); + assert.dom(this.element).hasText('20111031'); + }); + + test('returns the result of this.moment.now', async function (assert) { + assert.expect(1); + + const momentService = this.owner.lookup('service:moment'); + const current = momentService.moment('20011031'); + this.moment.moment = () => current; + await render(hbs`{{moment-format (now) 'YYYYMMDD'}}`); + assert.dom().hasText('20011031'); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/unix-test.js b/test-app-5.x/tests/unit/helpers/unix-test.js new file mode 100644 index 00000000..ce8f3280 --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/unix-test.js @@ -0,0 +1,22 @@ +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +module('unix', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.owner.lookup('service:moment').changeLocale('en'); + }); + + test('returns the result of moment.unix', async function (assert) { + assert.expect(1); + + await render( + hbs`{{moment-format (unix 946684799) 'YYYYMMDD' timeZone='America/Los_Angeles'}}`, + ); + assert.dom(this.element).hasText('19991231'); + }); +}); diff --git a/test-app-5.x/tests/unit/helpers/utc-test.js b/test-app-5.x/tests/unit/helpers/utc-test.js new file mode 100644 index 00000000..d12d3e27 --- /dev/null +++ b/test-app-5.x/tests/unit/helpers/utc-test.js @@ -0,0 +1,68 @@ +import moment from 'moment-timezone'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; + +import { render } from '@ember/test-helpers'; + +let utc = moment.utc; + +module('utc', function (hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function () { + this.moment = this.owner.lookup('service:moment'); + this.moment.changeLocale('en'); + }); + + hooks.afterEach(function () { + moment.utc = utc; + this.moment.utc = utc; + }); + + test('returns the result of moment.utc', async function (assert) { + assert.expect(1); + + const timeStr = '2001-10-31T13:24:56'; + const fmtStr = 'YYYY-MM-DDTHH:mm:ss'; + const momentService = this.owner.lookup('service:moment'); + const current = momentService.utc(timeStr, fmtStr); + moment.utc = () => current; + await render(hbs`{{moment-format (utc) 'YYYY-MM-DDTHH:mm:ss'}}`); + assert.dom(this.element).hasText(timeStr); + }); + + test('returns the result of this.moment.utc', async function (assert) { + assert.expect(1); + + const timeStr = '2001-10-31T13:24:56'; + const fmtStr = 'YYYY-MM-DDTHH:mm:ss'; + const momentService = this.owner.lookup('service:moment'); + const current = momentService.utc(timeStr, fmtStr); + this.moment.utc = () => current; + await render(hbs`{{moment-format (utc) 'YYYY-MM-DDTHH:mm:ss'}}`); + assert.dom().hasText(timeStr); + }); + + test('utc of existing moment', async function (assert) { + assert.expect(2); + + const utcTimeStr = '2001-10-31T13:24:56 +00:00'; + const estTimeStr = '2001-10-31T08:24:56 -05:00'; + const fmtStr = 'YYYY-MM-DDTHH:mm:ss Z'; + const momentService = this.owner.lookup('service:moment'); + const estValue = momentService.moment(estTimeStr, fmtStr); + this.set('estValue', estValue); + const utcValue = momentService.utc(utcTimeStr, fmtStr); + this.set('utcValue', utcValue); + await render( + hbs`{{moment-format (utc this.estValue) 'YYYY-MM-DDTHH:mm:ss Z'}}`, + ); + assert.dom(this.element).hasText(utcTimeStr); + + await render( + hbs`{{moment-format (utc this.utcValue) 'YYYY-MM-DDTHH:mm:ss Z'}}`, + ); + assert.dom(this.element).hasText(utcTimeStr); + }); +}); diff --git a/test-app/.npmignore b/test-app/.npmignore deleted file mode 100644 index 7d2d7af9..00000000 --- a/test-app/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -# this whole test-app is unpublished -* \ No newline at end of file diff --git a/test-app/scenarios.js b/test-app/scenarios.js deleted file mode 100644 index a0e15b8a..00000000 --- a/test-app/scenarios.js +++ /dev/null @@ -1,111 +0,0 @@ -const { Scenarios } = require('scenario-tester'); -const { module: Qmodule, test } = require('qunit'); - -Scenarios.fromDir(__dirname) - .expand({ - lts_3_16, - lts_3_20, - lts_3_24, - lts_3_28, - release, - beta, - canary, - embroider, - }) - .forEachScenario((scenario) => { - Qmodule(scenario.name, function (hooks) { - let app; - - hooks.before(async () => { - app = await scenario.prepare(); - }); - - test(`pnpm test`, async function (assert) { - let result = await app.execute('pnpm test:ember'); - assert.equal(result.exitCode, 0, result.output); - }); - }); - }); - -async function lts_3_16(project) { - project.linkDevDependency('ember-cli', { - baseDir: __dirname, - resolveName: 'ember-cli-3.16', - }); - project.linkDevDependency('ember-source', { - baseDir: __dirname, - resolveName: 'ember-source-3.16', - }); -} - -async function lts_3_20(project) { - project.linkDevDependency('ember-cli', { - baseDir: __dirname, - resolveName: 'ember-cli-3.20', - }); - project.linkDevDependency('ember-source', { - baseDir: __dirname, - resolveName: 'ember-source-3.20', - }); -} - -async function lts_3_24(project) { - project.linkDevDependency('ember-cli', { - baseDir: __dirname, - resolveName: 'ember-cli-3.24', - }); - project.linkDevDependency('ember-source', { - baseDir: __dirname, - resolveName: 'ember-source-3.24', - }); -} - -async function lts_3_28(project) { - project.linkDevDependency('ember-cli', { - baseDir: __dirname, - }); - project.linkDevDependency('ember-source', { - baseDir: __dirname, - }); -} - -async function release(project) { - project.linkDevDependency('ember-cli', { - baseDir: __dirname, - resolveName: 'ember-cli-latest', - }); - project.linkDevDependency('ember-source', { - baseDir: __dirname, - resolveName: 'ember-source-latest', - }); -} - -async function beta(project) { - project.linkDevDependency('ember-cli', { - baseDir: __dirname, - resolveName: 'ember-cli-beta', - }); - project.linkDevDependency('ember-source', { - baseDir: __dirname, - resolveName: 'ember-source-beta', - }); -} - -async function canary(project) { - project.linkDevDependency('ember-source', { - baseDir: __dirname, - resolveName: 'ember-source-canary', - }); -} - -async function embroider(project) { - project.linkDevDependency('@embroider/core', { - baseDir: __dirname, - }); - project.linkDevDependency('@embroider/compat', { - baseDir: __dirname, - }); - project.linkDevDependency('@embroider/webpack', { - baseDir: __dirname, - }); -} diff --git a/test-app/tests/helpers/resolver.js b/test-app/tests/helpers/resolver.js deleted file mode 100644 index 319b45fc..00000000 --- a/test-app/tests/helpers/resolver.js +++ /dev/null @@ -1,11 +0,0 @@ -import Resolver from '../../resolver'; -import config from '../../config/environment'; - -const resolver = Resolver.create(); - -resolver.namespace = { - modulePrefix: config.modulePrefix, - podModulePrefix: config.podModulePrefix, -}; - -export default resolver;