@nx-ddd/common 19.35.0 → 19.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/nx-ddd-common-domain.mjs.map +1 -1
- package/fesm2022/nx-ddd-common-infrastructure-externals-chromium-impl.mjs.map +1 -1
- package/fesm2022/nx-ddd-common-infrastructure-queries.mjs +1 -1
- package/fesm2022/nx-ddd-common-infrastructure-queries.mjs.map +1 -1
- package/fesm2022/nx-ddd-common.mjs +1 -1
- package/fesm2022/nx-ddd-common.mjs.map +1 -1
- package/package.json +2 -2
- package/types/nx-ddd-common-infrastructure-externals-cloud-storage.d.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nx-ddd-common-domain.mjs","sources":["../../../../../packages/@nx-ddd/common/src/lib/domain/models/decorators/decorators.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/models/entity/entity.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/models/get-entity-name/get-entity-name.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/models/get-lang-map/get-lang-map.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/models/get-model-name/get-model-name.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/models/get-props/get-props.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/models/transformers/index.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/repository.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/resolver/resolver.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/nx-ddd-common-domain.ts"],"sourcesContent":["export type Type<E> = { new(...args: any[]): E};\nexport type DomainLangMap<Entity> = Partial<{[K in keyof Entity]: string}>\n\ninterface Target {\n constructor: {\n [Domain.ANNOTATIONS]?: DomainAnnotation[];\n }\n}\n\nexport type OmitGetter<T> = {\n [P in keyof T as string extends P ? never : number extends P ? never : P]: T[P];\n};\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: DeepPartial<T[P]>;\n};\n\ninterface BaseDomainAnnotation {\n type: 'model:lang' | 'prop:lang' | 'prop:type';\n}\n\nexport interface DomainModelLangAnnotation extends BaseDomainAnnotation {\n type: 'model:lang';\n modelName: string;\n name: string;\n typeFactory?: () => any;\n}\n\nexport interface DomainPropLangAnnotation extends BaseDomainAnnotation {\n type: 'prop:lang';\n propName: string;\n name: string;\n}\n\nexport interface DomainPropTypeAnnotation extends BaseDomainAnnotation {\n type: 'prop:type';\n propName: string;\n typeFactory: () => any;\n}\n\nexport type DomainAnnotation = DomainModelLangAnnotation\n | DomainPropLangAnnotation\n | DomainPropTypeAnnotation;\n\n\nexport function getAnnotations<E>(target: Type<E>): DomainAnnotation[] {\n return (target as any)?.[Domain.ANNOTATIONS] ?? [];\n}\n\n\nexport class Domain {\n static readonly ANNOTATIONS = Symbol('annotations');\n\n static Lang(name: string) {\n return (target: any, propName: string) => {\n this.registerAnnotation(target.constructor, {propName, type: 'prop:lang', name});\n };\n }\n\n static Type<T>(typeFactory?: () => T) {\n return (target: any, propName: string) => {\n if (!typeFactory) {\n const type = Reflect.getMetadata('design:type', target as any, propName);\n typeFactory = () => type;\n }\n this.registerAnnotation(target.constructor, {propName, typeFactory, type: 'prop:type'});\n };\n }\n\n // classをデコレートしてnameをアノテーションする\n static Entity(propsOrName: {name: string} | string) {\n const props = typeof propsOrName === 'string' ? {name: propsOrName} : propsOrName;\n return (target: any) => {\n this.registerAnnotation(target, {name: props.name, type: 'model:lang', modelName: target.name});\n };\n }\n\n static registerAnnotation(constructor: Target['constructor'], annotation: DomainAnnotation) {\n constructor[this.ANNOTATIONS] ??= [];\n constructor[this.ANNOTATIONS].push(annotation);\n }\n}","import { toObject } from '@nx-ddd/common';\n\nexport interface Entity<Id = string> {\n id: Id | null;\n}\n\nexport class Entity { \n static fromObj<T extends Entity = Entity>(obj: object): T {\n return Object.assign(new this(), {\n id: null,\n createdAt: null,\n updatedAt: null,\n ...obj\n }) as never as T;\n }\n\n static toObj(entity: Entity): Entity {\n return toObject(entity) as Entity;\n }\n}\n","import { DomainModelLangAnnotation, getAnnotations, Type } from '../decorators';\n\nexport function getEntityName<E>(target: Type<E>): string {\n return (getAnnotations(target).find(annotation => {\n return annotation.type === 'model:lang';\n }) as DomainModelLangAnnotation)?.name ?? target.name;\n}\n","import { flatten } from \"flat\";\nimport { merge } from \"lodash-es\";\nimport { DomainAnnotation, Type, getAnnotations } from '../decorators';\n\n// フラット化された言語マップの型定義(ネストされたプロパティを含む)\nexport type LangMap<E> = Partial<Record<keyof E | string, string>>;\n\nexport function getLangMap<E>(domain: Type<E>, mergeObj: object = {}): LangMap<E> {\n return flatten(merge(_getLangMap(domain), mergeObj));\n}\n\nfunction _getLangMap<E>(target: Type<E>): Record<string, any> {\n const result = getAnnotations(target).reduce((acc: Record<string, any>, annotation: DomainAnnotation) => {\n switch(annotation.type) {\n case 'prop:lang': {\n acc[annotation.propName] = annotation.name;\n break;\n }\n case 'prop:type': {\n if (annotation.typeFactory) {\n const type = annotation.typeFactory();\n if (type) {\n const childProps = _getLangMap(type);\n for (const [childKey, childValue] of Object.entries(childProps)) {\n acc[`${annotation.propName}.${childKey}`] = childValue;\n }\n }\n }\n break;\n }\n }\n return acc;\n }, {});\n\n return result;\n}\n","import { Type, getAnnotations, DomainModelLangAnnotation } from \"../decorators\";\n\nexport function getModelName<E>(target: Type<E>): string {\n return (getAnnotations(target).find(annotation => {\n return annotation.type === 'model:lang';\n }) as DomainModelLangAnnotation)?.name ?? target.name;\n}\n","import { DomainAnnotation, Type, getAnnotations } from \"../decorators\";\n\nexport function getProps<E>(target: Type<E>, deps = 3, path = ''): string[] {\n return getAnnotations(target).map((annotation: DomainAnnotation) => {\n switch (annotation.type) {\n case 'prop:lang': {\n return `${path}${annotation.propName}`;\n }\n case 'prop:type': {\n if (deps > 0) {\n const type = annotation.typeFactory?.();\n return getProps(type, deps - 1, `${path}${annotation.propName}.`);\n }\n return [];\n }\n default: return [];\n }\n }).flat();\n}\n","import { Transform } from \"class-transformer\";\nimport { parseISO } from \"date-fns\";\nimport dayjs from \"dayjs\";\n\nexport function TransformToDayjs() {\n return Transform(({ value }) => {\n if (typeof value === 'undefined') return undefined;\n if (dayjs(value).isValid()) return dayjs(value);\n return value;\n }, {});\n}\n\nexport function TransformToDate() {\n return Transform(({ value }) => {\n if (typeof value === 'undefined') return undefined;\n if (value === null) return null;\n if (value instanceof Date) return value;\n const date = parseISO(value);\n return date;\n }, {});\n}\n","import { Injectable } from '@angular/core';\nimport { Entity } from './models';\nimport { Observable } from 'rxjs';\n\nexport type PartialWithId<E extends Entity> = Pick<E, 'id'> & Partial<E>;\n\n@Injectable()\nexport abstract class Repository<E extends {id: string}> {\n abstract get(params: {id: string}): Promise<E>;\n abstract list(): Promise<E[]>;\n abstract listChanges(): Observable<E[]>;\n abstract create(data: Omit<E, 'id' | 'createdAt' | 'updatedAt'> & Partial<Pick<E, 'id'>>): Promise<E>;\n abstract createMany(data: Omit<E, 'id' | 'createdAt' | 'updatedAt'>[]): Promise<E[]>;\n abstract update(data: Partial<E> & {id: string}): Promise<void>;\n abstract updateMany(data: Partial<E>[]): Promise<void>;\n abstract save(data: Partial<E>): Promise<boolean | [E, boolean]>;\n abstract saveMany(entities: E[]): Promise<void>;\n abstract delete(params: {id: string}): Promise<void>;\n abstract deleteMany(params: {id: string}[]): Promise<number>;\n abstract deleteAll(): Promise<void>;\n}\n","export abstract class BaseResolver<E> {\n\tprotected entiityMap = new Map<string, Map<string, any>>();\n\n\tprotected makeEntityMap(entities: E[], key: keyof E): Map<string, E>{\n\t\treturn new Map(entities.map((entity) => [entity[key] as string, entity]));\n\t}\n\n\tprotected setEntityMap(name: string, entityMap: Map<string, E>): void {\n\t\tthis.entiityMap.set(name, entityMap);\n\t}\n\n\tprotected getEntityMap(name: string): Map<string, E> {\n\t\treturn this.entiityMap.get(name);\n\t}\n\n\tprotected registerEntityMap(name: string, entities: E[], key: keyof E): void {\n\t\tthis.setEntityMap(name, this.makeEntityMap(entities, key));\n\t}\n\n\tprotected getEntity(name: string, key: string): E {\n\t\treturn this.getEntityMap(name).get(key);\n\t}\n\n\tabstract resolve(entity: any): any;\n\tabstract resolveMany(entities: any[]): any[];\n}\n\n\nexport class Resolver<E> extends BaseResolver<E> {\n\tconstructor(params: Record<string, any[]> = {}) {\n\t\tsuper();\n\t\t// Register entity maps for each entity type in the params\n\t\tconsole.debug('[Resolver] params', params);\n\t\tObject.entries(params).forEach(([entityName, entities]) => {\n\t\t\tif (entities && Array.isArray(entities) && entities.length > 0) {\n\t\t\t\tthis.registerEntityMap(entityName, entities, 'id' as any);\n\t\t\t}\n\t\t});\n\t}\n\n\tresolve(entity: any) {\n\t\tconst result = { ...entity };\n\t\t\n\t\t// Look for properties that end with 'Ids' or 'Id' to resolve related entities\n\t\tObject.keys(entity).forEach(key => {\n\t\t\t// Handle plural relationships (e.g., invoiceIds -> invoices)\n\t\t\tif (key.endsWith('Ids') && Array.isArray(entity[key])) {\n\t\t\t\tconst baseName = key.replace(/Ids$/, '');\n\t\t\t\t// 英語の複数形ルールを考慮する\n\t\t\t\tlet entityName;\n\t\t\t\t// companyのような語尾がyで終わる場合はiesに変換\n\t\t\t\tif (baseName.endsWith('y') && !['a', 'e', 'i', 'o', 'u'].includes(baseName.charAt(baseName.length - 2))) {\n\t\t\t\t\tentityName = baseName.slice(0, -1) + 'ies';\n\t\t\t\t}\n\t\t\t\t// すでに語尾がsやxなどの場合はesを追加\n\t\t\t\telse if (['s', 'x', 'z', 'ch', 'sh'].some(ending => baseName.endsWith(ending))) {\n\t\t\t\t\tentityName = baseName + 'es';\n\t\t\t\t}\n\t\t\t\t// それ以外は単純にsを追加\n\t\t\t\telse {\n\t\t\t\t\tentityName = baseName + 's';\n\t\t\t\t}\n\t\t\t\tconst entityMap = this.getEntityMap(entityName);\n\t\t\t\t\n\t\t\t\tif (entityMap) {\n\t\t\t\t\tconst resolvedEntities = entity[key].map((id: string) => this.getEntity(entityName, id));\n\t\t\t\t\tresult[entityName] = resolvedEntities;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Handle singular relationships (e.g., addressId -> address)\n\t\t\telse if (key.endsWith('Id') && !key.endsWith('Ids') && typeof entity[key] === 'string') {\n\t\t\t\tconst baseName = key.replace(/Id$/, '');\n\t\t\t\t\n\t\t\t\t// 英語の複数形ルールを考慮して複数形を生成\n\t\t\t\tlet pluralEntityName;\n\t\t\t\t// companyのような語尾がyで終わる場合はiesに変換\n\t\t\t\tif (baseName.endsWith('y') && !['a', 'e', 'i', 'o', 'u'].includes(baseName.charAt(baseName.length - 2))) {\n\t\t\t\t\tpluralEntityName = baseName.slice(0, -1) + 'ies';\n\t\t\t\t}\n\t\t\t\t// すでに語尾がsやxなどの場合はesを追加\n\t\t\t\telse if (['s', 'x', 'z', 'ch', 'sh'].some(ending => baseName.endsWith(ending))) {\n\t\t\t\t\tpluralEntityName = baseName + 'es';\n\t\t\t\t}\n\t\t\t\t// それ以外は単純にsを追加\n\t\t\t\telse {\n\t\t\t\t\tpluralEntityName = baseName + 's';\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// まず複数形でエンティティを探す\n\t\t\t\tlet entityMap = this.getEntityMap(pluralEntityName);\n\t\t\t\t\n\t\t\t\tif (entityMap) {\n\t\t\t\t\tconst resolvedEntity = this.getEntity(pluralEntityName, entity[key]);\n\n\t\t\t\t\tif (resolvedEntity) {\n\t\t\t\t\t\tresult[baseName] = resolvedEntity;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// 複数形で見つからない場合は単数形を試す\n\t\t\t\t\tentityMap = this.getEntityMap(baseName);\n\t\t\t\t\tif (entityMap) {\n\t\t\t\t\t\tconst resolvedEntity = this.getEntity(baseName, entity[key]);\n\t\t\t\t\t\tif (resolvedEntity) {\n\t\t\t\t\t\t\tresult[baseName] = resolvedEntity;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn result;\n\t}\n\n\tresolveMany(entities: any[]) {\n\t\treturn entities.map(entity => this.resolve(entity));\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nx-ddd-common-domain.mjs","sources":["../../../../../packages/@nx-ddd/common/src/lib/domain/models/decorators/decorators.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/models/entity/entity.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/models/get-entity-name/get-entity-name.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/models/get-lang-map/get-lang-map.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/models/get-model-name/get-model-name.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/models/get-props/get-props.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/models/transformers/index.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/repository.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/resolver/resolver.ts","../../../../../packages/@nx-ddd/common/src/lib/domain/nx-ddd-common-domain.ts"],"sourcesContent":["export type Type<E> = { new(...args: any[]): E};\nexport type DomainLangMap<Entity> = Partial<{[K in keyof Entity]: string}>\n\ninterface Target {\n constructor: {\n [Domain.ANNOTATIONS]?: DomainAnnotation[];\n }\n}\n\nexport type OmitGetter<T> = {\n [P in keyof T as string extends P ? never : number extends P ? never : P]: T[P];\n};\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: DeepPartial<T[P]>;\n};\n\ninterface BaseDomainAnnotation {\n type: 'model:lang' | 'prop:lang' | 'prop:type';\n}\n\nexport interface DomainModelLangAnnotation extends BaseDomainAnnotation {\n type: 'model:lang';\n modelName: string;\n name: string;\n typeFactory?: () => any;\n}\n\nexport interface DomainPropLangAnnotation extends BaseDomainAnnotation {\n type: 'prop:lang';\n propName: string;\n name: string;\n}\n\nexport interface DomainPropTypeAnnotation extends BaseDomainAnnotation {\n type: 'prop:type';\n propName: string;\n typeFactory: () => any;\n}\n\nexport type DomainAnnotation = DomainModelLangAnnotation\n | DomainPropLangAnnotation\n | DomainPropTypeAnnotation;\n\n\nexport function getAnnotations<E>(target: Type<E>): DomainAnnotation[] {\n return (target as any)?.[Domain.ANNOTATIONS] ?? [];\n}\n\n\nexport class Domain {\n static readonly ANNOTATIONS = Symbol('annotations');\n\n static Lang(name: string) {\n return (target: any, propName: string) => {\n this.registerAnnotation(target.constructor, {propName, type: 'prop:lang', name});\n };\n }\n\n static Type<T>(typeFactory?: () => T) {\n return (target: any, propName: string) => {\n if (!typeFactory) {\n const type = Reflect.getMetadata('design:type', target as any, propName);\n typeFactory = () => type;\n }\n this.registerAnnotation(target.constructor, {propName, typeFactory, type: 'prop:type'});\n };\n }\n\n // classをデコレートしてnameをアノテーションする\n static Entity(propsOrName: {name: string} | string) {\n const props = typeof propsOrName === 'string' ? {name: propsOrName} : propsOrName;\n return (target: any) => {\n this.registerAnnotation(target, {name: props.name, type: 'model:lang', modelName: target.name});\n };\n }\n\n static registerAnnotation(constructor: Target['constructor'], annotation: DomainAnnotation) {\n constructor[this.ANNOTATIONS] ??= [];\n constructor[this.ANNOTATIONS]!.push(annotation);\n }\n}","import { toObject } from '@nx-ddd/common';\n\nexport interface Entity<Id = string> {\n id: Id | null;\n}\n\nexport class Entity { \n static fromObj<T extends Entity = Entity>(obj: object): T {\n return Object.assign(new this(), {\n id: null,\n createdAt: null,\n updatedAt: null,\n ...obj\n }) as never as T;\n }\n\n static toObj(entity: Entity): Entity {\n return toObject(entity) as Entity;\n }\n}\n","import { DomainModelLangAnnotation, getAnnotations, Type } from '../decorators';\n\nexport function getEntityName<E>(target: Type<E>): string {\n return (getAnnotations(target).find(annotation => {\n return annotation.type === 'model:lang';\n }) as DomainModelLangAnnotation)?.name ?? target.name;\n}\n","import { flatten } from \"flat\";\nimport { merge } from \"lodash-es\";\nimport { DomainAnnotation, Type, getAnnotations } from '../decorators';\n\n// フラット化された言語マップの型定義(ネストされたプロパティを含む)\nexport type LangMap<E> = Partial<Record<keyof E | string, string>>;\n\nexport function getLangMap<E>(domain: Type<E>, mergeObj: object = {}): LangMap<E> {\n return flatten(merge(_getLangMap(domain), mergeObj));\n}\n\nfunction _getLangMap<E>(target: Type<E>): Record<string, any> {\n const result = getAnnotations(target).reduce((acc: Record<string, any>, annotation: DomainAnnotation) => {\n switch(annotation.type) {\n case 'prop:lang': {\n acc[annotation.propName] = annotation.name;\n break;\n }\n case 'prop:type': {\n if (annotation.typeFactory) {\n const type = annotation.typeFactory();\n if (type) {\n const childProps = _getLangMap(type);\n for (const [childKey, childValue] of Object.entries(childProps)) {\n acc[`${annotation.propName}.${childKey}`] = childValue;\n }\n }\n }\n break;\n }\n }\n return acc;\n }, {});\n\n return result;\n}\n","import { Type, getAnnotations, DomainModelLangAnnotation } from \"../decorators\";\n\nexport function getModelName<E>(target: Type<E>): string {\n return (getAnnotations(target).find(annotation => {\n return annotation.type === 'model:lang';\n }) as DomainModelLangAnnotation)?.name ?? target.name;\n}\n","import { DomainAnnotation, Type, getAnnotations } from \"../decorators\";\n\nexport function getProps<E>(target: Type<E>, deps = 3, path = ''): string[] {\n return getAnnotations(target).map((annotation: DomainAnnotation) => {\n switch (annotation.type) {\n case 'prop:lang': {\n return `${path}${annotation.propName}`;\n }\n case 'prop:type': {\n if (deps > 0) {\n const type = annotation.typeFactory?.();\n return getProps(type, deps - 1, `${path}${annotation.propName}.`);\n }\n return [];\n }\n default: return [];\n }\n }).flat();\n}\n","import { Transform } from \"class-transformer\";\nimport { parseISO } from \"date-fns\";\nimport dayjs from \"dayjs\";\n\nexport function TransformToDayjs() {\n return Transform(({ value }) => {\n if (typeof value === 'undefined') return undefined;\n if (dayjs(value).isValid()) return dayjs(value);\n return value;\n }, {});\n}\n\nexport function TransformToDate() {\n return Transform(({ value }) => {\n if (typeof value === 'undefined') return undefined;\n if (value === null) return null;\n if (value instanceof Date) return value;\n const date = parseISO(value);\n return date;\n }, {});\n}\n","import { Injectable } from '@angular/core';\nimport { Entity } from './models';\nimport { Observable } from 'rxjs';\n\nexport type PartialWithId<E extends Entity> = Pick<E, 'id'> & Partial<E>;\n\n@Injectable()\nexport abstract class Repository<E extends {id: string}> {\n abstract get(params: {id: string}): Promise<E>;\n abstract list(): Promise<E[]>;\n abstract listChanges(): Observable<E[]>;\n abstract create(data: Omit<E, 'id' | 'createdAt' | 'updatedAt'> & Partial<Pick<E, 'id'>>): Promise<E>;\n abstract createMany(data: Omit<E, 'id' | 'createdAt' | 'updatedAt'>[]): Promise<E[]>;\n abstract update(data: Partial<E> & {id: string}): Promise<void>;\n abstract updateMany(data: Partial<E>[]): Promise<void>;\n abstract save(data: Partial<E>): Promise<boolean | [E, boolean]>;\n abstract saveMany(entities: E[]): Promise<void>;\n abstract delete(params: {id: string}): Promise<void>;\n abstract deleteMany(params: {id: string}[]): Promise<number>;\n abstract deleteAll(): Promise<void>;\n}\n","export abstract class BaseResolver<E> {\n\tprotected entiityMap = new Map<string, Map<string, any>>();\n\n\tprotected makeEntityMap(entities: E[], key: keyof E): Map<string, E>{\n\t\treturn new Map(entities.map((entity) => [entity[key] as string, entity]));\n\t}\n\n\tprotected setEntityMap(name: string, entityMap: Map<string, E>): void {\n\t\tthis.entiityMap.set(name, entityMap);\n\t}\n\n\tprotected getEntityMap(name: string): Map<string, E> {\n\t\treturn this.entiityMap.get(name) as Map<string, E>;\n\t}\n\n\tprotected registerEntityMap(name: string, entities: E[], key: keyof E): void {\n\t\tthis.setEntityMap(name, this.makeEntityMap(entities, key));\n\t}\n\n\tprotected getEntity(name: string, key: string): E {\n\t\treturn this.getEntityMap(name).get(key) as E;\n\t}\n\n\tabstract resolve(entity: any): any;\n\tabstract resolveMany(entities: any[]): any[];\n}\n\n\nexport class Resolver<E> extends BaseResolver<E> {\n\tconstructor(params: Record<string, any[]> = {}) {\n\t\tsuper();\n\t\t// Register entity maps for each entity type in the params\n\t\tconsole.debug('[Resolver] params', params);\n\t\tObject.entries(params).forEach(([entityName, entities]) => {\n\t\t\tif (entities && Array.isArray(entities) && entities.length > 0) {\n\t\t\t\tthis.registerEntityMap(entityName, entities, 'id' as any);\n\t\t\t}\n\t\t});\n\t}\n\n\tresolve(entity: any) {\n\t\tconst result = { ...entity };\n\t\t\n\t\t// Look for properties that end with 'Ids' or 'Id' to resolve related entities\n\t\tObject.keys(entity).forEach(key => {\n\t\t\t// Handle plural relationships (e.g., invoiceIds -> invoices)\n\t\t\tif (key.endsWith('Ids') && Array.isArray(entity[key])) {\n\t\t\t\tconst baseName = key.replace(/Ids$/, '');\n\t\t\t\t// 英語の複数形ルールを考慮する\n\t\t\t\tlet entityName;\n\t\t\t\t// companyのような語尾がyで終わる場合はiesに変換\n\t\t\t\tif (baseName.endsWith('y') && !['a', 'e', 'i', 'o', 'u'].includes(baseName.charAt(baseName.length - 2))) {\n\t\t\t\t\tentityName = baseName.slice(0, -1) + 'ies';\n\t\t\t\t}\n\t\t\t\t// すでに語尾がsやxなどの場合はesを追加\n\t\t\t\telse if (['s', 'x', 'z', 'ch', 'sh'].some(ending => baseName.endsWith(ending))) {\n\t\t\t\t\tentityName = baseName + 'es';\n\t\t\t\t}\n\t\t\t\t// それ以外は単純にsを追加\n\t\t\t\telse {\n\t\t\t\t\tentityName = baseName + 's';\n\t\t\t\t}\n\t\t\t\tconst entityMap = this.getEntityMap(entityName);\n\t\t\t\t\n\t\t\t\tif (entityMap) {\n\t\t\t\t\tconst resolvedEntities = entity[key].map((id: string) => this.getEntity(entityName, id));\n\t\t\t\t\tresult[entityName] = resolvedEntities;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Handle singular relationships (e.g., addressId -> address)\n\t\t\telse if (key.endsWith('Id') && !key.endsWith('Ids') && typeof entity[key] === 'string') {\n\t\t\t\tconst baseName = key.replace(/Id$/, '');\n\t\t\t\t\n\t\t\t\t// 英語の複数形ルールを考慮して複数形を生成\n\t\t\t\tlet pluralEntityName;\n\t\t\t\t// companyのような語尾がyで終わる場合はiesに変換\n\t\t\t\tif (baseName.endsWith('y') && !['a', 'e', 'i', 'o', 'u'].includes(baseName.charAt(baseName.length - 2))) {\n\t\t\t\t\tpluralEntityName = baseName.slice(0, -1) + 'ies';\n\t\t\t\t}\n\t\t\t\t// すでに語尾がsやxなどの場合はesを追加\n\t\t\t\telse if (['s', 'x', 'z', 'ch', 'sh'].some(ending => baseName.endsWith(ending))) {\n\t\t\t\t\tpluralEntityName = baseName + 'es';\n\t\t\t\t}\n\t\t\t\t// それ以外は単純にsを追加\n\t\t\t\telse {\n\t\t\t\t\tpluralEntityName = baseName + 's';\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// まず複数形でエンティティを探す\n\t\t\t\tlet entityMap = this.getEntityMap(pluralEntityName);\n\t\t\t\t\n\t\t\t\tif (entityMap) {\n\t\t\t\t\tconst resolvedEntity = this.getEntity(pluralEntityName, entity[key]);\n\n\t\t\t\t\tif (resolvedEntity) {\n\t\t\t\t\t\tresult[baseName] = resolvedEntity;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// 複数形で見つからない場合は単数形を試す\n\t\t\t\t\tentityMap = this.getEntityMap(baseName);\n\t\t\t\t\tif (entityMap) {\n\t\t\t\t\t\tconst resolvedEntity = this.getEntity(baseName, entity[key]);\n\t\t\t\t\t\tif (resolvedEntity) {\n\t\t\t\t\t\t\tresult[baseName] = resolvedEntity;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn result;\n\t}\n\n\tresolveMany(entities: any[]) {\n\t\treturn entities.map(entity => this.resolve(entity));\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nx-ddd-common-infrastructure-externals-chromium-impl.mjs","sources":["../../../../../packages/@nx-ddd/common/src/lib/infrastructure/externals/chromium/impl/chromium.service.impl.ts","../../../../../packages/@nx-ddd/common/src/lib/infrastructure/externals/chromium/impl/nx-ddd-common-infrastructure-externals-chromium-impl.ts"],"sourcesContent":["import { EnvironmentProviders, Injectable, makeEnvironmentProviders } from \"@angular/core\";\nimport { makeDI } from \"@nx-ddd/core\";\nimport { CHROMIUM } from \"@nx-ddd/common/infrastructure/externals/chromium/token\";\nimport { Browser, chromium, LaunchOptions } from \"playwright\";\nimport Chromium from '@sparticuz/chromium';\nimport { merge } from \"lodash-es\";\n\nexport interface ChromiumConfig {\n headless: boolean;\n args?: string[];\n executablePath?: string;\n}\n\nexport const CHROMIUM_CONFIG = makeDI<ChromiumConfig>('[@nx-ddd/common] ChromiumConfig', {optional: false});\n\n@Injectable({providedIn: 'root'})\nexport class ChromiumService {\n protected readonly config = CHROMIUM_CONFIG.inject()
|
|
1
|
+
{"version":3,"file":"nx-ddd-common-infrastructure-externals-chromium-impl.mjs","sources":["../../../../../packages/@nx-ddd/common/src/lib/infrastructure/externals/chromium/impl/chromium.service.impl.ts","../../../../../packages/@nx-ddd/common/src/lib/infrastructure/externals/chromium/impl/nx-ddd-common-infrastructure-externals-chromium-impl.ts"],"sourcesContent":["import { EnvironmentProviders, Injectable, makeEnvironmentProviders } from \"@angular/core\";\nimport { makeDI } from \"@nx-ddd/core\";\nimport { CHROMIUM } from \"@nx-ddd/common/infrastructure/externals/chromium/token\";\nimport { Browser, chromium, LaunchOptions } from \"playwright\";\nimport Chromium from '@sparticuz/chromium';\nimport { merge } from \"lodash-es\";\n\nexport interface ChromiumConfig {\n headless: boolean;\n args?: string[];\n executablePath?: string;\n}\n\nexport const CHROMIUM_CONFIG = makeDI<ChromiumConfig>('[@nx-ddd/common] ChromiumConfig', {optional: false});\n\n@Injectable({providedIn: 'root'})\nexport class ChromiumService {\n protected readonly config = CHROMIUM_CONFIG.inject()!;\n\n async start<R = any>(\n callback: (browser: Browser) => Promise<R>,\n options: LaunchOptions = {}\n ): Promise<R> {\n const defaultArgs = [\n '--no-sandbox',\n '--disable-setuid-sandbox',\n '--disable-dev-shm-usage',\n '--disable-extensions',\n '--disable-gpu',\n '--disable-software-rasterizer',\n ];\n\n // executablePathの決定: config > @sparticuz/chromium > undefined(省略)\n let executablePath: string | undefined;\n if (this.config.executablePath) {\n executablePath = this.config.executablePath;\n } else {\n try {\n const sparticzuPath = await Chromium.executablePath();\n if (sparticzuPath) {\n executablePath = sparticzuPath;\n }\n } catch (e) {\n // @sparticuz/chromiumが使えない環境では無視\n console.debug('[@sparticuz/chromium not available, using system chromium');\n }\n }\n\n const launchOptions: LaunchOptions = merge({\n headless: this.config.headless,\n timeout: 60 * 1000,\n args: this.config.args || defaultArgs\n }, options);\n\n console.debug('[ChromiumService] launchOptions:', launchOptions);\n\n // executablePathが有効な値の場合のみ設定\n if (executablePath) {\n launchOptions.executablePath = executablePath;\n }\n\n const browser = await chromium.launch(launchOptions);\n try {\n const result = await callback(browser);\n return result;\n } catch(error) {\n throw error;\n } finally {\n try {\n await browser.close();\n // Cloud Functions環境での確実な終了のため\n if (browser.isConnected()) {\n console.warn('Browser still connected after close, forcing disconnect');\n await browser.close();\n }\n } catch (closeError) {\n console.error('Error closing browser:', closeError);\n }\n }\n }\n}\n\nexport function provideChromium(useFactory: () => ChromiumConfig = () => ({headless: true})): EnvironmentProviders {\n return makeEnvironmentProviders([\n CHROMIUM_CONFIG.provide(useFactory),\n CHROMIUM.provide(() => new ChromiumService()),\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;AAaO,MAAM,eAAe,GAAG,MAAM,CAAiB,iCAAiC,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAC;MAG7F,eAAe,CAAA;AACP,IAAA,MAAM,GAAG,eAAe,CAAC,MAAM,EAAG;AAErD,IAAA,MAAM,KAAK,CACT,QAA0C,EAC1C,UAAyB,EAAE,EAAA;AAE3B,QAAA,MAAM,WAAW,GAAG;YAClB,cAAc;YACd,0BAA0B;YAC1B,yBAAyB;YACzB,sBAAsB;YACtB,eAAe;YACf,+BAA+B;SAChC;;AAGD,QAAA,IAAI,cAAkC;AACtC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;AAC9B,YAAA,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc;QAC7C;aAAO;AACL,YAAA,IAAI;AACF,gBAAA,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE;gBACrD,IAAI,aAAa,EAAE;oBACjB,cAAc,GAAG,aAAa;gBAChC;YACF;YAAE,OAAO,CAAC,EAAE;;AAEV,gBAAA,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC;YAC5E;QACF;QAEA,MAAM,aAAa,GAAkB,KAAK,CAAC;AACzC,YAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,OAAO,EAAE,EAAE,GAAG,IAAI;AAClB,YAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI;SAC3B,EAAE,OAAO,CAAC;AAEX,QAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,aAAa,CAAC;;QAGhE,IAAI,cAAc,EAAE;AAClB,YAAA,aAAa,CAAC,cAAc,GAAG,cAAc;QAC/C;QAEA,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC;AACpD,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;AACtC,YAAA,OAAO,MAAM;QACf;QAAE,OAAM,KAAK,EAAE;AACb,YAAA,MAAM,KAAK;QACb;gBAAU;AACR,YAAA,IAAI;AACF,gBAAA,MAAM,OAAO,CAAC,KAAK,EAAE;;AAErB,gBAAA,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE;AACzB,oBAAA,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC;AACvE,oBAAA,MAAM,OAAO,CAAC,KAAK,EAAE;gBACvB;YACF;YAAE,OAAO,UAAU,EAAE;AACnB,gBAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,UAAU,CAAC;YACrD;QACF;IACF;uGA/DW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADH,MAAM,EAAA,CAAA;;2FAClB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;AAmE1B,SAAU,eAAe,CAAC,UAAA,GAAmC,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,EAAA;AACzF,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC;QACnC,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC;AAC9C,KAAA,CAAC;AACJ;;ACvFA;;AAEG;;;;"}
|
|
@@ -31,7 +31,7 @@ class CachedQuery {
|
|
|
31
31
|
destCount: () => this.indexedDb.count(),
|
|
32
32
|
});
|
|
33
33
|
list() {
|
|
34
|
-
return this.synchronizer.sync().pipe(switchMap(() => this.indexedDb.listChanges()), throttleTime(this.options.debounceTime));
|
|
34
|
+
return this.synchronizer.sync().pipe(switchMap(() => this.indexedDb.listChanges()), throttleTime(this.options.debounceTime ?? 5_000));
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
class CachedQueryFactory {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nx-ddd-common-infrastructure-queries.mjs","sources":["../../../../../packages/@nx-ddd/common/src/lib/infrastructure/queries/cached-query.ts","../../../../../packages/@nx-ddd/common/src/lib/infrastructure/queries/nx-ddd-common-infrastructure-queries.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { RepositorySynchronizer } from '@nx-ddd/common/infrastructure';\nimport dayjs from 'dayjs';\nimport { debounceTime, from, map, Observable, switchMap, tap, throttleTime } from 'rxjs';\n\nexport function getLastUpdatedAt<T extends {updatedAt: dayjs.Dayjs}>(items: T[]) {\n return items.reduce((acc, entity) => {\n if (!entity?.updatedAt) return acc;\n return entity.updatedAt.isAfter(acc) ? entity.updatedAt : acc;\n }, dayjs('1997-01-01'));\n}\n\ninterface SrcRepository<T extends {updatedAt: dayjs.Dayjs}> {\n count: () => Promise<number>;\n query: {\n listChangesAfter: (updatedAt: dayjs.Dayjs, {limit}: {limit?: number}) => Observable<T[]>;\n };\n}\n\ninterface DestRepository<T extends {updatedAt: dayjs.Dayjs}> {\n listChanges: () => Observable<T[]>;\n saveMany: (items: T[]) => void;\n count: () => Observable<number>;\n}\n\nexport class CachedQuery<T extends {updatedAt: dayjs.Dayjs}> {\n constructor(\n protected repository: SrcRepository<T>,\n protected indexedDb: DestRepository<T>,\n protected options: {\n debounceTime?: number,\n chunkSize?: number\n } = {\n debounceTime: 5_000,\n chunkSize: 100,\n },\n ) { }\n readonly synchronizer = new RepositorySynchronizer({\n lastUpdatedAtChanges: () => this.indexedDb.listChanges().pipe(map(getLastUpdatedAt)),\n saveMany: (items: T[]) => this.indexedDb.saveMany(items),\n listChangesAfter: (updatedAt) => this.repository.query.listChangesAfter(updatedAt, {limit: this.options.chunkSize}),\n srcCount: () => from(this.repository.count()),\n destCount: () => this.indexedDb.count(),\n });\n\n list() {\n return this.synchronizer.sync().pipe(\n switchMap(() => this.indexedDb.listChanges()),\n throttleTime(this.options.debounceTime),\n );\n }\n}\n\n@Injectable({providedIn: 'root'})\nexport class CachedQueryFactory {\n create<T extends {updatedAt: dayjs.Dayjs}>(\n repository: SrcRepository<T>,\n indexedDb: DestRepository<T>,\n ): CachedQuery<T> {\n return new CachedQuery(repository, indexedDb);\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAKM,SAAU,gBAAgB,CAAqC,KAAU,EAAA;IAC7E,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,KAAI;QAClC,IAAI,CAAC,MAAM,EAAE,SAAS;AAAE,YAAA,OAAO,GAAG;AAClC,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,GAAG,GAAG;AAC/D,IAAA,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;AACzB;MAea,WAAW,CAAA;AAEV,IAAA,UAAA;AACA,IAAA,SAAA;AACA,IAAA,OAAA;AAHZ,IAAA,WAAA,CACY,UAA4B,EAC5B,SAA4B,EAC5B,OAAA,GAGN;AACF,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,SAAS,EAAE,GAAG;AACf,KAAA,EAAA;QARS,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;IAOf;IACK,YAAY,GAAG,IAAI,sBAAsB,CAAC;AACjD,QAAA,oBAAoB,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACpF,QAAA,QAAQ,EAAE,CAAC,KAAU,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxD,gBAAgB,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAC,CAAC;AACnH,QAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC7C,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACxC,KAAA,CAAC;IAEF,IAAI,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,CAClC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAC7C,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"nx-ddd-common-infrastructure-queries.mjs","sources":["../../../../../packages/@nx-ddd/common/src/lib/infrastructure/queries/cached-query.ts","../../../../../packages/@nx-ddd/common/src/lib/infrastructure/queries/nx-ddd-common-infrastructure-queries.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { RepositorySynchronizer } from '@nx-ddd/common/infrastructure';\nimport dayjs from 'dayjs';\nimport { debounceTime, from, map, Observable, switchMap, tap, throttleTime } from 'rxjs';\n\nexport function getLastUpdatedAt<T extends {updatedAt: dayjs.Dayjs}>(items: T[]) {\n return items.reduce((acc, entity) => {\n if (!entity?.updatedAt) return acc;\n return entity.updatedAt.isAfter(acc) ? entity.updatedAt : acc;\n }, dayjs('1997-01-01'));\n}\n\ninterface SrcRepository<T extends {updatedAt: dayjs.Dayjs}> {\n count: () => Promise<number>;\n query: {\n listChangesAfter: (updatedAt: dayjs.Dayjs, {limit}: {limit?: number}) => Observable<T[]>;\n };\n}\n\ninterface DestRepository<T extends {updatedAt: dayjs.Dayjs}> {\n listChanges: () => Observable<T[]>;\n saveMany: (items: T[]) => void;\n count: () => Observable<number>;\n}\n\nexport class CachedQuery<T extends {updatedAt: dayjs.Dayjs}> {\n constructor(\n protected repository: SrcRepository<T>,\n protected indexedDb: DestRepository<T>,\n protected options: {\n debounceTime?: number,\n chunkSize?: number\n } = {\n debounceTime: 5_000,\n chunkSize: 100,\n },\n ) { }\n readonly synchronizer = new RepositorySynchronizer({\n lastUpdatedAtChanges: () => this.indexedDb.listChanges().pipe(map(getLastUpdatedAt)),\n saveMany: (items: T[]) => this.indexedDb.saveMany(items),\n listChangesAfter: (updatedAt) => this.repository.query.listChangesAfter(updatedAt, {limit: this.options.chunkSize}),\n srcCount: () => from(this.repository.count()),\n destCount: () => this.indexedDb.count(),\n });\n\n list() {\n return this.synchronizer.sync().pipe(\n switchMap(() => this.indexedDb.listChanges()),\n throttleTime(this.options.debounceTime ?? 5_000),\n );\n }\n}\n\n@Injectable({providedIn: 'root'})\nexport class CachedQueryFactory {\n create<T extends {updatedAt: dayjs.Dayjs}>(\n repository: SrcRepository<T>,\n indexedDb: DestRepository<T>,\n ): CachedQuery<T> {\n return new CachedQuery(repository, indexedDb);\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAKM,SAAU,gBAAgB,CAAqC,KAAU,EAAA;IAC7E,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,KAAI;QAClC,IAAI,CAAC,MAAM,EAAE,SAAS;AAAE,YAAA,OAAO,GAAG;AAClC,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,GAAG,GAAG;AAC/D,IAAA,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;AACzB;MAea,WAAW,CAAA;AAEV,IAAA,UAAA;AACA,IAAA,SAAA;AACA,IAAA,OAAA;AAHZ,IAAA,WAAA,CACY,UAA4B,EAC5B,SAA4B,EAC5B,OAAA,GAGN;AACF,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,SAAS,EAAE,GAAG;AACf,KAAA,EAAA;QARS,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;IAOf;IACK,YAAY,GAAG,IAAI,sBAAsB,CAAC;AACjD,QAAA,oBAAoB,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACpF,QAAA,QAAQ,EAAE,CAAC,KAAU,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxD,gBAAgB,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAC,CAAC;AACnH,QAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC7C,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACxC,KAAA,CAAC;IAEF,IAAI,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,CAClC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAC7C,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC,CACjD;IACH;AACD;MAGY,kBAAkB,CAAA;IAC7B,MAAM,CACJ,UAA4B,EAC5B,SAA4B,EAAA;AAE5B,QAAA,OAAO,IAAI,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC;IAC/C;uGANW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADN,MAAM,EAAA,CAAA;;2FAClB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;ACrDhC;;AAEG;;;;"}
|
|
@@ -44,7 +44,7 @@ const getAllProps = (obj, keys = Object.keys(obj)) => {
|
|
|
44
44
|
const proto = Object.getPrototypeOf(obj);
|
|
45
45
|
keys = Object.getOwnPropertyNames(proto)
|
|
46
46
|
.filter(v => v !== '__proto__')
|
|
47
|
-
.filter(v => Object.getOwnPropertyDescriptor(proto, v)
|
|
47
|
+
.filter(v => Object.getOwnPropertyDescriptor(proto, v)?.get instanceof Function)
|
|
48
48
|
.concat(keys);
|
|
49
49
|
return proto.constructor.name === 'Object' ? keys : getAllProps(proto, keys);
|
|
50
50
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nx-ddd-common.mjs","sources":["../../../../../packages/@nx-ddd/common/src/lib/utilities/generate-id.ts","../../../../../packages/@nx-ddd/common/src/lib/utilities/message.ts","../../../../../packages/@nx-ddd/common/src/lib/utilities/to-object.ts","../../../../../packages/@nx-ddd/common/src/lib/nx-ddd-common.ts"],"sourcesContent":["interface Options {\n letters: boolean;\n upperCase: boolean;\n numbers: boolean;\n symbols: boolean;\n}\n\nconst defaultOptions: Options = {\n letters: true,\n upperCase: true,\n numbers: true,\n symbols: false,\n}\n\nconst CHARACTERS = {\n letters: 'abcdefghijklmnopqrstuvwxyz',\n upperCase: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n numbers: '0123456789',\n symbols: '!#$%&()',\n};\n\nconst generateRandomString = (n: number, options: Options = defaultOptions): string => {\n const characters = Object.entries(CHARACTERS).filter(([k]) => options[k]).map(([_, v]) => v).join('');\n const genChar = (): string => characters.charAt(Math.floor(Math.random() * characters.length));\n\n return [...Array(n)].map(() => genChar()).join('');\n}\n\nexport const generateId = (n = 20): string => generateRandomString(n);\n","export function format(\n strings: TemplateStringsArray,\n ...keys: (string | number)[]\n): string {\n let result = strings.reduce((prev, current, index) => {\n const key = keys[index - 1];\n return `${prev}${key}${current}`;\n });\n\n // 先頭が開業でなくなるまで改行コードを削除\n while (result.startsWith('\\n')) {\n result = result.slice(1);\n }\n\n // 1行目のインデントの数を取得して、各行のインデントを同じ数削除\n const firstLineIndent = result.match(/^(\\s*)/)?.[1];\n if (firstLineIndent) {\n const regExp = new RegExp(`^${firstLineIndent}`);\n result = result\n .split('\\n')\n .map((line) => line.replace(regExp, ''))\n .join('\\n');\n }\n // 最初のスペースの数を取得して、各行のスペースを同じ数削除\n\n return result;\n}\n\nexport const message = format","const getAllProps = (obj: object, keys: string[] = Object.keys(obj)): string[] => {\n const proto = Object.getPrototypeOf(obj);\n keys = Object.getOwnPropertyNames(proto)\n .filter(v => v !== '__proto__')\n .filter(v => Object.getOwnPropertyDescriptor(proto, v)
|
|
1
|
+
{"version":3,"file":"nx-ddd-common.mjs","sources":["../../../../../packages/@nx-ddd/common/src/lib/utilities/generate-id.ts","../../../../../packages/@nx-ddd/common/src/lib/utilities/message.ts","../../../../../packages/@nx-ddd/common/src/lib/utilities/to-object.ts","../../../../../packages/@nx-ddd/common/src/lib/nx-ddd-common.ts"],"sourcesContent":["interface Options {\n letters: boolean;\n upperCase: boolean;\n numbers: boolean;\n symbols: boolean;\n}\n\nconst defaultOptions: Options = {\n letters: true,\n upperCase: true,\n numbers: true,\n symbols: false,\n}\n\nconst CHARACTERS = {\n letters: 'abcdefghijklmnopqrstuvwxyz',\n upperCase: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n numbers: '0123456789',\n symbols: '!#$%&()',\n};\n\nconst generateRandomString = (n: number, options: Options = defaultOptions): string => {\n const characters = Object.entries(CHARACTERS).filter(([k]) => options[k as keyof Options]).map(([_, v]) => v).join('');\n const genChar = (): string => characters.charAt(Math.floor(Math.random() * characters.length));\n\n return [...Array(n)].map(() => genChar()).join('');\n}\n\nexport const generateId = (n = 20): string => generateRandomString(n);\n","export function format(\n strings: TemplateStringsArray,\n ...keys: (string | number)[]\n): string {\n let result = strings.reduce((prev, current, index) => {\n const key = keys[index - 1];\n return `${prev}${key}${current}`;\n });\n\n // 先頭が開業でなくなるまで改行コードを削除\n while (result.startsWith('\\n')) {\n result = result.slice(1);\n }\n\n // 1行目のインデントの数を取得して、各行のインデントを同じ数削除\n const firstLineIndent = result.match(/^(\\s*)/)?.[1];\n if (firstLineIndent) {\n const regExp = new RegExp(`^${firstLineIndent}`);\n result = result\n .split('\\n')\n .map((line) => line.replace(regExp, ''))\n .join('\\n');\n }\n // 最初のスペースの数を取得して、各行のスペースを同じ数削除\n\n return result;\n}\n\nexport const message = format","const getAllProps = (obj: object, keys: string[] = Object.keys(obj)): string[] => {\n const proto = Object.getPrototypeOf(obj);\n keys = Object.getOwnPropertyNames(proto)\n .filter(v => v !== '__proto__')\n .filter(v => Object.getOwnPropertyDescriptor(proto, v)?.get instanceof Function)\n .concat(keys);\n\n return proto.constructor.name === 'Object' ? keys : getAllProps(proto, keys);\n}\n\nexport const toObject = (obj: object): object => getAllProps(obj).reduce((p, k) => ({...p, [k]: (obj as Record<string, unknown>)[k]}), {});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -6,8 +6,8 @@ declare class CloudStorageService {
|
|
|
6
6
|
private storage;
|
|
7
7
|
private task;
|
|
8
8
|
private task$;
|
|
9
|
-
readonly progress: i0.Signal<number>;
|
|
10
|
-
readonly progress$: Observable<number>;
|
|
9
|
+
readonly progress: i0.Signal<number | null | undefined>;
|
|
10
|
+
readonly progress$: Observable<number | null | undefined>;
|
|
11
11
|
getDownloadUrl(filePath: string): Promise<string>;
|
|
12
12
|
private convertToObservable;
|
|
13
13
|
upload(path: string, file: File): UploadTask;
|