diff --git a/packages/angular-query-experimental/ng-package.json b/packages/angular-query-experimental/ng-package.json index af72ebbb7c..2bca41cc0d 100644 --- a/packages/angular-query-experimental/ng-package.json +++ b/packages/angular-query-experimental/ng-package.json @@ -3,7 +3,7 @@ "lib": { "entryFile": "src/index.ts" }, - "allowedNonPeerDependencies": ["@tanstack/query-core", "ngxtension"], + "allowedNonPeerDependencies": ["@tanstack/query-core"], "dest": "build", "deleteDestPath": false } diff --git a/packages/angular-query-experimental/package.json b/packages/angular-query-experimental/package.json index 982461173c..84d43d287c 100644 --- a/packages/angular-query-experimental/package.json +++ b/packages/angular-query-experimental/package.json @@ -43,7 +43,6 @@ }, "dependencies": { "@tanstack/query-core": "workspace:*", - "ngxtension": "^1.6.2", "tslib": "^2.6.2" }, "devDependencies": { diff --git a/packages/angular-query-experimental/src/inject-is-fetching.ts b/packages/angular-query-experimental/src/inject-is-fetching.ts index d1db82e989..b285a7f4db 100644 --- a/packages/angular-query-experimental/src/inject-is-fetching.ts +++ b/packages/angular-query-experimental/src/inject-is-fetching.ts @@ -1,6 +1,6 @@ import { DestroyRef, inject, signal } from '@angular/core' import { type QueryFilters, notifyManager } from '@tanstack/query-core' -import { assertInjector } from 'ngxtension/assert-injector' +import { assertInjector } from './util/assert-injector/assert-injector' import { injectQueryClient } from './inject-query-client' import type { Injector, Signal } from '@angular/core' diff --git a/packages/angular-query-experimental/src/inject-is-mutating.ts b/packages/angular-query-experimental/src/inject-is-mutating.ts index 49039e0535..f1d50ff857 100644 --- a/packages/angular-query-experimental/src/inject-is-mutating.ts +++ b/packages/angular-query-experimental/src/inject-is-mutating.ts @@ -1,6 +1,6 @@ import { DestroyRef, inject, signal } from '@angular/core' import { type MutationFilters, notifyManager } from '@tanstack/query-core' -import { assertInjector } from 'ngxtension/assert-injector' +import { assertInjector } from './util/assert-injector/assert-injector' import { injectQueryClient } from './inject-query-client' import type { Injector, Signal } from '@angular/core' diff --git a/packages/angular-query-experimental/src/inject-mutation.ts b/packages/angular-query-experimental/src/inject-mutation.ts index f31eb638f8..f52118375c 100644 --- a/packages/angular-query-experimental/src/inject-mutation.ts +++ b/packages/angular-query-experimental/src/inject-mutation.ts @@ -1,6 +1,6 @@ import { DestroyRef, computed, effect, inject, signal } from '@angular/core' import { MutationObserver } from '@tanstack/query-core' -import { assertInjector } from 'ngxtension/assert-injector' +import { assertInjector } from './util/assert-injector/assert-injector' import { signalProxy } from './signal-proxy' import { injectQueryClient } from './inject-query-client' import type { DefaultError, QueryClient } from '@tanstack/query-core' diff --git a/packages/angular-query-experimental/src/inject-queries.ts b/packages/angular-query-experimental/src/inject-queries.ts index 15ffb37ea8..cf346bfc3a 100644 --- a/packages/angular-query-experimental/src/inject-queries.ts +++ b/packages/angular-query-experimental/src/inject-queries.ts @@ -1,6 +1,6 @@ import { QueriesObserver, notifyManager } from '@tanstack/query-core' import { DestroyRef, computed, effect, inject, signal } from '@angular/core' -import { assertInjector } from 'ngxtension/assert-injector' +import { assertInjector } from './util/assert-injector/assert-injector' import { injectQueryClient } from './inject-query-client' import type { Injector, Signal } from '@angular/core' import type { diff --git a/packages/angular-query-experimental/src/inject-query-client.ts b/packages/angular-query-experimental/src/inject-query-client.ts index 165af1581d..f72b446a54 100644 --- a/packages/angular-query-experimental/src/inject-query-client.ts +++ b/packages/angular-query-experimental/src/inject-query-client.ts @@ -1,4 +1,4 @@ -import { createNoopInjectionToken } from 'ngxtension/create-injection-token' +import { createNoopInjectionToken } from './util/create-injection-token/create-injection-token' import type { QueryClient } from '@tanstack/query-core' const [injectQueryClient, provideQueryClient, QUERY_CLIENT] = diff --git a/packages/angular-query-experimental/src/inject-query.ts b/packages/angular-query-experimental/src/inject-query.ts index adb06db37a..cfaa1478d3 100644 --- a/packages/angular-query-experimental/src/inject-query.ts +++ b/packages/angular-query-experimental/src/inject-query.ts @@ -1,5 +1,5 @@ import { QueryObserver } from '@tanstack/query-core' -import { assertInjector } from 'ngxtension/assert-injector' +import { assertInjector } from './util/assert-injector/assert-injector' import { injectQueryClient } from './inject-query-client' import { createBaseQuery } from './create-base-query' import type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core' diff --git a/packages/angular-query-experimental/src/util/assert-injector/assert-injector.test.ts b/packages/angular-query-experimental/src/util/assert-injector/assert-injector.test.ts new file mode 100644 index 0000000000..6255437220 --- /dev/null +++ b/packages/angular-query-experimental/src/util/assert-injector/assert-injector.test.ts @@ -0,0 +1,72 @@ +/** + * The code in this file is adapted from NG Extension Platform at https://ngxtension.netlify.app. + * + * Original Author: Chau Tran + * + * NG Extension Platform is an open-source project licensed under the MIT license. + * + * For more information about the original code, see + * https://github.com/nartc/ngxtension-platform + */ + +import { + InjectionToken, + Injector, + inject, + runInInjectionContext, +} from '@angular/core' +import { TestBed } from '@angular/core/testing' +import { assertInjector } from './assert-injector' + +describe(assertInjector.name, () => { + const token = new InjectionToken('token', { + factory: () => 1, + }) + + function injectDummy(injector?: Injector) { + injector = assertInjector(injectDummy, injector) + return runInInjectionContext(injector, () => inject(token)) + } + + function injectDummyTwo(injector?: Injector) { + return assertInjector(injectDummyTwo, injector, () => inject(token) + 1) + } + + it('given no custom injector, when run in injection context, then return value', () => { + TestBed.runInInjectionContext(() => { + const value = injectDummy() + const valueTwo = injectDummyTwo() + expect(value).toEqual(1) + expect(valueTwo).toEqual(2) + }) + }) + + it('given no custom injector, when run outside injection context, then throw', () => { + expect(() => injectDummy()).toThrowError( + /injectDummy\(\) can only be used within an injection context/i, + ) + expect(() => injectDummyTwo()).toThrowError( + /injectDummyTwo\(\) can only be used within an injection context/i, + ) + }) + + it('given a custom injector, when run in that injector context without providing number, then throw', () => { + expect(() => injectDummy(Injector.create({ providers: [] }))).toThrowError( + /No provider for InjectionToken/i, + ) + expect(() => + injectDummyTwo(Injector.create({ providers: [] })), + ).toThrowError(/No provider for InjectionToken/i) + }) + + it('given a custom injector, when run in that injector context and providing number, then return value', () => { + const value = injectDummy( + Injector.create({ providers: [{ provide: token, useValue: 2 }] }), + ) + const valueTwo = injectDummyTwo( + Injector.create({ providers: [{ provide: token, useValue: 2 }] }), + ) + expect(value).toEqual(2) + expect(valueTwo).toEqual(3) + }) +}) diff --git a/packages/angular-query-experimental/src/util/assert-injector/assert-injector.ts b/packages/angular-query-experimental/src/util/assert-injector/assert-injector.ts new file mode 100644 index 0000000000..2511530c2d --- /dev/null +++ b/packages/angular-query-experimental/src/util/assert-injector/assert-injector.ts @@ -0,0 +1,79 @@ +/** + * The code in this file is adapted from NG Extension Platform at https://ngxtension.netlify.app. + * + * Original Author: Chau Tran + * + * NG Extension Platform is an open-source project licensed under the MIT license. + * + * For more information about the original code, see + * https://github.com/nartc/ngxtension-platform + */ + +import { + Injector, + assertInInjectionContext, + inject, + runInInjectionContext, +} from '@angular/core' + +/** + * `assertInjector` extends `assertInInjectionContext` with an optional `Injector` + * After assertion, `assertInjector` runs the `runner` function with the guaranteed `Injector` + * whether it is the default `Injector` within the current **Injection Context** + * or the custom `Injector` that was passed in. + * + * @template {() => any} Runner - Runner is a function that can return anything + * @param {Function} fn - the Function to pass in `assertInInjectionContext` + * @param {Injector | undefined | null} injector - the optional "custom" Injector + * @param {Runner} runner - the runner fn + * @returns {ReturnType} result - returns the result of the Runner + * + * @example + * ```ts + * function injectValue(injector?: Injector) { + * return assertInjector(injectValue, injector, () => 'value'); + * } + * + * injectValue(); // string + * ``` + */ +export function assertInjector any>( + fn: Function, + injector: Injector | undefined | null, + runner: Runner, +): ReturnType +/** + * `assertInjector` extends `assertInInjectionContext` with an optional `Injector` + * After assertion, `assertInjector` returns a guaranteed `Injector` whether it is the default `Injector` + * within the current **Injection Context** or the custom `Injector` that was passed in. + * + * @param {Function} fn - the Function to pass in `assertInInjectionContext` + * @param {Injector | undefined | null} injector - the optional "custom" Injector + * @returns Injector + * + * @example + * ```ts + * function injectDestroy(injector?: Injector) { + * injector = assertInjector(injectDestroy, injector); + * + * return runInInjectionContext(injector, () => { + * // code + * }) + * } + * ``` + */ +export function assertInjector( + fn: Function, + injector: Injector | undefined | null, +): Injector +export function assertInjector( + fn: Function, + injector: Injector | undefined | null, + runner?: () => any, +) { + !injector && assertInInjectionContext(fn) + const assertedInjector = injector ?? inject(Injector) + + if (!runner) return assertedInjector + return runInInjectionContext(assertedInjector, runner) +} diff --git a/packages/angular-query-experimental/src/util/create-injection-token/create-injection-token.test.ts b/packages/angular-query-experimental/src/util/create-injection-token/create-injection-token.test.ts new file mode 100644 index 0000000000..4b7c008fc9 --- /dev/null +++ b/packages/angular-query-experimental/src/util/create-injection-token/create-injection-token.test.ts @@ -0,0 +1,30 @@ +/** + * The code in this file is adapted from NG Extension Platform at https://ngxtension.netlify.app. + * + * Original Author: Chau Tran + * + * NG Extension Platform is an open-source project licensed under the MIT license. + * + * For more information about the original code, see + * https://github.com/nartc/ngxtension-platform + */ + +import { TestBed } from '@angular/core/testing' +import { createNoopInjectionToken } from './create-injection-token' + +describe(createNoopInjectionToken.name, () => { + describe('given an injection token', () => { + const [injectFn, provideFn] = createNoopInjectionToken( + 'noop', + { multi: true }, + ) + it('then work properly', () => { + TestBed.configureTestingModule({ + providers: [provideFn(1), provideFn(() => 2)], + }).runInInjectionContext(() => { + const values = injectFn() + expect(values).toEqual([1, 2]) + }) + }) + }) +}) diff --git a/packages/angular-query-experimental/src/util/create-injection-token/create-injection-token.ts b/packages/angular-query-experimental/src/util/create-injection-token/create-injection-token.ts new file mode 100644 index 0000000000..dc6f237726 --- /dev/null +++ b/packages/angular-query-experimental/src/util/create-injection-token/create-injection-token.ts @@ -0,0 +1,184 @@ +/** + * The code in this file is adapted from NG Extension Platform at https://ngxtension.netlify.app. + * + * Original Author: Chau Tran + * + * NG Extension Platform is an open-source project licensed under the MIT license. + * + * For more information about the original code, see + * https://github.com/nartc/ngxtension-platform + */ + +import { + type EnvironmentProviders, + type FactoryProvider, + type Host, + type InjectOptions, + InjectionToken, + type Injector, + type Optional, + type Provider, + type Self, + type SkipSelf, + type Type, + inject, + runInInjectionContext, +} from '@angular/core' +import { assertInjector } from '../assert-injector/assert-injector' + +type CreateInjectionTokenDep = + | Type + // NOTE: we don't have an AbstractType + | (abstract new (...args: Array) => TTokenType) + | InjectionToken + +type CreateInjectionTokenDeps< + TFactory extends (...args: Array) => any, + TFactoryDeps extends Parameters = Parameters, +> = { + [Index in keyof TFactoryDeps]: + | CreateInjectionTokenDep + | [ + ...modifiers: Array, + token: CreateInjectionTokenDep, + ] +} & { length: TFactoryDeps['length'] } + +type CreateInjectionTokenOptions< + TFactory extends (...args: Array) => any, + TFactoryDeps extends Parameters = Parameters, +> = + // this means TFunction has no parameters + (TFactoryDeps[0] extends undefined + ? { deps?: never } + : { deps: CreateInjectionTokenDeps }) & { + isRoot?: boolean + multi?: boolean + token?: InjectionToken> + extraProviders?: Provider | EnvironmentProviders + } + +type CreateProvideFnOptions< + TFactory extends (...args: Array) => any, + TFactoryDeps extends Parameters = Parameters, +> = Pick< + CreateInjectionTokenOptions, + 'deps' | 'extraProviders' | 'multi' +> + +type InjectFn = { + (): TFactoryReturn + ( + injectOptions: InjectOptions & { optional?: false } & { + injector?: Injector + }, + ): TFactoryReturn + ( + injectOptions: InjectOptions & { injector?: Injector }, + ): TFactoryReturn | null +} + +type ProvideFn< + TNoop extends boolean, + TFactoryReturn, + TReturn = TFactoryReturn extends Array ? Item : TFactoryReturn, +> = (TNoop extends true + ? (value: TReturn | (() => TReturn)) => Provider + : () => Provider) & + (TReturn extends Function + ? (value: TReturn | (() => TReturn), isFunctionValue: boolean) => Provider + : (value: TReturn | (() => TReturn)) => Provider) + +type CreateInjectionTokenReturn< + TFactoryReturn, + TNoop extends boolean = false, +> = [ + InjectFn, + ProvideFn, + InjectionToken, + () => Provider, +] + +function createInjectFn(token: InjectionToken) { + return function ( + this: Function, + { + injector, + ...injectOptions + }: InjectOptions & { injector?: Injector } = {}, + ) { + injector = assertInjector(this, injector) + return runInInjectionContext(injector, () => + inject(token, injectOptions as InjectOptions), + ) + } +} + +function createProvideFn< + TValue, + TFactory extends (...args: Array) => any = ( + ...args: Array + ) => TValue, + TFactoryDeps extends Parameters = Parameters, +>( + token: InjectionToken, + factory: (...args: Array) => TValue, + opts: CreateProvideFnOptions = {}, +) { + const { deps = [], multi = false, extraProviders = [] } = opts + return (value?: TValue | (() => TValue), isFunctionValue = false) => { + let provider: Provider + if (typeof value !== 'undefined') { + // eslint-disable-next-line no-shadow + const factory = + typeof value === 'function' + ? isFunctionValue + ? () => value + : value + : () => value + + provider = { + provide: token, + useFactory: factory, + multi, + } + } else { + provider = { + provide: token, + useFactory: factory, + deps: deps as FactoryProvider['deps'], + multi, + } + } + + return [extraProviders, provider] + } +} + +export function createNoopInjectionToken< + TValue, + TMulti extends boolean = false, + TOptions = Pick< + CreateInjectionTokenOptions<() => void, []>, + 'extraProviders' + > & + (TMulti extends true ? { multi: true } : Record), +>(description: string, options?: TOptions) { + type TReturn = TMulti extends true ? Array : TValue + + const token = + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + (options as CreateInjectionTokenOptions<() => void, []>)?.token || + new InjectionToken(description) + return [ + createInjectFn(token) as CreateInjectionTokenReturn[0], + createProvideFn( + token, + () => null!, + (options || {}) as CreateProvideFnOptions<() => void, []>, + ) as CreateInjectionTokenReturn[1], + token, + // eslint-disable-next-line @typescript-eslint/no-empty-function + () => {}, + ] as CreateInjectionTokenReturn +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ee14f5b9fa..7cde94e829 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1674,9 +1674,6 @@ importers: '@tanstack/query-core': specifier: workspace:* version: link:../query-core - ngxtension: - specifier: ^1.6.2 - version: 1.6.2(@angular/common@17.0.8)(@angular/core@17.0.8)(@use-gesture/vanilla@10.3.0)(rxjs@7.8.1) tslib: specifier: ^2.6.2 version: 2.6.2 @@ -7678,14 +7675,6 @@ packages: - supports-color dev: true - /@nrwl/devkit@17.1.3(nx@17.2.7): - resolution: {integrity: sha512-8HfIY7P3yIYfQ/XKuHoq0GGLA9GpwWtBlI9kPQ0ygjuJ9BkpiGMtQvO6003zs7c6vpc2vNeG+Jmi72+EKvoN5A==} - dependencies: - '@nx/devkit': 17.1.3(nx@17.2.7) - transitivePeerDependencies: - - nx - dev: false - /@nrwl/tao@17.2.7: resolution: {integrity: sha512-06YYR1Ndb+nAJaQuvi2J3bX7i2dStQvDHkT+qprUXKxOrggFcPcs+7e2LwNWKDGdCu4r0qFHPlamj7y5d6qM2Q==} hasBin: true @@ -7696,21 +7685,7 @@ packages: - '@swc-node/register' - '@swc/core' - debug - - /@nx/devkit@17.1.3(nx@17.2.7): - resolution: {integrity: sha512-1Is7ooovg3kdGJ5VdkePulRUDaMYLLULr+LwXgx7oHSW7AY2iCmhkoOE/vSR7DJ6rkey2gYx7eT1IoRoORiIaQ==} - peerDependencies: - nx: '>= 16 <= 18' - dependencies: - '@nrwl/devkit': 17.1.3(nx@17.2.7) - ejs: 3.1.9 - enquirer: 2.3.6 - ignore: 5.3.0 - nx: 17.2.7 - semver: 7.5.3 - tmp: 0.2.1 - tslib: 2.6.2 - dev: false + dev: true /@nx/nx-darwin-arm64@17.2.7: resolution: {integrity: sha512-d534L13VUlnSW61rabBl3TTuSpzHxtqy8eF5vsYkFSMonBDjqqNR6+vFfQEa7PW/3Qfeuw4MpmojtamCYLd/TA==} @@ -7718,6 +7693,7 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true + dev: true optional: true /@nx/nx-darwin-x64@17.2.7: @@ -7726,6 +7702,7 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true + dev: true optional: true /@nx/nx-freebsd-x64@17.2.7: @@ -7734,6 +7711,7 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true + dev: true optional: true /@nx/nx-linux-arm-gnueabihf@17.2.7: @@ -7742,6 +7720,7 @@ packages: cpu: [arm] os: [linux] requiresBuild: true + dev: true optional: true /@nx/nx-linux-arm64-gnu@17.2.7: @@ -7750,6 +7729,7 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true + dev: true optional: true /@nx/nx-linux-arm64-musl@17.2.7: @@ -7758,6 +7738,7 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true + dev: true optional: true /@nx/nx-linux-x64-gnu@17.2.7: @@ -7766,6 +7747,7 @@ packages: cpu: [x64] os: [linux] requiresBuild: true + dev: true optional: true /@nx/nx-linux-x64-musl@17.2.7: @@ -7774,6 +7756,7 @@ packages: cpu: [x64] os: [linux] requiresBuild: true + dev: true optional: true /@nx/nx-win32-arm64-msvc@17.2.7: @@ -7782,6 +7765,7 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true + dev: true optional: true /@nx/nx-win32-x64-msvc@17.2.7: @@ -7790,6 +7774,7 @@ packages: cpu: [x64] os: [win32] requiresBuild: true + dev: true optional: true /@open-draft/until@1.0.3: @@ -10124,16 +10109,6 @@ packages: wonka: 4.0.15 dev: false - /@use-gesture/core@10.3.0: - resolution: {integrity: sha512-rh+6MND31zfHcy9VU3dOZCqGY511lvGcfyJenN4cWZe0u1BH6brBpBddLVXhF2r4BMqWbvxfsbL7D287thJU2A==} - dev: false - - /@use-gesture/vanilla@10.3.0: - resolution: {integrity: sha512-hehZWLaNyNc+TWAbhJpj84yumD8ZBp/eet6HGg3xztPcchuNNTGEu5LEEdSg69SXHzS7exWE6j5VnsZ3VXVFxQ==} - dependencies: - '@use-gesture/core': 10.3.0 - dev: false - /@vercel/nft@0.24.4: resolution: {integrity: sha512-KjYAZty7boH5fi5udp6p+lNu6nawgs++pHW+3koErMgbRkkHuToGX/FwjN5clV1FcaM3udfd4zW/sUapkMgpZw==} engines: {node: '>=16'} @@ -10713,6 +10688,7 @@ packages: /@yarnpkg/lockfile@1.1.0: resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} + dev: true /@yarnpkg/parsers@3.0.0-rc.46: resolution: {integrity: sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==} @@ -10720,12 +10696,14 @@ packages: dependencies: js-yaml: 3.14.1 tslib: 2.6.2 + dev: true /@zkochan/js-yaml@0.0.6: resolution: {integrity: sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==} hasBin: true dependencies: argparse: 2.0.1 + dev: true /@zkochan/retry@0.2.0: resolution: {integrity: sha512-WhB+2B/ZPlW2Xy/kMJBrMbqecWXcbDDgn0K0wKBAgO2OlBTz1iLJrRWduo+DGGn0Akvz1Lu4Xvls7dJojximWw==} @@ -12890,6 +12868,7 @@ packages: /cli-spinners@2.6.1: resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} engines: {node: '>=6'} + dev: true /cli-spinners@2.9.1: resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} @@ -14425,6 +14404,7 @@ packages: /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} @@ -14827,6 +14807,7 @@ packages: engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.3 + dev: true /entities@2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} @@ -16647,6 +16628,7 @@ packages: /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: true /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} @@ -16971,6 +16953,7 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + dev: true /glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} @@ -18880,6 +18863,7 @@ packages: diff-sequences: 29.6.3 jest-get-type: 29.6.3 pretty-format: 29.7.0 + dev: true /jest-docblock@26.0.0: resolution: {integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==} @@ -20439,6 +20423,7 @@ packages: /lines-and-columns@2.0.3: resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true /listhen@1.5.5: resolution: {integrity: sha512-LXe8Xlyh3gnxdv4tSjTjscD1vpr/2PRpzq8YIaMJgyKzRG8wdISlWVWnGThJfHnlJ6hmLt2wq1yeeix0TEbuoA==} @@ -21371,6 +21356,7 @@ packages: resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==} dependencies: brace-expansion: 1.1.11 + dev: true /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -21826,28 +21812,6 @@ packages: - supports-color dev: true - /ngxtension@1.6.2(@angular/common@17.0.8)(@angular/core@17.0.8)(@use-gesture/vanilla@10.3.0)(rxjs@7.8.1): - resolution: {integrity: sha512-SK6dnpzbvg8FDI7QwnO1MTUal9yDsjefhv4tmR5fVPclV4mzTy2FPXMIsBMt9ehpGRLi15PaAxPt1+HIpVZo1g==} - engines: {node: '>=18'} - peerDependencies: - '@angular/common': '>=16.0.0' - '@angular/core': '>=16.0.0' - '@use-gesture/vanilla': ^10.0.0 - rxjs: ^6.0.0 || ^7.0.0 - dependencies: - '@angular/common': 17.0.8(@angular/core@17.0.8)(rxjs@7.8.1) - '@angular/core': 17.0.8(rxjs@7.8.1)(zone.js@0.14.2) - '@nx/devkit': 17.1.3(nx@17.2.7) - '@use-gesture/vanilla': 10.3.0 - nx: 17.2.7 - rxjs: 7.8.1 - tslib: 2.6.2 - transitivePeerDependencies: - - '@swc-node/register' - - '@swc/core' - - debug - dev: false - /nice-napi@1.0.2: resolution: {integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==} os: ['!win32'] @@ -22087,6 +22051,7 @@ packages: /node-machine-id@1.1.12: resolution: {integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==} + dev: true /node-notifier@8.0.2: resolution: {integrity: sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==} @@ -22386,6 +22351,7 @@ packages: '@nx/nx-win32-x64-msvc': 17.2.7 transitivePeerDependencies: - debug + dev: true /nypm@0.3.3: resolution: {integrity: sha512-FHoxtTscAE723e80d2M9cJRb4YVjL82Ra+ZV+YqC6rfNZUWahi+ZhPF+krnR+bdMvibsfHCtgKXnZf5R6kmEPA==} @@ -27809,6 +27775,7 @@ packages: duplexer: 0.1.2 minimist: 1.2.8 through: 2.3.8 + dev: true /structured-headers@0.4.1: resolution: {integrity: sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==} @@ -28186,6 +28153,7 @@ packages: fs-constants: 1.0.0 inherits: 2.0.4 readable-stream: 3.6.2 + dev: true /tar-stream@3.1.6: resolution: {integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==} @@ -28522,6 +28490,7 @@ packages: engines: {node: '>=8.17.0'} dependencies: rimraf: 3.0.2 + dev: true /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -28671,6 +28640,7 @@ packages: json5: 2.2.3 minimist: 1.2.8 strip-bom: 3.0.0 + dev: true /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}