From 63ae22884f26b416eeeea04b9d924d9dc579a3ea Mon Sep 17 00:00:00 2001 From: Trung Vo Date: Thu, 11 Apr 2024 23:00:34 +0800 Subject: [PATCH] feat: add view-transition library --- libs/shared/view-transition/.eslintrc.json | 33 +++++ libs/shared/view-transition/README.md | 7 + libs/shared/view-transition/jest.config.ts | 22 ++++ libs/shared/view-transition/project.json | 20 +++ libs/shared/view-transition/src/index.ts | 1 + .../src/lib/current-transition.service.ts | 0 libs/shared/view-transition/src/test-setup.ts | 8 ++ libs/shared/view-transition/tsconfig.json | 29 ++++ libs/shared/view-transition/tsconfig.lib.json | 12 ++ .../shared/view-transition/tsconfig.spec.json | 11 ++ libs/web/shell/feature/src/index.ts | 1 - .../shell/feature/src/lib/web-shell.module.ts | 2 +- package.json | 7 +- tsconfig.base.json | 3 +- yarn.lock | 124 +++++++++++++++++- 15 files changed, 272 insertions(+), 8 deletions(-) create mode 100644 libs/shared/view-transition/.eslintrc.json create mode 100644 libs/shared/view-transition/README.md create mode 100644 libs/shared/view-transition/jest.config.ts create mode 100644 libs/shared/view-transition/project.json create mode 100644 libs/shared/view-transition/src/index.ts rename libs/{web/shell/feature => shared/view-transition}/src/lib/current-transition.service.ts (100%) create mode 100644 libs/shared/view-transition/src/test-setup.ts create mode 100644 libs/shared/view-transition/tsconfig.json create mode 100644 libs/shared/view-transition/tsconfig.lib.json create mode 100644 libs/shared/view-transition/tsconfig.spec.json diff --git a/libs/shared/view-transition/.eslintrc.json b/libs/shared/view-transition/.eslintrc.json new file mode 100644 index 00000000..b10f9813 --- /dev/null +++ b/libs/shared/view-transition/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "lib", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "lib", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/libs/shared/view-transition/README.md b/libs/shared/view-transition/README.md new file mode 100644 index 00000000..dbead4da --- /dev/null +++ b/libs/shared/view-transition/README.md @@ -0,0 +1,7 @@ +# view-transition + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test view-transition` to execute the unit tests. diff --git a/libs/shared/view-transition/jest.config.ts b/libs/shared/view-transition/jest.config.ts new file mode 100644 index 00000000..b763210a --- /dev/null +++ b/libs/shared/view-transition/jest.config.ts @@ -0,0 +1,22 @@ +/* eslint-disable */ +export default { + displayName: 'view-transition', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + coverageDirectory: '../../../coverage/libs/shared/view-transition', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$' + } + ] + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment' + ] +}; diff --git a/libs/shared/view-transition/project.json b/libs/shared/view-transition/project.json new file mode 100644 index 00000000..735ac568 --- /dev/null +++ b/libs/shared/view-transition/project.json @@ -0,0 +1,20 @@ +{ + "name": "view-transition", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/shared/view-transition/src", + "prefix": "lib", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "libs/shared/view-transition/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint" + } + } +} diff --git a/libs/shared/view-transition/src/index.ts b/libs/shared/view-transition/src/index.ts new file mode 100644 index 00000000..f67abdab --- /dev/null +++ b/libs/shared/view-transition/src/index.ts @@ -0,0 +1 @@ +export * from './lib/current-transition.service'; diff --git a/libs/web/shell/feature/src/lib/current-transition.service.ts b/libs/shared/view-transition/src/lib/current-transition.service.ts similarity index 100% rename from libs/web/shell/feature/src/lib/current-transition.service.ts rename to libs/shared/view-transition/src/lib/current-transition.service.ts diff --git a/libs/shared/view-transition/src/test-setup.ts b/libs/shared/view-transition/src/test-setup.ts new file mode 100644 index 00000000..d99945d0 --- /dev/null +++ b/libs/shared/view-transition/src/test-setup.ts @@ -0,0 +1,8 @@ +// @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment +globalThis.ngJest = { + testEnvironmentOptions: { + errorOnUnknownElements: true, + errorOnUnknownProperties: true + } +}; +import 'jest-preset-angular/setup-jest'; diff --git a/libs/shared/view-transition/tsconfig.json b/libs/shared/view-transition/tsconfig.json new file mode 100644 index 00000000..5cf0a165 --- /dev/null +++ b/libs/shared/view-transition/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "target": "es2022", + "useDefineForClassFields": false, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "extends": "../../../tsconfig.base.json", + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/libs/shared/view-transition/tsconfig.lib.json b/libs/shared/view-transition/tsconfig.lib.json new file mode 100644 index 00000000..8441346f --- /dev/null +++ b/libs/shared/view-transition/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/libs/shared/view-transition/tsconfig.spec.json b/libs/shared/view-transition/tsconfig.spec.json new file mode 100644 index 00000000..e637bf83 --- /dev/null +++ b/libs/shared/view-transition/tsconfig.spec.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "target": "es2016", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"] +} diff --git a/libs/web/shell/feature/src/index.ts b/libs/web/shell/feature/src/index.ts index ced50b55..373f176e 100644 --- a/libs/web/shell/feature/src/index.ts +++ b/libs/web/shell/feature/src/index.ts @@ -1,2 +1 @@ export * from './lib/web-shell.module'; -export * from './lib/current-transition.service'; diff --git a/libs/web/shell/feature/src/lib/web-shell.module.ts b/libs/web/shell/feature/src/lib/web-shell.module.ts index 85b50c8a..6532853e 100644 --- a/libs/web/shell/feature/src/lib/web-shell.module.ts +++ b/libs/web/shell/feature/src/lib/web-shell.module.ts @@ -24,7 +24,7 @@ import { import { registerLocaleData } from '@angular/common'; import en from '@angular/common/locales/en'; import { extModules } from './build-specifics'; -import { onViewTransitionCreated } from './current-transition.service'; +import { onViewTransitionCreated } from '@angular-spotify/shared/view-transition'; registerLocaleData(en); const rootReducers = { diff --git a/package.json b/package.json index 8d17fea0..988b7ee3 100644 --- a/package.json +++ b/package.json @@ -76,11 +76,15 @@ "@commitlint/config-conventional": "^13.1.0", "@ngneat/svg-generator": "^7.0.3", "@nx/cypress": "18.2.0", + "@nx/eslint": "18.2.0", "@nx/eslint-plugin": "18.2.0", "@nx/jest": "18.2.0", "@nx/js": "18.2.0", "@nx/workspace": "18.2.0", "@schematics/angular": "17.3.2", + "@swc-node/register": "~1.8.0", + "@swc/core": "~1.3.85", + "@swc/helpers": "~0.5.2", "@types/jest": "29.4.4", "@types/lodash-es": "4.17.4", "@types/node": "^18.16.9", @@ -106,8 +110,7 @@ "tailwindcss": "3.3.2", "ts-jest": "29.1.2", "ts-node": "10.9.1", - "typescript": "5.4.3", - "@nx/eslint": "18.2.0" + "typescript": "5.4.3" }, "svgGenerator": { "outputPath": "./libs/web/shared/ui/icon/src/lib/svg", diff --git a/tsconfig.base.json b/tsconfig.base.json index b34c8ec9..7ccd84ef 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -148,7 +148,8 @@ "libs/web/visualizer/data-access/src/index.ts" ], "@angular-spotify/web/visualizer/feature": ["libs/web/visualizer/feature/src/index.ts"], - "@angular-spotify/web/visualizer/ui": ["libs/web/visualizer/ui/src/index.ts"] + "@angular-spotify/web/visualizer/ui": ["libs/web/visualizer/ui/src/index.ts"], + "@angular-spotify/shared/view-transition": ["libs/shared/view-transition/src/index.ts"] } }, "exclude": ["node_modules", "tmp"], diff --git a/yarn.lock b/yarn.lock index beeead5c..4a2584fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3592,6 +3592,119 @@ dependencies: "@sinonjs/commons" "^2.0.0" +"@swc-node/core@^1.12.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@swc-node/core/-/core-1.13.0.tgz#209d70f6371049926915a7d23a502144cdb5cffb" + integrity sha512-lFPD4nmy4ifAOVMChFjwlpXN5KQXvegqeyuzz1KQz42q1lf+cL3Qux1/GteGuZjh8HC+Rj1RdNrHpE/MCfJSTw== + +"@swc-node/register@~1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@swc-node/register/-/register-1.8.0.tgz#3ceb63c5fa333d4fae65e54ce2bc4b99517ab51d" + integrity sha512-8K3589HoBSmVmrEVrtr4K5sWEithpGDzcFGic81OW0A9sZY38IV5EGRODQWCk0SBDyLhaF+pid120vJAtsHo1A== + dependencies: + "@swc-node/core" "^1.12.0" + "@swc-node/sourcemap-support" "^0.4.0" + colorette "^2.0.20" + debug "^4.3.4" + pirates "^4.0.6" + tslib "^2.6.2" + +"@swc-node/sourcemap-support@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@swc-node/sourcemap-support/-/sourcemap-support-0.4.0.tgz#ed6fbe3f9311ebaeebbc15cf4095e38c01bb5a23" + integrity sha512-weuRmYTO+4yOtHtPZHXlPdA1dJJJp3QOoZAFZ6uZidu992F2X5v1fQdnb26xs1o3Ex/e2sYhRyY5R6NGNuoATQ== + dependencies: + source-map-support "^0.5.21" + tslib "^2.6.2" + +"@swc/core-darwin-arm64@1.3.107": + version "1.3.107" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.107.tgz#abac4c19816751de1dcbaab456710ca55e580782" + integrity sha512-47tD/5vSXWxPd0j/ZllyQUg4bqalbQTsmqSw0J4dDdS82MWqCAwUErUrAZPRjBkjNQ6Kmrf5rpCWaGTtPw+ngw== + +"@swc/core-darwin-x64@1.3.107": + version "1.3.107" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.107.tgz#4c0df233ebf293429cd2f10224d6a870a5cc019e" + integrity sha512-hwiLJ2ulNkBGAh1m1eTfeY1417OAYbRGcb/iGsJ+LuVLvKAhU/itzsl535CvcwAlt2LayeCFfcI8gdeOLeZa9A== + +"@swc/core-linux-arm-gnueabihf@1.3.107": + version "1.3.107" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.107.tgz#81004cca4c7554007ea5ac51e276147e958e3e9f" + integrity sha512-I2wzcC0KXqh0OwymCmYwNRgZ9nxX7DWnOOStJXV3pS0uB83TXAkmqd7wvMBuIl9qu4Hfomi9aDM7IlEEn9tumQ== + +"@swc/core-linux-arm64-gnu@1.3.107": + version "1.3.107" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.107.tgz#c01d75df662067fb7805bfdfa66c2f17f2b3185f" + integrity sha512-HWgnn7JORYlOYnGsdunpSF8A+BCZKPLzLtEUA27/M/ZuANcMZabKL9Zurt7XQXq888uJFAt98Gy+59PU90aHKg== + +"@swc/core-linux-arm64-musl@1.3.107": + version "1.3.107" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.107.tgz#5e0c4fe3fcc49a7bb77ffafa680622e53c982e0a" + integrity sha512-vfPF74cWfAm8hyhS8yvYI94ucMHIo8xIYU+oFOW9uvDlGQRgnUf/6DEVbLyt/3yfX5723Ln57U8uiMALbX5Pyw== + +"@swc/core-linux-x64-gnu@1.3.107": + version "1.3.107" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.107.tgz#afb4a656a1717170b2c8b76c9b2349b5077630b4" + integrity sha512-uBVNhIg0ip8rH9OnOsCARUFZ3Mq3tbPHxtmWk9uAa5u8jQwGWeBx5+nTHpDOVd3YxKb6+5xDEI/edeeLpha/9g== + +"@swc/core-linux-x64-musl@1.3.107": + version "1.3.107" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.107.tgz#3f9bce2fe13691be39fddc39bba8558fe6308823" + integrity sha512-mvACkUvzSIB12q1H5JtabWATbk3AG+pQgXEN95AmEX2ZA5gbP9+B+mijsg7Sd/3tboHr7ZHLz/q3SHTvdFJrEw== + +"@swc/core-win32-arm64-msvc@1.3.107": + version "1.3.107" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.107.tgz#5b485e9ce2de6f27ce2fbc1ba8c0b4e98009318d" + integrity sha512-J3P14Ngy/1qtapzbguEH41kY109t6DFxfbK4Ntz9dOWNuVY3o9/RTB841ctnJk0ZHEG+BjfCJjsD2n8H5HcaOA== + +"@swc/core-win32-ia32-msvc@1.3.107": + version "1.3.107" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.107.tgz#1bbe3ce6784b3e4203bf89443c33411c27389b56" + integrity sha512-ZBUtgyjTHlz8TPJh7kfwwwFma+ktr6OccB1oXC8fMSopD0AxVnQasgun3l3099wIsAB9eEsJDQ/3lDkOLs1gBA== + +"@swc/core-win32-x64-msvc@1.3.107": + version "1.3.107" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.107.tgz#c89640b16504ddda1f1faf573a7ed7193dc87485" + integrity sha512-Eyzo2XRqWOxqhE1gk9h7LWmUf4Bp4Xn2Ttb0ayAXFp6YSTxQIThXcT9kipXZqcpxcmDwoq8iWbbf2P8XL743EA== + +"@swc/core@~1.3.85": + version "1.3.107" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.107.tgz#081697224ec3bffa63c33209d242e4f0b2c49e78" + integrity sha512-zKhqDyFcTsyLIYK1iEmavljZnf4CCor5pF52UzLAz4B6Nu/4GLU+2LQVAf+oRHjusG39PTPjd2AlRT3f3QWfsQ== + dependencies: + "@swc/counter" "^0.1.1" + "@swc/types" "^0.1.5" + optionalDependencies: + "@swc/core-darwin-arm64" "1.3.107" + "@swc/core-darwin-x64" "1.3.107" + "@swc/core-linux-arm-gnueabihf" "1.3.107" + "@swc/core-linux-arm64-gnu" "1.3.107" + "@swc/core-linux-arm64-musl" "1.3.107" + "@swc/core-linux-x64-gnu" "1.3.107" + "@swc/core-linux-x64-musl" "1.3.107" + "@swc/core-win32-arm64-msvc" "1.3.107" + "@swc/core-win32-ia32-msvc" "1.3.107" + "@swc/core-win32-x64-msvc" "1.3.107" + +"@swc/counter@^0.1.1", "@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/helpers@~0.5.2": + version "0.5.8" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.8.tgz#65d56b1961487fd99795ffd8c68edb7a591571fb" + integrity sha512-lruDGw3pnfM3wmZHeW7JuhkGQaJjPyiKjxeGhdmfoOT53Ic9qb5JLDNaK2HUdl1zLDeX28H221UvKjfdvSLVMg== + dependencies: + tslib "^2.4.0" + +"@swc/types@^0.1.5": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.6.tgz#2f13f748995b247d146de2784d3eb7195410faba" + integrity sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg== + dependencies: + "@swc/counter" "^0.1.3" + "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" @@ -5387,7 +5500,7 @@ colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== -colorette@^2.0.10, colorette@^2.0.16: +colorette@^2.0.10, colorette@^2.0.16, colorette@^2.0.20: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== @@ -10097,6 +10210,11 @@ pirates@^4.0.1, pirates@^4.0.4: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== +pirates@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + piscina@4.4.0, piscina@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/piscina/-/piscina-4.4.0.tgz#e3af8e5721d8fad08c6ccaf8a64f9f42279efbb5" @@ -11420,7 +11538,7 @@ source-map-support@0.5.19: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@0.5.21, source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@~0.5.20: +source-map-support@0.5.21, source-map-support@^0.5.17, source-map-support@^0.5.21, source-map-support@^0.5.5, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -12079,7 +12197,7 @@ tslib@2.3.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== -tslib@2.6.2: +tslib@2.6.2, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==