stadata-js 0.1.2 → 0.2.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/dist/index.d.mts +58 -19
- package/dist/index.d.ts +58 -19
- package/dist/index.global.js +2 -2
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +5 -2
- package/dist/index.global.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/di/injector.ts","../src/core/failures/Failure.ts","../src/core/network/NetworkClient.ts","../src/core/network/interceptors/BaseNetworkInterceptor.ts","../src/core/network/interceptors/AuthInterceptor.ts","../src/core/log/Logger.ts","../src/core/network/interceptors/LoggingInterceptor.ts","../src/core/network/interceptors/RetryInterceptor.ts","../src/core/constants/ApiConstant.ts","../src/shared/enums/DataLanguage.ts","../src/shared/enums/DataAvailability.ts","../src/shared/enums/ClassificationType.ts","../src/shared/enums/DomainType.ts","../src/core/constants/ApiEndpoint.ts","../src/core/constants/QueryParamConstant.ts","../src/config/ApiConfig.ts","../src/core/base/BaseEntity.ts","../src/core/base/UseCase.ts","../src/features/domain/domain/entities/Domain.ts","../src/features/domain/domain/usecases/GetAllDomains.ts","../src/features/domain/data/datasources/DomainRemoteDataSource.ts","../src/shared/domain/entities/Pagination.ts","../src/shared/domain/entities/ApiResponse.ts","../src/shared/domain/entities/ListResult.ts","../src/features/domain/data/repositories/DomainRepositoryImpl.ts","../src/features/domain/injector/DomainInjector.ts","../src/features/publication/domain/entities/RelatedPublication.ts","../src/features/publication/domain/entities/Publication.ts","../src/features/publication/domain/usecases/GetAllPublications.ts","../src/features/publication/domain/usecases/GetPublicationById.ts","../src/features/publication/data/datasources/PublicationRemoteDataSource.ts","../src/features/publication/data/repositories/PublicationRepositoryImpl.ts","../src/features/publication/injector/PublicationInjector.ts","../src/features/infographic/domain/entities/Infographic.ts","../src/features/infographic/domain/usecases/GetAllInfographics.ts","../src/features/infographic/domain/usecases/GetInfographicById.ts","../src/features/infographic/data/datasources/InfographicRemoteDataSource.ts","../src/features/infographic/data/repositories/InfographicRepositoryImpl.ts","../src/features/infographic/injector/InfographicInjector.ts","../src/core/exceptions/StadataException.ts","../src/core/utils/CancelToken.ts","../src/core/utils/DateHelper.ts","../src/features/news/domain/entities/News.ts","../src/features/news/domain/usecases/GetAllNews.ts","../src/features/news/domain/usecases/GetNewsById.ts","../src/features/news/data/datasources/NewsRemoteDataSource.ts","../src/features/news/data/repositories/NewsRepositoryImpl.ts","../src/features/news/injector/NewsInjector.ts","../src/features/news-category/domain/entities/NewsCategory.ts","../src/features/news-category/domain/usecases/GetAllNewsCategories.ts","../src/features/news-category/domain/usecases/GetNewsCategoryById.ts","../src/features/news-category/data/datasources/NewsCategoryRemoteDataSource.ts","../src/features/news-category/data/repositories/NewsCategoryRepositoryImpl.ts","../src/features/news-category/injector/NewsCategoryInjector.ts","../src/features/press-release/domain/entities/PressRelease.ts","../src/features/press-release/domain/usecases/GetAllPressReleases.ts","../src/features/press-release/domain/usecases/GetPressReleaseById.ts","../src/features/press-release/data/datasources/PressReleaseRemoteDataSource.ts","../src/features/press-release/data/repositories/PressReleaseRepositoryImpl.ts","../src/features/press-release/injector/PressReleaseInjector.ts","../src/features/static-table/domain/entities/StaticTable.ts","../src/features/static-table/domain/usecases/GetAllStaticTables.ts","../src/features/static-table/domain/usecases/GetStaticTableById.ts","../src/features/static-table/data/datasources/StaticTableRemoteDataSource.ts","../src/features/static-table/data/repositories/StaticTableRepositoryImpl.ts","../src/features/static-table/injector/StaticTableInjector.ts","../src/features/subject/domain/entities/Subject.ts","../src/features/subject/domain/usecases/GetAllSubjects.ts","../src/features/subject/domain/usecases/GetSubjectById.ts","../src/features/subject/data/datasources/SubjectRemoteDataSource.ts","../src/features/subject/data/repositories/SubjectRepositoryImpl.ts","../src/features/subject/injector/SubjectInjector.ts","../src/features/subject-category/domain/entities/SubjectCategory.ts","../src/features/subject-category/domain/usecases/GetAllSubjectCategories.ts","../src/features/subject-category/domain/usecases/GetSubjectCategoryById.ts","../src/features/subject-category/data/datasources/SubjectCategoryRemoteDataSource.ts","../src/features/subject-category/data/repositories/SubjectCategoryRepositoryImpl.ts","../src/features/subject-category/injector/SubjectCategoryInjector.ts","../src/features/strategic-indicator/domain/entities/StrategicIndicator.ts","../src/features/strategic-indicator/domain/usecases/GetAllStrategicIndicators.ts","../src/features/strategic-indicator/domain/usecases/GetStrategicIndicatorById.ts","../src/features/strategic-indicator/data/datasources/StrategicIndicatorRemoteDataSource.ts","../src/features/strategic-indicator/data/repositories/StrategicIndicatorRepositoryImpl.ts","../src/features/strategic-indicator/injector/StrategicIndicatorInjector.ts","../src/features/variable/domain/entities/Variable.ts","../src/features/variable/domain/usecases/GetAllVariables.ts","../src/features/variable/domain/usecases/GetVariableById.ts","../src/features/variable/data/datasources/VariableRemoteDataSource.ts","../src/features/variable/data/repositories/VariableRepositoryImpl.ts","../src/features/variable/injector/VariableInjector.ts","../src/features/vertical-variable/domain/entities/VerticalVariable.ts","../src/features/vertical-variable/domain/usecases/GetAllVerticalVariables.ts","../src/features/vertical-variable/domain/usecases/GetVerticalVariableById.ts","../src/features/vertical-variable/data/datasources/VerticalVariableRemoteDataSource.ts","../src/features/vertical-variable/data/repositories/VerticalVariableRepositoryImpl.ts","../src/features/vertical-variable/injector/VerticalVariableInjector.ts","../src/features/unit/domain/entities/Unit.ts","../src/features/unit/domain/usecases/GetAllUnits.ts","../src/features/unit/domain/usecases/GetUnitById.ts","../src/features/unit/data/datasources/UnitRemoteDataSource.ts","../src/features/unit/data/repositories/UnitRepositoryImpl.ts","../src/features/unit/injector/UnitInjector.ts","../src/features/period/domain/entities/Period.ts","../src/features/period/domain/usecases/GetAllPeriods.ts","../src/features/period/domain/usecases/GetPeriodById.ts","../src/features/period/data/datasources/PeriodRemoteDataSource.ts","../src/features/period/data/repositories/PeriodRepositoryImpl.ts","../src/features/period/injector/PeriodInjector.ts","../src/features/derived-period/domain/entities/DerivedPeriod.ts","../src/features/derived-period/domain/usecases/GetAllDerivedPeriods.ts","../src/features/derived-period/domain/usecases/GetDerivedPeriodById.ts","../src/features/derived-period/data/datasources/DerivedPeriodRemoteDataSource.ts","../src/features/derived-period/data/repositories/DerivedPeriodRepositoryImpl.ts","../src/features/derived-period/injector/DerivedPeriodInjector.ts","../src/features/derived-variable/domain/entities/DerivedVariable.ts","../src/features/derived-variable/domain/usecases/GetAllDerivedVariables.ts","../src/features/derived-variable/domain/usecases/GetDerivedVariableById.ts","../src/features/derived-variable/data/datasources/DerivedVariableRemoteDataSource.ts","../src/features/derived-variable/data/repositories/DerivedVariableRepositoryImpl.ts","../src/features/derived-variable/injector/DerivedVariableInjector.ts","../src/features/statistic-classification/domain/entities/StatisticClassification.ts","../src/features/statistic-classification/domain/usecases/GetAllStatisticClassifications.ts","../src/features/statistic-classification/domain/usecases/GetStatisticClassificationById.ts","../src/features/statistic-classification/data/datasources/StatisticClassificationRemoteDataSource.ts","../src/features/statistic-classification/data/repositories/StatisticClassificationRepositoryImpl.ts","../src/features/statistic-classification/injector/StatisticClassificationInjector.ts","../src/features/census/domain/entities/CensusCategory.ts","../src/features/census/domain/entities/CensusEvent.ts","../src/features/census/domain/entities/CensusTopic.ts","../src/features/census/domain/entities/CensusArea.ts","../src/features/census/domain/entities/CensusDataset.ts","../src/features/census/domain/entities/CensusData.ts","../src/features/census/domain/usecases/GetAllCensuses.ts","../src/features/census/domain/usecases/GetCensusById.ts","../src/features/census/data/datasources/CensusRemoteDataSource.ts","../src/features/census/data/repositories/CensusRepositoryImpl.ts","../src/features/census/injector/CensusInjector.ts","../src/features/dynamic-table/domain/entities/DynamicTable.ts","../src/features/dynamic-table/domain/usecases/GetAllDynamicTables.ts","../src/features/dynamic-table/data/datasources/DynamicTableRemoteDataSource.ts","../src/features/dynamic-table/data/repositories/DynamicTableRepositoryImpl.ts","../src/features/dynamic-table/injector/DynamicTableInjector.ts","../src/api/StadataListImpl.ts","../src/api/StadataViewImpl.ts","../src/features/trade/domain/entities/Trade.ts","../src/features/trade/domain/usecases/GetTrade.ts","../src/features/trade/data/datasources/TradeRemoteDataSource.ts","../src/features/trade/data/repositories/TradeRepositoryImpl.ts","../src/features/trade/injector/TradeInjector.ts","../src/StadataJS.ts","../src/types/index.ts"],"names":["Injector","_Injector","key","instance","factory","Failure","_Failure","message","code","other","ApiFailure","statusCode","CancelledFailure","NetworkFailure","TimeoutFailure","NotFoundFailure","UnauthorizedFailure","ForbiddenFailure","ServerFailure","ParseFailure","ValidationFailure","NetworkClient","config","interceptor","index","url","options","method","fullUrl","headers","value","init","intercepted","processedResponse","err","data","ok","error","timeout","controller","timeoutId","signal","signal1","signal2","abort","response","status","cancelToken","processedError","result","BaseNetworkInterceptor","AuthInterceptor","apiKey","urlObj","LogLevel","ConsoleLogPrinter","entry","levelName","ProductionLogFilter","minLevel","Logger","_Logger","printer","filter","level","LoggingInterceptor","logger","RetryInterceptor","requestKey","retries","delay","ms","resolve","ApiConstant","DataLanguage","DataAvailability","ClassificationType","KBLILevel","KBKILevel","DomainType","ApiEndpoint","type","QueryParamConstant","ApiConfig","_ApiConfig","BaseEntity","_BaseEntity","updates","merged","UseCase","NoParamsUseCase","Domain","_Domain","id","name","json","GetAllDomains","repository","params","DomainRemoteDataSource","client","queryParams","queryString","Pagination","_Pagination","page","perPage","total","pages","count","ApiResponse","_ApiResponse","dataAvailability","pagination","itemFactory","item","paginationData","ListResult","_ListResult","DomainRepositoryImpl","remoteDataSource","paginationInfo","domainsData","domains","DomainInjector","injector","networkClient","dataSource","RelatedPublication","_RelatedPublication","title","releaseDate","cover","Publication","_Publication","issn","pdf","size","scheduledDate","updateDate","abstract","catalogueNumber","publicationNumber","relatedPublications","rp","relatedPubs","GetAllPublications","GetPublicationById","PublicationRemoteDataSource","PublicationRepositoryImpl","publicationsData","publications","publicationData","PublicationInjector","Infographic","_Infographic","image","category","downloadUrl","description","GetAllInfographics","GetInfographicById","InfographicRemoteDataSource","InfographicRepositoryImpl","infographicsData","infographics","infographicData","InfographicInjector","StadataException","_StadataException","ApiException","_ApiException","CancelledException","_CancelledException","NetworkException","_NetworkException","TimeoutException","_TimeoutException","NotFoundException","_NotFoundException","UnauthorizedException","_UnauthorizedException","ForbiddenException","_ForbiddenException","ServerException","_ServerException","CancelToken","_CancelToken","reason","token","DateHelper","dateString","date","timestamp","News","_News","content","categoryId","picture","GetAllNews","GetNewsById","NewsRemoteDataSource","NewsRepositoryImpl","newsData","newsList","NewsInjector","NewsCategory","_NewsCategory","GetAllNewsCategories","GetNewsCategoryById","NewsCategoryRemoteDataSource","NewsCategoryRepositoryImpl","categoriesData","categories","categoryData","NewsCategoryInjector","PressRelease","_PressRelease","subjectId","subject","updatedDate","slide","thumbnail","GetAllPressReleases","GetPressReleaseById","PressReleaseRemoteDataSource","PressReleaseRepositoryImpl","pressReleasesData","pressReleases","pressReleaseData","PressReleaseInjector","StaticTable","_StaticTable","updatedAt","excelUrl","GetAllStaticTables","GetStaticTableById","StaticTableRemoteDataSource","StaticTableRepositoryImpl","staticTablesData","staticTables","staticTableData","StaticTableInjector","Subject","_Subject","GetAllSubjects","GetSubjectById","SubjectRemoteDataSource","SubjectRepositoryImpl","subjectsData","subjects","subjectData","SubjectInjector","SubjectCategory","_SubjectCategory","GetAllSubjectCategories","GetSubjectCategoryById","SubjectCategoryRemoteDataSource","SubjectCategoryRepositoryImpl","SubjectCategoryInjector","StrategicIndicator","_StrategicIndicator","variableId","indicatorId","subjectCsa","unit","hashId","period","GetAllStrategicIndicators","GetStrategicIndicatorById","StrategicIndicatorRemoteDataSource","StrategicIndicatorRepositoryImpl","indicatorsData","indicators","indicatorData","StrategicIndicatorInjector","Variable","_Variable","verticalVariableCount","derivedVariableCount","graph","graphData","graphs","GetAllVariables","GetVariableById","VariableRemoteDataSource","VariableRepositoryImpl","variablesData","variables","variableData","VariableInjector","VerticalVariable","_VerticalVariable","label","itemId","groupId","groupName","GetAllVerticalVariables","GetVerticalVariableById","VerticalVariableRemoteDataSource","VerticalVariableRepositoryImpl","verticalVariablesData","verticalVariables","verticalVariableData","VerticalVariableInjector","Unit","_Unit","GetAllUnits","GetUnitById","UnitRemoteDataSource","UnitRepositoryImpl","unitsData","units","unitData","UnitInjector","Period","_Period","GetAllPeriods","GetPeriodById","PeriodRemoteDataSource","PeriodRepositoryImpl","periodsData","periods","periodData","PeriodInjector","DerivedPeriod","_DerivedPeriod","GetAllDerivedPeriods","GetDerivedPeriodById","DerivedPeriodRemoteDataSource","DerivedPeriodRepositoryImpl","derivedPeriodsData","derivedPeriods","derivedPeriodData","DerivedPeriodInjector","DerivedVariable","_DerivedVariable","GetAllDerivedVariables","GetDerivedVariableById","DerivedVariableRemoteDataSource","DerivedVariableRepositoryImpl","derivedVariablesData","derivedVariables","derivedVariableData","DerivedVariableInjector","StatisticClassification","_StatisticClassification","GetAllStatisticClassifications","GetStatisticClassificationById","StatisticClassificationRemoteDataSource","classificationType","StatisticClassificationRepositoryImpl","statisticClassificationsData","statisticClassifications","statisticClassificationData","StatisticClassificationInjector","CensusCategory","_CensusCategory","itemCode","itemName","CensusEvent","_CensusEvent","year","CensusTopic","_CensusTopic","topic","eventId","eventName","CensusArea","_CensusArea","mfdCode","slug","CensusDataset","_CensusDataset","topicId","CensusData","_CensusData","regionId","regionCode","regionName","indicatorName","regionLevel","categoryName","GetAllCensuses","GetCensusById","CensusRemoteDataSource","CensusRepositoryImpl","censusesData","wrapper","censuses","CensusInjector","DynamicTable","_DynamicTable","subjectName","notes","verticalVariableId","domain","csaSubjectId","csaSubjectName","graphId","graphName","varValue","subjValue","GetAllDynamicTables","DynamicTableRemoteDataSource","DynamicTableRepositoryImpl","dynamicTablesData","dynamicTables","DynamicTableInjector","StadataListImpl","StadataViewImpl","Trade","_Trade","netWeight","hsCode","port","country","GetTrade","TradeRemoteDataSource","TradeRepositoryImpl","TradeInjector","_StadataJS","interceptors","StadataJS","TradeSource","TradePeriod","HSCodeType"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Simple dependency injection container\n */\nexport class Injector {\n private static instance: Injector;\n private container: Map<string, unknown> = new Map();\n private factories: Map<string, () => unknown> = new Map();\n\n private constructor() {}\n\n static getInstance(): Injector {\n if (!Injector.instance) {\n Injector.instance = new Injector();\n }\n return Injector.instance;\n }\n\n /**\n * Register a singleton instance\n */\n register<T>(key: string, instance: T): void {\n this.container.set(key, instance);\n }\n\n /**\n * Register a factory function\n */\n registerFactory<T>(key: string, factory: () => T): void {\n this.factories.set(key, factory);\n }\n\n /**\n * Resolve a dependency\n */\n resolve<T>(key: string): T {\n // Check if instance exists in container\n if (this.container.has(key)) {\n return this.container.get(key) as T;\n }\n\n // Check if factory exists\n if (this.factories.has(key)) {\n const factory = this.factories.get(key);\n if (factory) {\n const instance = factory() as T;\n this.container.set(key, instance);\n return instance;\n }\n }\n\n throw new Error(`Dependency not found: ${key}`);\n }\n\n /**\n * Check if a dependency is registered\n */\n has(key: string): boolean {\n return this.container.has(key) || this.factories.has(key);\n }\n\n /**\n * Clear all dependencies\n */\n clear(): void {\n this.container.clear();\n this.factories.clear();\n }\n\n /**\n * Remove a specific dependency\n */\n remove(key: string): void {\n this.container.delete(key);\n this.factories.delete(key);\n }\n}\n\n/**\n * Helper function to get the injector instance\n */\nexport function getInjector(): Injector {\n return Injector.getInstance();\n}\n","/**\n * Base class for all failures in the application\n * Failures represent errors in the Result pattern\n */\nexport abstract class Failure {\n constructor(\n public readonly message: string,\n public readonly code?: string\n ) {}\n\n toString(): string {\n return `${this.constructor.name}: ${this.message}${this.code ? ` (${this.code})` : ''}`;\n }\n\n equals(other: unknown): boolean {\n if (!(other instanceof Failure)) {\n return false;\n }\n return (\n this.message === other.message &&\n this.code === other.code &&\n this.constructor.name === other.constructor.name\n );\n }\n}\n\n/**\n * Failure representing a network/API error\n */\nexport class ApiFailure extends Failure {\n constructor(\n message: string,\n public readonly statusCode?: number,\n code?: string\n ) {\n super(message, code);\n }\n}\n\n/**\n * Failure representing a request cancellation\n */\nexport class CancelledFailure extends Failure {\n constructor(message = 'Request was cancelled') {\n super(message, 'CANCELLED');\n }\n}\n\n/**\n * Failure representing a network error\n */\nexport class NetworkFailure extends Failure {\n constructor(message: string) {\n super(message, 'NETWORK_ERROR');\n }\n}\n\n/**\n * Failure representing a timeout\n */\nexport class TimeoutFailure extends Failure {\n constructor(message = 'Request timeout') {\n super(message, 'TIMEOUT');\n }\n}\n\n/**\n * Failure representing a resource not found (404)\n */\nexport class NotFoundFailure extends ApiFailure {\n constructor(message = 'Resource not found') {\n super(message, 404, 'NOT_FOUND');\n }\n}\n\n/**\n * Failure representing unauthorized access (401)\n */\nexport class UnauthorizedFailure extends ApiFailure {\n constructor(message = 'Unauthorized') {\n super(message, 401, 'UNAUTHORIZED');\n }\n}\n\n/**\n * Failure representing forbidden access (403)\n */\nexport class ForbiddenFailure extends ApiFailure {\n constructor(message = 'Forbidden') {\n super(message, 403, 'FORBIDDEN');\n }\n}\n\n/**\n * Failure representing a server error (5xx)\n */\nexport class ServerFailure extends ApiFailure {\n constructor(message = 'Server error', statusCode = 500) {\n super(message, statusCode, 'SERVER_ERROR');\n }\n}\n\n/**\n * Failure representing a data parsing error\n */\nexport class ParseFailure extends Failure {\n constructor(message: string) {\n super(message, 'PARSE_ERROR');\n }\n}\n\n/**\n * Failure representing a validation error\n */\nexport class ValidationFailure extends Failure {\n constructor(message: string) {\n super(message, 'VALIDATION_ERROR');\n }\n}\n\n/**\n * Feature-specific failures\n */\n\nexport class DomainFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class DomainNotAvailableFailure extends DomainFailure {\n constructor(message = 'Domain not available') {\n super(message, 'DOMAIN_NOT_AVAILABLE');\n }\n}\n\nexport class PublicationFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class InfographicFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class StaticTableFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class NewsFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class NewsCategoryFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class PressReleaseFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class SubjectFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class SubjectCategoryFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class StrategicIndicatorFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class VariableFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class VerticalVariableFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class UnitFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class PeriodFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class DerivedPeriodFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class DerivedVariableFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class DynamicTableFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class StatisticClassificationFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n\nexport class CensusFailure extends Failure {\n constructor(message: string, code?: string) {\n super(message, code);\n }\n}\n","import { Result, ok, err } from 'neverthrow';\nimport {\n ApiFailure,\n NetworkFailure,\n TimeoutFailure,\n NotFoundFailure,\n UnauthorizedFailure,\n ForbiddenFailure,\n ServerFailure,\n CancelledFailure,\n} from '../failures';\nimport { NetworkInterceptor } from './interceptors';\nimport { CancelToken } from '../utils';\n\n/**\n * HTTP methods\n */\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n\n/**\n * Network client configuration\n */\nexport interface NetworkClientConfig {\n baseURL?: string;\n timeout?: number;\n headers?: Record<string, string>;\n interceptors?: NetworkInterceptor[];\n}\n\n/**\n * Request options\n */\nexport interface RequestOptions {\n headers?: Record<string, string>;\n body?: unknown;\n cancelToken?: CancelToken;\n timeout?: number;\n}\n\n/**\n * Network client using fetch API\n */\nexport class NetworkClient {\n private baseURL: string;\n private timeout: number;\n private defaultHeaders: Record<string, string>;\n private interceptors: NetworkInterceptor[];\n\n constructor(config: NetworkClientConfig = {}) {\n this.baseURL = config.baseURL || '';\n this.timeout = config.timeout || 30000;\n this.defaultHeaders = {\n 'Content-Type': 'application/json',\n ...config.headers,\n };\n this.interceptors = config.interceptors || [];\n }\n\n /**\n * Adds an interceptor\n */\n addInterceptor(interceptor: NetworkInterceptor): void {\n this.interceptors.push(interceptor);\n }\n\n /**\n * Removes an interceptor\n */\n removeInterceptor(interceptor: NetworkInterceptor): void {\n const index = this.interceptors.indexOf(interceptor);\n if (index !== -1) {\n this.interceptors.splice(index, 1);\n }\n }\n\n /**\n * Performs a GET request\n */\n async get<T>(url: string, options?: RequestOptions): Promise<Result<T, ApiFailure>> {\n return this.request<T>('GET', url, options);\n }\n\n /**\n * Performs a POST request\n */\n async post<T>(url: string, options?: RequestOptions): Promise<Result<T, ApiFailure>> {\n return this.request<T>('POST', url, options);\n }\n\n /**\n * Performs a PUT request\n */\n async put<T>(url: string, options?: RequestOptions): Promise<Result<T, ApiFailure>> {\n return this.request<T>('PUT', url, options);\n }\n\n /**\n * Performs a DELETE request\n */\n async delete<T>(url: string, options?: RequestOptions): Promise<Result<T, ApiFailure>> {\n return this.request<T>('DELETE', url, options);\n }\n\n /**\n * Performs a PATCH request\n */\n async patch<T>(url: string, options?: RequestOptions): Promise<Result<T, ApiFailure>> {\n return this.request<T>('PATCH', url, options);\n }\n\n /**\n * Internal request method\n */\n private async request<T>(\n method: HttpMethod,\n url: string,\n options: RequestOptions = {}\n ): Promise<Result<T, ApiFailure>> {\n try {\n // Build full URL\n let fullUrl = this.buildUrl(url);\n\n // Build headers - omit Content-Type for GET requests to avoid CORS preflight\n const headers: Record<string, string> = {};\n if (method !== 'GET') {\n Object.assign(headers, this.defaultHeaders);\n } else {\n // For GET requests, only include non-Content-Type headers\n Object.entries(this.defaultHeaders).forEach(([key, value]) => {\n if (key.toLowerCase() !== 'content-type') {\n headers[key] = value;\n }\n });\n }\n Object.assign(headers, options.headers);\n\n // Build request init\n let init: RequestInit = {\n method,\n headers,\n };\n\n // Add body for non-GET requests\n if (method !== 'GET' && options.body) {\n init.body = JSON.stringify(options.body);\n }\n\n // Add cancel token signal\n if (options.cancelToken) {\n init.signal = options.cancelToken.signal;\n }\n\n // Apply request interceptors\n for (const interceptor of this.interceptors) {\n if (interceptor.onRequest) {\n const intercepted = await interceptor.onRequest(fullUrl, init);\n fullUrl = intercepted.url;\n init = intercepted.init;\n }\n }\n\n // Perform request with timeout\n const response = await this.fetchWithTimeout(fullUrl, init, options.timeout || this.timeout);\n\n // Apply response interceptors\n let processedResponse = response;\n for (const interceptor of this.interceptors) {\n if (interceptor.onResponse) {\n processedResponse = await interceptor.onResponse(processedResponse);\n }\n }\n\n // Check if response is ok\n if (!processedResponse.ok) {\n return err(await this.handleErrorResponse(processedResponse));\n }\n\n // Parse JSON response\n const data = (await processedResponse.json()) as T;\n return ok(data);\n } catch (error) {\n return err(await this.handleError(error, options.cancelToken));\n }\n }\n\n /**\n * Fetch with timeout\n */\n private async fetchWithTimeout(\n url: string,\n init: RequestInit,\n timeout: number\n ): Promise<Response> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n // Combine signals if one already exists\n const signal =\n init.signal && init.signal instanceof AbortSignal\n ? this.combineSignals(init.signal, controller.signal)\n : controller.signal;\n\n const response = await fetch(url, { ...init, signal });\n return response;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n /**\n * Combines multiple AbortSignals\n */\n private combineSignals(signal1: AbortSignal, signal2: AbortSignal): AbortSignal {\n const controller = new AbortController();\n\n const abort = (): void => controller.abort();\n signal1.addEventListener('abort', abort);\n signal2.addEventListener('abort', abort);\n\n return controller.signal;\n }\n\n /**\n * Builds full URL\n */\n private buildUrl(url: string): string {\n if (url.startsWith('http://') || url.startsWith('https://')) {\n return url;\n }\n return `${this.baseURL}${url}`;\n }\n\n /**\n * Handles error responses\n */\n private async handleErrorResponse(response: Response): Promise<ApiFailure> {\n const { status } = response;\n let message: string;\n\n try {\n const data = (await response.json()) as { message?: string; error?: string };\n message = data.message || data.error || response.statusText;\n } catch {\n message = response.statusText;\n }\n\n switch (status) {\n case 401:\n return new UnauthorizedFailure(message);\n case 403:\n return new ForbiddenFailure(message);\n case 404:\n return new NotFoundFailure(message);\n case 500:\n case 502:\n case 503:\n case 504:\n return new ServerFailure(message, status);\n default:\n return new ApiFailure(message, status);\n }\n }\n\n /**\n * Handles errors\n */\n private async handleError(error: unknown, cancelToken?: CancelToken): Promise<ApiFailure> {\n // Apply error interceptors\n let processedError = error instanceof Error ? error : new Error(String(error));\n for (const interceptor of this.interceptors) {\n if (interceptor.onError) {\n const result = await interceptor.onError(processedError);\n if (result) {\n processedError = result;\n }\n }\n }\n\n // Check if request was cancelled\n if (cancelToken?.isCancelled || (error as Error).name === 'AbortError') {\n return new CancelledFailure(cancelToken?.reason);\n }\n\n // Check for timeout\n if (\n processedError.name === 'AbortError' ||\n processedError.message.includes('timeout') ||\n processedError.message.includes('aborted')\n ) {\n return new TimeoutFailure();\n }\n\n // Network error\n if (\n processedError.message.includes('network') ||\n processedError.message.includes('fetch') ||\n processedError.message.includes('ECONNREFUSED')\n ) {\n return new NetworkFailure(processedError.message);\n }\n\n // Generic API failure\n return new ApiFailure(processedError.message);\n }\n}\n","/**\n * Request interceptor result\n */\nexport interface InterceptedRequest {\n url: string;\n init: RequestInit;\n}\n\n/**\n * Base interface for network interceptors\n */\nexport interface NetworkInterceptor {\n /**\n * Intercepts outgoing requests\n * @param url - Request URL\n * @param init - Request init options\n * @returns Modified request (url and init) or null to proceed unchanged\n */\n onRequest?(url: string, init: RequestInit): InterceptedRequest | Promise<InterceptedRequest>;\n\n /**\n * Intercepts incoming responses\n * @param response - Response object\n * @returns Modified response or null to proceed unchanged\n */\n onResponse?(response: Response): Response | Promise<Response>;\n\n /**\n * Intercepts errors\n * @param error - Error object\n * @returns Modified error or null to proceed with original error\n */\n onError?(error: Error): Error | Promise<Error> | null;\n}\n\n/**\n * Abstract base class for network interceptors\n */\nexport abstract class BaseNetworkInterceptor implements NetworkInterceptor {\n onRequest?(url: string, init: RequestInit): InterceptedRequest | Promise<InterceptedRequest>;\n onResponse?(response: Response): Response | Promise<Response>;\n onError?(error: Error): Error | Promise<Error> | null;\n}\n","import { BaseNetworkInterceptor, InterceptedRequest } from './BaseNetworkInterceptor';\n\n/**\n * Interceptor that injects API key into requests\n */\nexport class AuthInterceptor extends BaseNetworkInterceptor {\n constructor(private apiKey: string) {\n super();\n }\n\n onRequest(url: string, init: RequestInit): InterceptedRequest {\n // Add API key to URL query parameters\n const urlObj = new URL(url);\n urlObj.searchParams.set('key', this.apiKey);\n\n return {\n url: urlObj.toString(),\n init,\n };\n }\n\n /**\n * Updates the API key\n */\n setApiKey(apiKey: string): void {\n this.apiKey = apiKey;\n }\n\n /**\n * Gets the current API key\n */\n getApiKey(): string {\n return this.apiKey;\n }\n}\n","/**\n * Log levels\n */\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n FATAL = 4,\n NONE = 5,\n}\n\n/**\n * Log entry interface\n */\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n timestamp: Date;\n data?: unknown;\n error?: Error;\n}\n\n/**\n * Log printer interface\n */\nexport interface LogPrinter {\n print(entry: LogEntry): void;\n}\n\n/**\n * Log filter interface\n */\nexport interface LogFilter {\n shouldLog(entry: LogEntry): boolean;\n}\n\n/**\n * Default console log printer\n */\nexport class ConsoleLogPrinter implements LogPrinter {\n print(entry: LogEntry): void {\n const levelName = LogLevel[entry.level];\n const timestamp = entry.timestamp.toISOString();\n const message = `[${timestamp}] [${levelName}] ${entry.message}`;\n\n switch (entry.level) {\n case LogLevel.DEBUG:\n // eslint-disable-next-line no-console\n console.debug(message, entry.data);\n break;\n case LogLevel.INFO:\n // eslint-disable-next-line no-console\n console.info(message, entry.data);\n break;\n case LogLevel.WARN:\n // eslint-disable-next-line no-console\n console.warn(message, entry.data);\n break;\n case LogLevel.ERROR:\n case LogLevel.FATAL:\n // eslint-disable-next-line no-console\n console.error(message, entry.error || entry.data);\n break;\n }\n }\n}\n\n/**\n * Production log filter\n * Filters out debug logs in production\n */\nexport class ProductionLogFilter implements LogFilter {\n constructor(private minLevel: LogLevel = LogLevel.INFO) {}\n\n shouldLog(entry: LogEntry): boolean {\n return entry.level >= this.minLevel;\n }\n}\n\n/**\n * Main logger class\n */\nexport class Logger {\n private static instance: Logger;\n private printer: LogPrinter;\n private filter: LogFilter;\n private enabled = true;\n\n private constructor(\n printer: LogPrinter = new ConsoleLogPrinter(),\n filter: LogFilter = new ProductionLogFilter()\n ) {\n this.printer = printer;\n this.filter = filter;\n }\n\n /**\n * Gets the singleton logger instance\n */\n static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger();\n }\n return Logger.instance;\n }\n\n /**\n * Configures the logger\n */\n configure(options: { printer?: LogPrinter; filter?: LogFilter; enabled?: boolean }): void {\n if (options.printer) {\n this.printer = options.printer;\n }\n if (options.filter) {\n this.filter = options.filter;\n }\n if (options.enabled !== undefined) {\n this.enabled = options.enabled;\n }\n }\n\n /**\n * Logs a debug message\n */\n debug(message: string, data?: unknown): void {\n this.log(LogLevel.DEBUG, message, data);\n }\n\n /**\n * Logs an info message\n */\n info(message: string, data?: unknown): void {\n this.log(LogLevel.INFO, message, data);\n }\n\n /**\n * Logs a warning message\n */\n warn(message: string, data?: unknown): void {\n this.log(LogLevel.WARN, message, data);\n }\n\n /**\n * Logs an error message\n */\n error(message: string, error?: unknown): void {\n const err = error instanceof Error ? error : undefined;\n const data = error instanceof Error ? undefined : error;\n this.log(LogLevel.ERROR, message, data, err);\n }\n\n /**\n * Logs a fatal error message\n */\n fatal(message: string, error?: unknown): void {\n const err = error instanceof Error ? error : undefined;\n const data = error instanceof Error ? undefined : error;\n this.log(LogLevel.FATAL, message, data, err);\n }\n\n /**\n * Internal log method\n */\n private log(level: LogLevel, message: string, data?: unknown, error?: Error): void {\n if (!this.enabled) {\n return;\n }\n\n const entry: LogEntry = {\n level,\n message,\n timestamp: new Date(),\n data,\n error,\n };\n\n if (this.filter.shouldLog(entry)) {\n this.printer.print(entry);\n }\n }\n\n /**\n * Enables logging\n */\n enable(): void {\n this.enabled = true;\n }\n\n /**\n * Disables logging\n */\n disable(): void {\n this.enabled = false;\n }\n}\n\n/**\n * Helper function to get the logger instance\n */\nexport function getLogger(): Logger {\n return Logger.getInstance();\n}\n","import { BaseNetworkInterceptor, InterceptedRequest } from './BaseNetworkInterceptor';\nimport { Logger } from '../../log';\n\n/**\n * Interceptor that logs requests and responses\n */\nexport class LoggingInterceptor extends BaseNetworkInterceptor {\n private logger: Logger;\n\n constructor(logger?: Logger) {\n super();\n this.logger = logger || Logger.getInstance();\n }\n\n onRequest(url: string, init: RequestInit): InterceptedRequest {\n this.logger.debug(`HTTP Request: ${init.method || 'GET'} ${url}`, {\n headers: init.headers,\n body: init.body,\n });\n return { url, init };\n }\n\n onResponse(response: Response): Response {\n this.logger.debug(`HTTP Response: ${response.status} ${response.url}`, {\n status: response.status,\n statusText: response.statusText,\n headers: Object.fromEntries(response.headers.entries()),\n });\n return response;\n }\n\n onError(error: Error): Error {\n this.logger.error(`HTTP Error: ${error.message}`, error);\n return error;\n }\n}\n","import { BaseNetworkInterceptor } from './BaseNetworkInterceptor';\nimport { Logger } from '../../log';\n\n/**\n * Configuration for retry interceptor\n */\nexport interface RetryConfig {\n /**\n * Maximum number of retry attempts\n */\n maxRetries: number;\n\n /**\n * Delay between retries in milliseconds\n */\n retryDelay: number;\n\n /**\n * HTTP status codes that should trigger a retry\n */\n retryableStatusCodes?: number[];\n\n /**\n * Whether to use exponential backoff\n */\n exponentialBackoff?: boolean;\n}\n\n/**\n * Interceptor that retries failed requests\n */\nexport class RetryInterceptor extends BaseNetworkInterceptor {\n private logger: Logger;\n private config: Required<RetryConfig>;\n private retryCount = new Map<string, number>();\n\n constructor(config: Partial<RetryConfig> = {}, logger?: Logger) {\n super();\n this.logger = logger || Logger.getInstance();\n this.config = {\n maxRetries: config.maxRetries ?? 3,\n retryDelay: config.retryDelay ?? 1000,\n retryableStatusCodes: config.retryableStatusCodes ?? [408, 429, 500, 502, 503, 504],\n exponentialBackoff: config.exponentialBackoff ?? true,\n };\n }\n\n async onResponse(response: Response): Promise<Response> {\n const requestKey = response.url;\n const retries = this.retryCount.get(requestKey) || 0;\n\n if (\n !response.ok &&\n this.config.retryableStatusCodes.includes(response.status) &&\n retries < this.config.maxRetries\n ) {\n this.retryCount.set(requestKey, retries + 1);\n\n const delay = this.config.exponentialBackoff\n ? this.config.retryDelay * Math.pow(2, retries)\n : this.config.retryDelay;\n\n this.logger.warn(\n `Retrying request (${retries + 1}/${this.config.maxRetries}) after ${delay}ms: ${response.url}`\n );\n\n await this.sleep(delay);\n\n // Note: Actual retry logic would need to be implemented in NetworkClient\n // This interceptor signals the need for retry\n throw new Error(`RETRY_NEEDED:${requestKey}`);\n }\n\n if (response.ok || retries >= this.config.maxRetries) {\n this.retryCount.delete(requestKey);\n }\n\n return response;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n /**\n * Resets retry count for a specific request\n */\n resetRetryCount(url: string): void {\n this.retryCount.delete(url);\n }\n\n /**\n * Clears all retry counts\n */\n clearAllRetryCounts(): void {\n this.retryCount.clear();\n }\n}\n","/**\n * API configuration constants\n */\nexport const ApiConstant = {\n /**\n * Base URL for the BPS Stadata API\n */\n BASE_URL: 'https://webapi.bps.go.id/v1/api',\n\n /**\n * Default timeout for API requests (in milliseconds)\n */\n DEFAULT_TIMEOUT: 30000,\n\n /**\n * API version\n */\n API_VERSION: 'v1',\n\n /**\n * Default page size for paginated requests\n */\n DEFAULT_PAGE_SIZE: 10,\n\n /**\n * Maximum page size allowed\n */\n MAX_PAGE_SIZE: 100,\n} as const;\n","/**\n * Supported data languages\n */\nexport enum DataLanguage {\n /**\n * Indonesian language\n */\n ID = 'ind',\n\n /**\n * English language\n */\n EN = 'eng',\n}\n\n/**\n * Type guard to check if a string is a valid DataLanguage\n */\nexport function isDataLanguage(value: string): value is DataLanguage {\n return Object.values(DataLanguage).includes(value as DataLanguage);\n}\n\n/**\n * Converts a string to DataLanguage with fallback to Indonesian\n */\nexport function toDataLanguage(value: string): DataLanguage {\n return isDataLanguage(value) ? value : DataLanguage.ID;\n}\n","/**\n * Data availability status\n */\nexport enum DataAvailability {\n /**\n * Data is available\n */\n AVAILABLE = 'available',\n\n /**\n * Data is not available\n */\n NOT_AVAILABLE = 'not-available',\n\n /**\n * List is not available\n */\n LIST_NOT_AVAILABLE = 'list-not-available',\n}\n\n/**\n * Type guard to check if a string is a valid DataAvailability\n */\nexport function isDataAvailability(value: string): value is DataAvailability {\n return Object.values(DataAvailability).includes(value as DataAvailability);\n}\n\n/**\n * Converts a string to DataAvailability with fallback\n */\nexport function toDataAvailability(value: string): DataAvailability {\n return isDataAvailability(value) ? value : DataAvailability.NOT_AVAILABLE;\n}\n","/**\n * Statistical classification types\n */\nexport enum ClassificationType {\n /** KBLI 2009 - Klasifikasi Baku Lapangan Usaha Indonesia 2009 */\n KBLI_2009 = 'kbli2009',\n /** KBLI 2015 - Klasifikasi Baku Lapangan Usaha Indonesia 2015 */\n KBLI_2015 = 'kbli2015',\n /** KBLI 2017 - Klasifikasi Baku Lapangan Usaha Indonesia 2017 */\n KBLI_2017 = 'kbli2017',\n /** KBLI 2020 - Klasifikasi Baku Lapangan Usaha Indonesia 2020 (default) */\n KBLI_2020 = 'kbli2020',\n /** KBKI 2015 - Klasifikasi Baku Komoditas Indonesia 2015 */\n KBKI_2015 = 'kbki2015',\n}\n\n/**\n * KBLI Classification levels\n */\nexport enum KBLILevel {\n /** Category - Broadest level, single letter (A-U) */\n CATEGORY = 'kategori',\n /** Primary Group - Two-character code */\n PRIMARY_GROUP = 'golongan pokok',\n /** Group - Three-character code */\n GROUP = 'golongan',\n /** Sub Group - Four-character code */\n SUB_GROUP = 'subgolongan',\n /** Cluster - Most detailed, five-character code */\n CLUSTER = 'kelompok',\n}\n\n/**\n * KBKI Classification levels\n */\nexport enum KBKILevel {\n /** Section - Broadest level, 1-digit code */\n SECTION = 'seksi',\n /** Division - 2-digit code */\n DIVISION = 'divisi',\n /** Group - 3-digit code */\n GROUP = 'kelompok',\n /** Classes - 4-digit code */\n CLASSES = 'kelas',\n /** Sub Class - 5-digit code */\n SUB_CLASS = 'subkelas',\n /** Commodity Group - 7-digit code */\n COMMODITY_GROUP = 'kelompok komoditas',\n /** Commodity - Most detailed, 10-digit code */\n COMMODITY = 'komoditas',\n}\n\n/**\n * Union type for classification levels\n */\nexport type ClassificationLevel = KBLILevel | KBKILevel;\n","/**\n * Domain type for filtering domains\n */\nexport enum DomainType {\n /** Get all domains */\n ALL = 'all',\n /** Get all province domains */\n PROVINCE = 'prov',\n /** Get all regency domains */\n REGENCY = 'kab',\n /** Get all regency domains by province code */\n REGENCY_BY_PROVINCE = 'kabbyprov',\n}\n","import { ClassificationType } from '../../shared/enums';\n\n/**\n * API endpoint constants\n */\nexport const ApiEndpoint = {\n // Domain endpoints\n DOMAIN_LIST: '/domain',\n\n // Publication endpoints\n PUBLICATION_LIST: '/list/model/publication',\n PUBLICATION_VIEW: '/view/model/publication',\n\n // Infographic endpoints\n INFOGRAPHIC_LIST: '/list/model/infographic',\n INFOGRAPHIC_VIEW: '/view/model/infographic',\n\n // Static table endpoints\n STATIC_TABLE_LIST: '/list/model/statictable',\n STATIC_TABLE_VIEW: '/view/model/statictable',\n\n // News endpoints\n NEWS_LIST: '/list/model/news',\n NEWS_VIEW: '/view/model/news',\n\n // News category endpoints\n NEWS_CATEGORY_LIST: '/list/model/newscategory',\n NEWS_CATEGORY_VIEW: '/view/model/newscategory',\n\n // Press release endpoints\n PRESS_RELEASE_LIST: '/list/model/pressrelease',\n PRESS_RELEASE_VIEW: '/view/model/pressrelease',\n\n // Subject endpoints\n SUBJECT_LIST: '/list/model/subject',\n SUBJECT_VIEW: '/view/model/subject',\n\n // Subject category endpoints\n SUBJECT_CATEGORY_LIST: '/list/model/subcat',\n SUBJECT_CATEGORY_VIEW: '/view/model/subcat',\n\n // Strategic indicator endpoints\n STRATEGIC_INDICATOR_LIST: '/list/model/indicators',\n STRATEGIC_INDICATOR_VIEW: '/view/model/indicators',\n\n // Variable endpoints\n VARIABLE_LIST: '/list/model/var',\n VARIABLE_VIEW: '/view/model/var',\n\n // Vertical variable endpoints\n VERTICAL_VARIABLE_LIST: '/list/model/vervar',\n VERTICAL_VARIABLE_VIEW: '/view/model/vervar',\n\n // Unit endpoints\n UNIT_LIST: '/list/model/unit',\n UNIT_VIEW: '/view/model/unit',\n\n // Period endpoints\n PERIOD_LIST: '/list/model/th',\n PERIOD_VIEW: '/view/model/th',\n\n // Derived period endpoints\n DERIVED_PERIOD_LIST: '/list/model/turth',\n DERIVED_PERIOD_VIEW: '/view/model/turth',\n\n // Derived variable endpoints\n DERIVED_VARIABLE_LIST: '/list/model/turvar',\n DERIVED_VARIABLE_VIEW: '/view/model/turvar',\n\n // Dynamic table endpoints\n DYNAMIC_TABLE_LIST: '/list/model/data',\n\n // Statistic classification endpoint (dynamic based on type, no separate list/view)\n statisticClassification: (type: ClassificationType = ClassificationType.KBLI_2020) =>\n `/view/model/${type}`,\n\n // Census endpoint (uses interoperabilitas path, not model)\n CENSUS: '/interoperabilitas/datasource/sensus',\n\n // Trade endpoints\n TRADE: '/dataexim',\n} as const;\n\n/**\n * Type helper for API endpoints\n */\nexport type Endpoint = (typeof ApiEndpoint)[keyof typeof ApiEndpoint];\n","/**\n * Query parameter constants for API requests\n */\nexport const QueryParamConstant = {\n /**\n * API key parameter\n */\n KEY: 'key',\n\n /**\n * Domain code parameter\n */\n DOMAIN: 'domain',\n\n /**\n * Language parameter\n */\n LANG: 'lang',\n\n /**\n * Page number parameter\n */\n PAGE: 'page',\n\n /**\n * Page size/limit parameter\n */\n PER_PAGE: 'per_page',\n\n /**\n * Keyword search parameter\n */\n KEYWORD: 'keyword',\n\n /**\n * Month parameter\n */\n MONTH: 'month',\n\n /**\n * Year parameter\n */\n YEAR: 'year',\n\n /**\n * Subject ID parameter\n */\n SUBJECT: 'subj',\n\n /**\n * Variable ID parameter\n */\n VARIABLE: 'var',\n\n /**\n * Turvar ID parameter (derived variable)\n */\n TURVAR: 'turvar',\n\n /**\n * Turth ID parameter (derived period)\n */\n TURTH: 'turth',\n\n /**\n * Period ID parameter\n */\n PERIOD: 'th',\n\n /**\n * Type parameter\n */\n TYPE: 'type',\n\n /**\n * Table ID parameter\n */\n TABLE: 'table',\n\n /**\n * Model parameter\n */\n MODEL: 'model',\n\n /**\n * ID parameter\n */\n ID: 'id',\n\n /**\n * Show deleted parameter\n */\n SHOW_DELETED: 'show_deleted',\n} as const;\n\n/**\n * Type helper for query parameters\n */\nexport type QueryParam = (typeof QueryParamConstant)[keyof typeof QueryParamConstant];\n","/**\n * API configuration singleton\n * Holds the API key and other configuration\n */\nexport class ApiConfig {\n private static instance: ApiConfig;\n private _apiKey: string | null = null;\n\n private constructor() {}\n\n /**\n * Gets the singleton instance\n */\n static getInstance(): ApiConfig {\n if (!ApiConfig.instance) {\n ApiConfig.instance = new ApiConfig();\n }\n return ApiConfig.instance;\n }\n\n /**\n * Sets the API key\n */\n setApiKey(apiKey: string): void {\n this._apiKey = apiKey;\n }\n\n /**\n * Gets the API key\n */\n getApiKey(): string {\n if (!this._apiKey) {\n throw new Error('API key not set. Call setApiKey() first.');\n }\n return this._apiKey;\n }\n\n /**\n * Checks if API key is set\n */\n hasApiKey(): boolean {\n return this._apiKey !== null;\n }\n\n /**\n * Clears the API key\n */\n clearApiKey(): void {\n this._apiKey = null;\n }\n}\n","/**\n * Base entity interface for all domain entities\n */\nexport interface IBaseEntity {\n /**\n * Converts the entity to a JSON object\n */\n toJson(): Record<string, unknown>;\n\n /**\n * Compares this entity with another entity for equality\n */\n equals(other: unknown): boolean;\n}\n\n/**\n * Abstract base class for all domain entities\n * Provides common functionality like equality comparison and JSON serialization\n */\nexport abstract class BaseEntity implements IBaseEntity {\n /**\n * Converts the entity to a JSON object\n * Must be implemented by subclasses\n */\n abstract toJson(): Record<string, unknown>;\n\n /**\n * String representation of the entity\n */\n toString(): string {\n return JSON.stringify(this.toJson(), null, 2);\n }\n\n /**\n * Compares this entity with another entity for equality\n * Default implementation compares JSON representations\n */\n equals(other: unknown): boolean {\n if (!(other instanceof BaseEntity)) {\n return false;\n }\n return JSON.stringify(this.toJson()) === JSON.stringify(other.toJson());\n }\n\n /**\n * Creates a shallow copy of the entity\n */\n copyWith(updates: Partial<Record<string, unknown>>): this {\n const json = this.toJson();\n const merged = { ...json, ...updates };\n // This is a generic implementation, subclasses may override\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return Object.assign(Object.create(Object.getPrototypeOf(this)), merged) as this;\n }\n}\n","import { Result } from 'neverthrow';\nimport { Failure } from '../failures/Failure';\n\n/**\n * Abstract base class for all use cases\n * Implements the Command pattern for business logic\n *\n * @template Params - The input parameters type\n * @template Type - The return type on success\n */\nexport abstract class UseCase<Params, Type> {\n /**\n * Executes the use case\n *\n * @param params - Input parameters for the use case\n * @returns A Result containing either the success value or a Failure\n */\n abstract execute(params: Params): Promise<Result<Type, Failure>>;\n\n /**\n * Optional cleanup method called when use case is disposed\n */\n dispose?(): void;\n}\n\n/**\n * Use case that doesn't require parameters\n */\nexport abstract class NoParamsUseCase<Type> extends UseCase<void, Type> {\n /**\n * Executes the use case without parameters\n */\n abstract execute(): Promise<Result<Type, Failure>>;\n\n /**\n * Convenience method to call execute without parameters\n */\n call(): Promise<Result<Type, Failure>> {\n return this.execute();\n }\n}\n","import { BaseEntity } from '../../../../core/base';\n\n/**\n * Domain entity representing a BPS domain/region\n */\nexport class Domain extends BaseEntity {\n constructor(\n public readonly id: string,\n public readonly name: string,\n public readonly url: string\n ) {\n super();\n }\n\n toJson(): Record<string, unknown> {\n return {\n domain_id: this.id,\n domain_name: this.name,\n domain_url: this.url,\n };\n }\n\n static fromJson(json: Record<string, unknown>): Domain {\n return new Domain(\n (json['domain_id'] as string) || (json['id'] as string) || '',\n (json['domain_name'] as string) || (json['name'] as string) || '',\n (json['domain_url'] as string) || (json['url'] as string) || ''\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core/base';\nimport { ApiFailure } from '../../../../core/failures';\nimport { DomainRepository } from '../repositories';\nimport { Domain } from '../entities';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { DomainListParams } from '../../../../types';\n\n/**\n * Use case for getting all domains\n */\nexport class GetAllDomains extends UseCase<DomainListParams | undefined, ListResult<Domain>> {\n constructor(private repository: DomainRepository) {\n super();\n }\n\n async execute(params?: DomainListParams): Promise<Result<ListResult<Domain>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { ApiFailure } from '../../../../core/failures';\nimport { DomainListParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for domains\n * Handles API calls for domain data\n */\nexport class DomainRemoteDataSource {\n constructor(private client: NetworkClient) {}\n\n /**\n * Fetches all domains from API\n */\n async getAll(\n params: DomainListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n type: params.type,\n };\n\n if (params.provinceCode) {\n queryParams['prov'] = params.provinceCode;\n }\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n if (params.page) {\n queryParams['page'] = params.page.toString();\n }\n if (params.perPage) {\n queryParams['per_page'] = params.perPage.toString();\n }\n if (params.keyword) {\n queryParams['keyword'] = params.keyword;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.DOMAIN_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { BaseEntity } from '../../../core/base';\n\n/**\n * Pagination entity\n */\nexport class Pagination extends BaseEntity {\n constructor(\n public readonly page: number,\n public readonly perPage: number,\n public readonly total: number,\n public readonly pages: number,\n public readonly count: number\n ) {\n super();\n }\n\n /**\n * Checks if there is a next page\n */\n get hasNextPage(): boolean {\n return this.page < this.pages;\n }\n\n /**\n * Checks if there is a previous page\n */\n get hasPreviousPage(): boolean {\n return this.page > 1;\n }\n\n /**\n * Gets the next page number\n */\n get nextPage(): number | null {\n return this.hasNextPage ? this.page + 1 : null;\n }\n\n /**\n * Gets the previous page number\n */\n get previousPage(): number | null {\n return this.hasPreviousPage ? this.page - 1 : null;\n }\n\n toJson(): Record<string, unknown> {\n return {\n page: this.page,\n per_page: this.perPage,\n total: this.total,\n pages: this.pages,\n count: this.count,\n };\n }\n\n static fromJson(json: Record<string, unknown>): Pagination {\n return new Pagination(\n (json['page'] as number) || 1,\n (json['per_page'] as number) || 10,\n (json['total'] as number) || 0,\n (json['pages'] as number) || 0,\n (json['count'] as number) || 0\n );\n }\n}\n","import { BaseEntity } from '../../../core/base';\nimport { Pagination } from './Pagination';\n\n/**\n * Generic API response entity\n */\nexport class ApiResponse<T> extends BaseEntity {\n constructor(\n public readonly data: T[],\n public readonly dataAvailability: string,\n public readonly pagination?: Pagination\n ) {\n super();\n }\n\n /**\n * Checks if data is available\n */\n get isAvailable(): boolean {\n return this.dataAvailability === 'available';\n }\n\n /**\n * Gets the total number of items\n */\n get totalItems(): number {\n return this.pagination?.total || this.data.length;\n }\n\n /**\n * Checks if the response has data\n */\n get hasData(): boolean {\n return this.data.length > 0;\n }\n\n toJson(): Record<string, unknown> {\n return {\n data: this.data,\n data_availability: this.dataAvailability,\n pagination: this.pagination?.toJson(),\n };\n }\n\n static fromJson<T>(\n json: Record<string, unknown>,\n itemFactory: (item: Record<string, unknown>) => T\n ): ApiResponse<T> {\n const dataArray = (json['data'] as Array<Record<string, unknown>>) || [];\n const data = dataArray.map((item) => itemFactory(item));\n\n const paginationData = json['pagination'] as Record<string, unknown> | undefined;\n const pagination = paginationData ? Pagination.fromJson(paginationData) : undefined;\n\n return new ApiResponse(data, (json['data-availability'] as string) || 'available', pagination);\n }\n}\n","import { BaseEntity } from '../../../core/base';\nimport { Pagination } from './Pagination';\n\n/**\n * List result entity for paginated responses\n */\nexport class ListResult<T> extends BaseEntity {\n constructor(\n public readonly data: T[],\n public readonly pagination: Pagination\n ) {\n super();\n }\n\n /**\n * Checks if there is more data to load\n */\n get hasMore(): boolean {\n return this.pagination.hasNextPage;\n }\n\n /**\n * Gets the total number of items across all pages\n */\n get totalItems(): number {\n return this.pagination.total;\n }\n\n /**\n * Gets the current page items\n */\n get items(): T[] {\n return this.data;\n }\n\n /**\n * Gets the number of items in current page\n */\n get itemCount(): number {\n return this.data.length;\n }\n\n toJson(): Record<string, unknown> {\n return {\n data: this.data,\n pagination: this.pagination.toJson(),\n };\n }\n\n static fromJson<T>(\n json: Record<string, unknown>,\n itemFactory: (item: Record<string, unknown>) => T\n ): ListResult<T> {\n const dataArray = (json['data'] as Array<Record<string, unknown>>) || [];\n const data = dataArray.map((item) => itemFactory(item));\n\n const paginationData = json['pagination'] as Record<string, unknown>;\n const pagination = Pagination.fromJson(paginationData);\n\n return new ListResult(data, pagination);\n }\n}\n","import { Result } from 'neverthrow';\nimport { DomainRepository } from '../../domain/repositories';\nimport { Domain } from '../../domain/entities';\nimport { DomainRemoteDataSource } from '../datasources';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { ListResult, Pagination } from '../../../../shared/domain/entities';\nimport { DomainListParams } from '../../../../types';\n\n/**\n * Implementation of DomainRepository\n * Handles data mapping between API and domain layer\n */\nexport class DomainRepositoryImpl implements DomainRepository {\n constructor(private remoteDataSource: DomainRemoteDataSource) {}\n\n async getAll(params?: DomainListParams): Promise<Result<ListResult<Domain>, ApiFailure>> {\n if (!params) {\n throw new ParseFailure('Domain list params are required');\n }\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const domainsData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !domainsData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const domains = domainsData.map((item) => Domain.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || domainsData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n const pagination = new Pagination(\n Number(paginationInfo.page || 1),\n perPage,\n Number(paginationInfo.total || 0),\n Number(paginationInfo.pages || 1),\n count\n );\n\n return new ListResult(domains, pagination);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse domain data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { DomainRemoteDataSource } from '../data/datasources';\nimport { DomainRepositoryImpl } from '../data/repositories';\nimport { DomainRepository } from '../domain/repositories';\nimport { GetAllDomains } from '../domain/usecases';\n\n/**\n * Dependency injection setup for Domain feature\n */\nexport class DomainInjector {\n private static readonly REMOTE_DATA_SOURCE = 'DomainRemoteDataSource';\n private static readonly REPOSITORY = 'DomainRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllDomains';\n\n /**\n * Registers all domain dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new DomainRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const dataSource = injector.resolve<DomainRemoteDataSource>(this.REMOTE_DATA_SOURCE);\n return new DomainRepositoryImpl(dataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<DomainRepository>(this.REPOSITORY);\n return new GetAllDomains(repository);\n });\n }\n\n /**\n * Resolves GetAllDomains use case\n */\n static getAllDomainsUseCase(injector: Injector): GetAllDomains {\n return injector.resolve<GetAllDomains>(this.GET_ALL_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core/base';\n\n/**\n * Related Publication entity\n * Represents related publications from BPS Web API\n */\nexport class RelatedPublication extends BaseEntity {\n constructor(\n public readonly id: string,\n public readonly title: string,\n public readonly releaseDate: Date,\n public readonly url: string,\n public readonly cover: string\n ) {\n super();\n }\n\n toJson(): Record<string, unknown> {\n return {\n id: this.id,\n title: this.title,\n rl_date: this.releaseDate.toISOString().split('T')[0],\n url: this.url,\n cover: this.cover,\n };\n }\n\n static fromJson(json: Record<string, unknown>): RelatedPublication {\n return new RelatedPublication(\n String(json.id || ''),\n String(json.title || ''),\n new Date(String(json.rl_date || json.release_date || json.releaseDate || '')),\n String(json.url || ''),\n String(json.cover || '')\n );\n }\n}\n","import { BaseEntity } from '../../../../core/base';\nimport { RelatedPublication } from './RelatedPublication';\n\n/**\n * Publication entity representing statistical publications from BPS Web API\n *\n * Publications are official statistical reports, bulletins, and documents\n * published by BPS covering various aspects of Indonesian statistics.\n */\nexport class Publication extends BaseEntity {\n constructor(\n public readonly id: string,\n public readonly title: string,\n public readonly issn: string,\n public readonly cover: string,\n public readonly pdf: string,\n public readonly size: string,\n public readonly scheduledDate: Date | null,\n public readonly releaseDate: Date | null,\n public readonly updateDate: Date | null,\n public readonly abstract: string | null,\n public readonly catalogueNumber: string | null,\n public readonly publicationNumber: string | null,\n public readonly relatedPublications: RelatedPublication[]\n ) {\n super();\n }\n\n toJson(): Record<string, unknown> {\n return {\n id: this.id,\n title: this.title,\n issn: this.issn,\n cover: this.cover,\n pdf: this.pdf,\n size: this.size,\n scheduled_date: this.scheduledDate?.toISOString().split('T')[0] || null,\n rl_date: this.releaseDate?.toISOString().split('T')[0] || null,\n updt_date: this.updateDate?.toISOString().split('T')[0] || null,\n abstract: this.abstract,\n catalogue_number: this.catalogueNumber,\n publication_number: this.publicationNumber,\n related_publications: this.relatedPublications.map((rp) => rp.toJson()),\n };\n }\n\n static fromJson(json: Record<string, unknown>): Publication {\n const relatedPubs = json.related_publications || json.relatedPublications;\n const relatedPublications = Array.isArray(relatedPubs)\n ? relatedPubs.map((item) => RelatedPublication.fromJson(item as Record<string, unknown>))\n : [];\n\n return new Publication(\n String(json.id || ''),\n String(json.title || ''),\n String(json.issn || ''),\n String(json.cover || ''),\n String(json.pdf || ''),\n String(json.size || ''),\n json.scheduled_date || json.scheduledDate\n ? new Date(String(json.scheduled_date || json.scheduledDate))\n : null,\n json.rl_date || json.release_date || json.releaseDate\n ? new Date(String(json.rl_date || json.release_date || json.releaseDate))\n : null,\n json.updt_date || json.update_date || json.updateDate\n ? new Date(String(json.updt_date || json.update_date || json.updateDate))\n : null,\n json.abstract ? String(json.abstract) : null,\n json.catalogue_number || json.catalogueNumber\n ? String(json.catalogue_number || json.catalogueNumber)\n : null,\n json.publication_number || json.publicationNumber\n ? String(json.publication_number || json.publicationNumber)\n : null,\n relatedPublications\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { Publication } from '../entities';\nimport { PublicationRepository } from '../repositories/PublicationRepository';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { PublicationListParams } from '../../../../types';\n\n/**\n * Use case for getting all publications\n */\nexport class GetAllPublications {\n constructor(private readonly repository: PublicationRepository) {}\n\n async execute(\n params: PublicationListParams\n ): Promise<Result<ListResult<Publication>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { Publication } from '../entities';\nimport { PublicationRepository } from '../repositories/PublicationRepository';\nimport { ViewParams } from '../../../../types';\n\n/**\n * Use case for getting a publication by ID\n */\nexport class GetPublicationById {\n constructor(private readonly repository: PublicationRepository) {}\n\n async execute(params: ViewParams): Promise<Result<Publication, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { ApiFailure } from '../../../../core/failures';\nimport { PublicationListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for publications\n * Handles API calls for publication data\n */\nexport class PublicationRemoteDataSource {\n constructor(private client: NetworkClient) {}\n\n /**\n * Fetches all publications from API\n */\n async getAll(\n params: PublicationListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params.domain) {\n queryParams['domain'] = params.domain;\n }\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n if (params.page) {\n queryParams['page'] = params.page.toString();\n }\n if (params.keyword) {\n queryParams['keyword'] = params.keyword;\n }\n if (params.month) {\n queryParams['month'] = params.month.toString();\n }\n if (params.year) {\n queryParams['year'] = params.year.toString();\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.PUBLICATION_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n\n /**\n * Fetches a publication by ID from API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.PUBLICATION_LIST}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { Publication } from '../../domain/entities';\nimport { PublicationRepository } from '../../domain/repositories/PublicationRepository';\nimport { PublicationRemoteDataSource } from '../datasources/PublicationRemoteDataSource';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { PublicationListParams, ViewParams } from '../../../../types';\n\n/**\n * Implementation of publication repository\n */\nexport class PublicationRepositoryImpl implements PublicationRepository {\n constructor(private readonly remoteDataSource: PublicationRemoteDataSource) {}\n\n async getAll(\n params: PublicationListParams\n ): Promise<Result<ListResult<Publication>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const publicationsData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !publicationsData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const publications = publicationsData.map((item) => Publication.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || publicationsData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: publications,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => Publication.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse publications: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<Publication, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('Publication not found');\n }\n const publicationData = response.data[0];\n if (!publicationData) {\n throw new ParseFailure('Publication data is empty');\n }\n return Publication.fromJson(publicationData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse publication data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { PublicationRemoteDataSource } from '../data/datasources';\nimport { PublicationRepositoryImpl } from '../data/repositories';\nimport { PublicationRepository } from '../domain/repositories';\nimport { GetAllPublications, GetPublicationById } from '../domain/usecases';\n\n/**\n * Dependency injection setup for Publication feature\n */\nexport class PublicationInjector {\n private static readonly REMOTE_DATA_SOURCE = 'PublicationRemoteDataSource';\n private static readonly REPOSITORY = 'PublicationRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllPublications';\n private static readonly GET_BY_ID_USE_CASE = 'GetPublicationById';\n\n /**\n * Registers all publication dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new PublicationRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const dataSource = injector.resolve<PublicationRemoteDataSource>(this.REMOTE_DATA_SOURCE);\n return new PublicationRepositoryImpl(dataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<PublicationRepository>(this.REPOSITORY);\n return new GetAllPublications(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<PublicationRepository>(this.REPOSITORY);\n return new GetPublicationById(repository);\n });\n }\n\n /**\n * Resolves GetAllPublications use case\n */\n static getAllPublicationsUseCase(injector: Injector): GetAllPublications {\n return injector.resolve<GetAllPublications>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Resolves GetPublicationById use case\n */\n static getPublicationByIdUseCase(injector: Injector): GetPublicationById {\n return injector.resolve<GetPublicationById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core/base';\n\n/**\n * Infographic entity representing infographics from BPS Web API\n *\n * Infographics are visual representations of statistical data created by BPS\n * to make complex statistics more accessible and understandable to the public.\n * They cover various topics including demographics, economy, social indicators,\n * and regional statistics.\n */\nexport class Infographic extends BaseEntity {\n constructor(\n public readonly id: string,\n public readonly title: string,\n public readonly image: string,\n public readonly category: number,\n public readonly downloadUrl: string,\n public readonly description: string | null\n ) {\n super();\n }\n\n toJson(): Record<string, unknown> {\n return {\n inf_id: this.id,\n title: this.title,\n img: this.image,\n category: this.category,\n dl: this.downloadUrl,\n desc: this.description,\n };\n }\n\n static fromJson(json: Record<string, unknown>): Infographic {\n return new Infographic(\n String(json.inf_id || json.id || ''),\n String(json.title || ''),\n String(json.img || json.image || ''),\n Number(json.category || 0),\n String(json.dl || json.downloadUrl || ''),\n json.desc || json.description ? String(json.desc || json.description) : null\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { Infographic } from '../entities';\nimport { InfographicRepository } from '../repositories';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { InfographicListParams } from '../../../../types';\n\n/**\n * Use case for getting all infographics\n */\nexport class GetAllInfographics {\n constructor(private readonly repository: InfographicRepository) {}\n\n async execute(\n params: InfographicListParams\n ): Promise<Result<ListResult<Infographic>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { Infographic } from '../entities';\nimport { InfographicRepository } from '../repositories';\nimport { ViewParams } from '../../../../types';\n\n/**\n * Use case for getting an infographic by ID\n */\nexport class GetInfographicById {\n constructor(private readonly repository: InfographicRepository) {}\n\n async execute(params: ViewParams): Promise<Result<Infographic, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { ApiFailure } from '../../../../core/failures';\nimport { InfographicListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for infographics\n * Handles API calls for infographic data\n */\nexport class InfographicRemoteDataSource {\n constructor(private client: NetworkClient) {}\n\n /**\n * Fetches all infographics from API\n */\n async getAll(\n params: InfographicListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params.domain) {\n queryParams['domain'] = params.domain;\n }\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n if (params.page) {\n queryParams['page'] = params.page.toString();\n }\n if (params.keyword) {\n queryParams['keyword'] = params.keyword;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.INFOGRAPHIC_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n\n /**\n * Fetches an infographic by ID from API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.INFOGRAPHIC_LIST}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { Infographic } from '../../domain/entities';\nimport { InfographicRepository } from '../../domain/repositories';\nimport { InfographicRemoteDataSource } from '../datasources';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { InfographicListParams, ViewParams } from '../../../../types';\n\n/**\n * Implementation of infographic repository\n */\nexport class InfographicRepositoryImpl implements InfographicRepository {\n constructor(private readonly remoteDataSource: InfographicRemoteDataSource) {}\n\n async getAll(\n params: InfographicListParams\n ): Promise<Result<ListResult<Infographic>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const infographicsData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !infographicsData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const infographics = infographicsData.map((item) => Infographic.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || infographicsData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: infographics,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => Infographic.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse infographics: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<Infographic, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('Infographic not found');\n }\n const infographicData = response.data[0];\n if (!infographicData) {\n throw new ParseFailure('Infographic data is empty');\n }\n return Infographic.fromJson(infographicData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse infographic data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { InfographicRemoteDataSource } from '../data/datasources';\nimport { InfographicRepositoryImpl } from '../data/repositories';\nimport { InfographicRepository } from '../domain/repositories';\nimport { GetAllInfographics, GetInfographicById } from '../domain/usecases';\n\n/**\n * Dependency injection setup for Infographic feature\n */\nexport class InfographicInjector {\n private static readonly REMOTE_DATA_SOURCE = 'InfographicRemoteDataSource';\n private static readonly REPOSITORY = 'InfographicRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllInfographics';\n private static readonly GET_BY_ID_USE_CASE = 'GetInfographicById';\n\n /**\n * Registers all infographic dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new InfographicRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const dataSource = injector.resolve<InfographicRemoteDataSource>(this.REMOTE_DATA_SOURCE);\n return new InfographicRepositoryImpl(dataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<InfographicRepository>(this.REPOSITORY);\n return new GetAllInfographics(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<InfographicRepository>(this.REPOSITORY);\n return new GetInfographicById(repository);\n });\n }\n\n /**\n * Resolves GetAllInfographics use case\n */\n static getAllInfographicsUseCase(injector: Injector): GetAllInfographics {\n return injector.resolve<GetAllInfographics>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Resolves GetInfographicById use case\n */\n static getInfographicByIdUseCase(injector: Injector): GetInfographicById {\n return injector.resolve<GetInfographicById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","/**\n * Base exception class for all Stadata SDK exceptions\n */\nexport class StadataException extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'StadataException';\n Object.setPrototypeOf(this, StadataException.prototype);\n }\n}\n\n/**\n * Exception thrown when an API call fails\n */\nexport class ApiException extends StadataException {\n constructor(\n message: string,\n public readonly statusCode?: number,\n public readonly response?: unknown\n ) {\n super(message);\n this.name = 'ApiException';\n Object.setPrototypeOf(this, ApiException.prototype);\n }\n}\n\n/**\n * Exception thrown when a request is cancelled\n */\nexport class CancelledException extends StadataException {\n constructor(message = 'Request was cancelled') {\n super(message);\n this.name = 'CancelledException';\n Object.setPrototypeOf(this, CancelledException.prototype);\n }\n}\n\n/**\n * Exception thrown when a network error occurs\n */\nexport class NetworkException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'NetworkException';\n Object.setPrototypeOf(this, NetworkException.prototype);\n }\n}\n\n/**\n * Exception thrown when a request times out\n */\nexport class TimeoutException extends StadataException {\n constructor(message = 'Request timeout') {\n super(message);\n this.name = 'TimeoutException';\n Object.setPrototypeOf(this, TimeoutException.prototype);\n }\n}\n\n/**\n * Exception thrown when a resource is not found (404)\n */\nexport class NotFoundException extends ApiException {\n constructor(message = 'Resource not found') {\n super(message, 404);\n this.name = 'NotFoundException';\n Object.setPrototypeOf(this, NotFoundException.prototype);\n }\n}\n\n/**\n * Exception thrown when authentication fails (401)\n */\nexport class UnauthorizedException extends ApiException {\n constructor(message = 'Unauthorized') {\n super(message, 401);\n this.name = 'UnauthorizedException';\n Object.setPrototypeOf(this, UnauthorizedException.prototype);\n }\n}\n\n/**\n * Exception thrown when access is forbidden (403)\n */\nexport class ForbiddenException extends ApiException {\n constructor(message = 'Forbidden') {\n super(message, 403);\n this.name = 'ForbiddenException';\n Object.setPrototypeOf(this, ForbiddenException.prototype);\n }\n}\n\n/**\n * Exception thrown when a server error occurs (5xx)\n */\nexport class ServerException extends ApiException {\n constructor(message = 'Server error', statusCode = 500) {\n super(message, statusCode);\n this.name = 'ServerException';\n Object.setPrototypeOf(this, ServerException.prototype);\n }\n}\n\n/**\n * Feature-specific exceptions\n */\n\nexport class DomainException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'DomainException';\n Object.setPrototypeOf(this, DomainException.prototype);\n }\n}\n\nexport class DomainNotAvailableException extends DomainException {\n constructor(message = 'Domain not available') {\n super(message);\n this.name = 'DomainNotAvailableException';\n Object.setPrototypeOf(this, DomainNotAvailableException.prototype);\n }\n}\n\nexport class PublicationException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'PublicationException';\n Object.setPrototypeOf(this, PublicationException.prototype);\n }\n}\n\nexport class InfographicException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'InfographicException';\n Object.setPrototypeOf(this, InfographicException.prototype);\n }\n}\n\nexport class StaticTableException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'StaticTableException';\n Object.setPrototypeOf(this, StaticTableException.prototype);\n }\n}\n\nexport class NewsException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'NewsException';\n Object.setPrototypeOf(this, NewsException.prototype);\n }\n}\n\nexport class NewsCategoryException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'NewsCategoryException';\n Object.setPrototypeOf(this, NewsCategoryException.prototype);\n }\n}\n\nexport class PressReleaseException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'PressReleaseException';\n Object.setPrototypeOf(this, PressReleaseException.prototype);\n }\n}\n\nexport class SubjectException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'SubjectException';\n Object.setPrototypeOf(this, SubjectException.prototype);\n }\n}\n\nexport class SubjectCategoryException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'SubjectCategoryException';\n Object.setPrototypeOf(this, SubjectCategoryException.prototype);\n }\n}\n\nexport class StrategicIndicatorException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'StrategicIndicatorException';\n Object.setPrototypeOf(this, StrategicIndicatorException.prototype);\n }\n}\n\nexport class VariableException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'VariableException';\n Object.setPrototypeOf(this, VariableException.prototype);\n }\n}\n\nexport class VerticalVariableException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'VerticalVariableException';\n Object.setPrototypeOf(this, VerticalVariableException.prototype);\n }\n}\n\nexport class UnitException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'UnitException';\n Object.setPrototypeOf(this, UnitException.prototype);\n }\n}\n\nexport class PeriodException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'PeriodException';\n Object.setPrototypeOf(this, PeriodException.prototype);\n }\n}\n\nexport class DerivedPeriodException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'DerivedPeriodException';\n Object.setPrototypeOf(this, DerivedPeriodException.prototype);\n }\n}\n\nexport class DerivedVariableException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'DerivedVariableException';\n Object.setPrototypeOf(this, DerivedVariableException.prototype);\n }\n}\n\nexport class DynamicTableException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'DynamicTableException';\n Object.setPrototypeOf(this, DynamicTableException.prototype);\n }\n}\n\nexport class StatisticClassificationException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'StatisticClassificationException';\n Object.setPrototypeOf(this, StatisticClassificationException.prototype);\n }\n}\n\nexport class CensusException extends StadataException {\n constructor(message: string) {\n super(message);\n this.name = 'CensusException';\n Object.setPrototypeOf(this, CensusException.prototype);\n }\n}\n","import { CancelledException } from '../exceptions';\n\n/**\n * Token for cancelling ongoing requests\n * Uses AbortController under the hood\n */\nexport class CancelToken {\n private abortController: AbortController;\n private _isCancelled = false;\n private _reason?: string;\n\n constructor() {\n this.abortController = new AbortController();\n }\n\n /**\n * Gets the AbortSignal for use with fetch\n */\n get signal(): AbortSignal {\n return this.abortController.signal;\n }\n\n /**\n * Checks if the request has been cancelled\n */\n get isCancelled(): boolean {\n return this._isCancelled;\n }\n\n /**\n * Gets the cancellation reason\n */\n get reason(): string | undefined {\n return this._reason;\n }\n\n /**\n * Cancels the request\n * @param reason - Optional reason for cancellation\n */\n cancel(reason?: string): void {\n if (this._isCancelled) {\n return;\n }\n\n this._isCancelled = true;\n this._reason = reason;\n this.abortController.abort();\n }\n\n /**\n * Throws a CancelledException if the request was cancelled\n */\n throwIfCancelled(): void {\n if (this._isCancelled) {\n throw new CancelledException(this._reason || 'Request was cancelled');\n }\n }\n\n /**\n * Creates a new CancelToken\n */\n static create(): CancelToken {\n return new CancelToken();\n }\n\n /**\n * Creates a CancelToken that can be cancelled from outside\n * Returns both the token and a cancel function\n */\n static source(): { token: CancelToken; cancel: (reason?: string) => void } {\n const token = new CancelToken();\n return {\n token,\n cancel: (reason?: string) => token.cancel(reason),\n };\n }\n}\n","/**\n * Helper class for date parsing and formatting\n */\nexport class DateHelper {\n /**\n * Parses a date string into a Date object\n * Handles multiple date formats commonly used in the API\n */\n static parse(dateString: string | null | undefined): Date | null {\n if (!dateString) {\n return null;\n }\n\n try {\n const date = new Date(dateString);\n if (isNaN(date.getTime())) {\n return null;\n }\n return date;\n } catch {\n return null;\n }\n }\n\n /**\n * Formats a Date object to ISO string\n */\n static format(date: Date | null | undefined): string | null {\n if (!date || !(date instanceof Date)) {\n return null;\n }\n\n try {\n return date.toISOString();\n } catch {\n return null;\n }\n }\n\n /**\n * Formats a Date object to a readable string\n */\n static formatReadable(date: Date | null | undefined): string | null {\n if (!date || !(date instanceof Date)) {\n return null;\n }\n\n try {\n return date.toLocaleDateString('id-ID', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n } catch {\n return null;\n }\n }\n\n /**\n * Checks if a date string is valid\n */\n static isValid(dateString: string): boolean {\n const date = this.parse(dateString);\n return date !== null;\n }\n\n /**\n * Converts a date string to timestamp\n */\n static toTimestamp(dateString: string): number | null {\n const date = this.parse(dateString);\n return date ? date.getTime() : null;\n }\n\n /**\n * Creates a Date from timestamp\n */\n static fromTimestamp(timestamp: number): Date {\n return new Date(timestamp);\n }\n\n /**\n * Gets the current date as ISO string\n */\n static now(): string {\n return new Date().toISOString();\n }\n\n /**\n * Gets the current timestamp\n */\n static nowTimestamp(): number {\n return Date.now();\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * News entity representing a news item from BPS\n */\nexport class News extends BaseEntity {\n constructor(\n public readonly id: string,\n public readonly title: string,\n public readonly content: string,\n public readonly releaseDate: string,\n public readonly categoryId: number,\n public readonly picture: string | null\n ) {\n super();\n }\n\n toJson(): Record<string, unknown> {\n return {\n news_id: this.id,\n title: this.title,\n news_content: this.content,\n rl_date: this.releaseDate,\n category_id: this.categoryId,\n picture: this.picture,\n };\n }\n\n static fromJson(json: Record<string, unknown>): News {\n return new News(\n String(json.news_id || json.id || ''),\n String(json.title || ''),\n String(json.news_content || json.content || ''),\n String(json.rl_date || json.releaseDate || ''),\n Number(json.category_id || json.categoryId || 0),\n json.picture ? String(json.picture) : null\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { News } from '../entities';\nimport { NewsRepository } from '../repositories/NewsRepository';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { NewsListParams } from '../../../../types';\n\n/**\n * Use case for getting all news\n */\nexport class GetAllNews {\n constructor(private readonly repository: NewsRepository) {}\n\n async execute(params: NewsListParams): Promise<Result<ListResult<News>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { News } from '../entities';\nimport { NewsRepository } from '../repositories/NewsRepository';\nimport { ViewParams } from '../../../../types';\n\n/**\n * Use case for getting a specific news item by ID\n */\nexport class GetNewsById {\n constructor(private readonly repository: NewsRepository) {}\n\n async execute(params: ViewParams): Promise<Result<News, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { ApiFailure } from '../../../../core/failures';\nimport { NewsListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for news\n * Handles API calls for news data\n */\nexport class NewsRemoteDataSource {\n constructor(private client: NetworkClient) {}\n\n /**\n * Fetches all news from API\n */\n async getAll(\n params: NewsListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params.domain) {\n queryParams['domain'] = params.domain;\n }\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n if (params.page) {\n queryParams['page'] = params.page.toString();\n }\n if (params.keyword) {\n queryParams['keyword'] = params.keyword;\n }\n if (params.month) {\n queryParams['month'] = params.month.toString();\n }\n if (params.year) {\n queryParams['year'] = params.year.toString();\n }\n if (params.newsCategoryId) {\n queryParams['news_category_id'] = params.newsCategoryId;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.NEWS_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n\n /**\n * Fetches a news item by ID from API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.NEWS_LIST}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { News } from '../../domain/entities';\nimport { NewsRepository } from '../../domain/repositories/NewsRepository';\nimport { NewsRemoteDataSource } from '../datasources/NewsRemoteDataSource';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { NewsListParams, ViewParams } from '../../../../types';\n\n/**\n * Implementation of news repository\n */\nexport class NewsRepositoryImpl implements NewsRepository {\n constructor(private readonly remoteDataSource: NewsRemoteDataSource) {}\n\n async getAll(params: NewsListParams): Promise<Result<ListResult<News>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const newsData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !newsData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const newsList = newsData.map((item) => News.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || newsData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: newsList,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => News.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse news: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<News, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('News not found');\n }\n const newsData = response.data[0];\n if (!newsData) {\n throw new ParseFailure('News data is empty');\n }\n return News.fromJson(newsData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse news data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { NewsRemoteDataSource } from '../data/datasources';\nimport { NewsRepositoryImpl } from '../data/repositories';\nimport { NewsRepository } from '../domain/repositories';\nimport { GetAllNews, GetNewsById } from '../domain/usecases';\n\n/**\n * Dependency injection setup for News feature\n */\nexport class NewsInjector {\n private static readonly REMOTE_DATA_SOURCE = 'NewsRemoteDataSource';\n private static readonly REPOSITORY = 'NewsRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllNews';\n private static readonly GET_BY_ID_USE_CASE = 'GetNewsById';\n\n /**\n * Registers all news dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new NewsRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const dataSource = injector.resolve<NewsRemoteDataSource>(this.REMOTE_DATA_SOURCE);\n return new NewsRepositoryImpl(dataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<NewsRepository>(this.REPOSITORY);\n return new GetAllNews(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<NewsRepository>(this.REPOSITORY);\n return new GetNewsById(repository);\n });\n }\n\n /**\n * Resolves GetAllNews use case\n */\n static getAllNewsUseCase(injector: Injector): GetAllNews {\n return injector.resolve<GetAllNews>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Resolves GetNewsById use case\n */\n static getNewsByIdUseCase(injector: Injector): GetNewsById {\n return injector.resolve<GetNewsById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a news category\n */\nexport class NewsCategory extends BaseEntity {\n constructor(\n public readonly id: string,\n public readonly name: string\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n return {\n newscat_id: this.id,\n newscat_name: this.name,\n };\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): NewsCategory {\n return new NewsCategory(\n String(json.newscat_id || json.id || ''),\n String(json.newscat_name || json.name || '')\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { NewsCategoryListParams } from '../../../../types';\nimport { NewsCategory } from '../entities';\nimport { NewsCategoryRepository } from '../repositories';\n\n/**\n * Use case for getting all news categories\n */\nexport class GetAllNewsCategories\n implements UseCase<NewsCategoryListParams | undefined, ListResult<NewsCategory>>\n{\n constructor(private readonly repository: NewsCategoryRepository) {}\n\n async execute(\n params?: NewsCategoryListParams\n ): Promise<Result<ListResult<NewsCategory>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ViewParams } from '../../../../types';\nimport { NewsCategory } from '../entities';\nimport { NewsCategoryRepository } from '../repositories';\n\n/**\n * Use case for getting a news category by ID\n */\nexport class GetNewsCategoryById implements UseCase<ViewParams, NewsCategory> {\n constructor(private readonly repository: NewsCategoryRepository) {}\n\n async execute(params: ViewParams): Promise<Result<NewsCategory, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { NewsCategoryListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for news category operations\n */\nexport class NewsCategoryRemoteDataSource {\n constructor(private readonly client: NetworkClient) {}\n\n /**\n * Gets all news categories from the API\n */\n async getAll(\n params?: NewsCategoryListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params?.domain) {\n queryParams['domain'] = params.domain;\n }\n\n if (params?.lang) {\n queryParams['lang'] = params.lang;\n }\n\n if (params?.page) {\n queryParams['page'] = params.page.toString();\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.NEWS_CATEGORY_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params?.cancelToken,\n });\n }\n\n /**\n * Gets a news category by ID from the API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.NEWS_CATEGORY_LIST}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { NewsCategoryListParams, ViewParams } from '../../../../types';\nimport { NewsCategory } from '../../domain/entities';\nimport { NewsCategoryRepository } from '../../domain/repositories';\nimport { NewsCategoryRemoteDataSource } from '../datasources';\n\n/**\n * Implementation of NewsCategoryRepository\n */\nexport class NewsCategoryRepositoryImpl implements NewsCategoryRepository {\n constructor(private readonly remoteDataSource: NewsCategoryRemoteDataSource) {}\n\n async getAll(\n params?: NewsCategoryListParams\n ): Promise<Result<ListResult<NewsCategory>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const categoriesData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !categoriesData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const categories = categoriesData.map((item) => NewsCategory.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || categoriesData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: categories,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => NewsCategory.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse news category: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<NewsCategory, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('News category not found');\n }\n const categoryData = response.data[0];\n if (!categoryData) {\n throw new ParseFailure('News category data is empty');\n }\n return NewsCategory.fromJson(categoryData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse news category data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { NewsCategoryRemoteDataSource } from '../data/datasources';\nimport { NewsCategoryRepositoryImpl } from '../data/repositories';\nimport { GetAllNewsCategories, GetNewsCategoryById } from '../domain/usecases';\n\n/**\n * Dependency injector for NewsCategory feature\n */\nexport class NewsCategoryInjector {\n private static readonly REMOTE_DATA_SOURCE = 'NewsCategoryRemoteDataSource';\n private static readonly REPOSITORY = 'NewsCategoryRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllNewsCategories';\n private static readonly GET_BY_ID_USE_CASE = 'GetNewsCategoryById';\n\n /**\n * Registers all NewsCategory dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register remote data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new NewsCategoryRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const remoteDataSource = injector.resolve<NewsCategoryRemoteDataSource>(\n this.REMOTE_DATA_SOURCE\n );\n return new NewsCategoryRepositoryImpl(remoteDataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<NewsCategoryRepositoryImpl>(this.REPOSITORY);\n return new GetAllNewsCategories(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<NewsCategoryRepositoryImpl>(this.REPOSITORY);\n return new GetNewsCategoryById(repository);\n });\n }\n\n /**\n * Gets the GetAllNewsCategories use case\n */\n static getAllNewsCategoriesUseCase(injector: Injector): GetAllNewsCategories {\n return injector.resolve<GetAllNewsCategories>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Gets the GetNewsCategoryById use case\n */\n static getNewsCategoryByIdUseCase(injector: Injector): GetNewsCategoryById {\n return injector.resolve<GetNewsCategoryById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * PressRelease entity representing a press release from BPS\n */\nexport class PressRelease extends BaseEntity {\n constructor(\n public readonly id: number,\n public readonly subjectId: number,\n public readonly subject: string,\n public readonly title: string,\n public readonly abstract: string,\n public readonly releaseDate: string,\n public readonly updatedDate: string | null,\n public readonly pdf: string,\n public readonly size: string,\n public readonly slide: string,\n public readonly thumbnail: string\n ) {\n super();\n }\n\n toJson(): Record<string, unknown> {\n return {\n brs_id: this.id,\n subj_id: this.subjectId,\n subj: this.subject,\n title: this.title,\n abstract: this.abstract,\n rl_date: this.releaseDate,\n updt_date: this.updatedDate,\n pdf: this.pdf,\n size: this.size,\n slide: this.slide,\n thumbnail: this.thumbnail,\n };\n }\n\n static fromJson(json: Record<string, unknown>): PressRelease {\n return new PressRelease(\n Number(json.brs_id || json.id || 0),\n Number(json.subj_id || json.subjectId || 0),\n String(json.subj || json.subject || ''),\n String(json.title || ''),\n String(json.abstract || ''),\n String(json.rl_date || json.releaseDate || ''),\n json.updt_date ? String(json.updt_date) : null,\n String(json.pdf || ''),\n String(json.size || ''),\n String(json.slide || ''),\n String(json.thumbnail || '')\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { PressRelease } from '../entities';\nimport { PressReleaseRepository } from '../repositories/PressReleaseRepository';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { PressReleaseListParams } from '../../../../types';\n\n/**\n * Use case for getting all press releases\n */\nexport class GetAllPressReleases {\n constructor(private readonly repository: PressReleaseRepository) {}\n\n async execute(\n params: PressReleaseListParams\n ): Promise<Result<ListResult<PressRelease>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { PressRelease } from '../entities';\nimport { PressReleaseRepository } from '../repositories/PressReleaseRepository';\nimport { ViewParams } from '../../../../types';\n\n/**\n * Use case for getting a specific press release by ID\n */\nexport class GetPressReleaseById {\n constructor(private readonly repository: PressReleaseRepository) {}\n\n async execute(params: ViewParams): Promise<Result<PressRelease, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { ApiFailure } from '../../../../core/failures';\nimport { PressReleaseListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for press releases\n * Handles API calls for press release data\n */\nexport class PressReleaseRemoteDataSource {\n constructor(private client: NetworkClient) {}\n\n /**\n * Fetches all press releases from API\n */\n async getAll(\n params: PressReleaseListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params.domain) {\n queryParams['domain'] = params.domain;\n }\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n if (params.page) {\n queryParams['page'] = params.page.toString();\n }\n if (params.keyword) {\n queryParams['keyword'] = params.keyword;\n }\n if (params.month) {\n queryParams['month'] = params.month.toString();\n }\n if (params.year) {\n queryParams['year'] = params.year.toString();\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.PRESS_RELEASE_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n\n /**\n * Fetches a press release by ID from API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.PRESS_RELEASE_LIST}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { PressRelease } from '../../domain/entities';\nimport { PressReleaseRepository } from '../../domain/repositories/PressReleaseRepository';\nimport { PressReleaseRemoteDataSource } from '../datasources/PressReleaseRemoteDataSource';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { PressReleaseListParams, ViewParams } from '../../../../types';\n\n/**\n * Implementation of press release repository\n */\nexport class PressReleaseRepositoryImpl implements PressReleaseRepository {\n constructor(private readonly remoteDataSource: PressReleaseRemoteDataSource) {}\n\n async getAll(\n params: PressReleaseListParams\n ): Promise<Result<ListResult<PressRelease>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const pressReleasesData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !pressReleasesData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const pressReleases = pressReleasesData.map((item) => PressRelease.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || pressReleasesData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: pressReleases,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => PressRelease.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse press releases: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<PressRelease, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('Press release not found');\n }\n const pressReleaseData = response.data[0];\n if (!pressReleaseData) {\n throw new ParseFailure('Press release data is empty');\n }\n return PressRelease.fromJson(pressReleaseData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse press release data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { PressReleaseRemoteDataSource } from '../data/datasources';\nimport { PressReleaseRepositoryImpl } from '../data/repositories';\nimport { PressReleaseRepository } from '../domain/repositories';\nimport { GetAllPressReleases, GetPressReleaseById } from '../domain/usecases';\n\n/**\n * Dependency injection setup for PressRelease feature\n */\nexport class PressReleaseInjector {\n private static readonly REMOTE_DATA_SOURCE = 'PressReleaseRemoteDataSource';\n private static readonly REPOSITORY = 'PressReleaseRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllPressReleases';\n private static readonly GET_BY_ID_USE_CASE = 'GetPressReleaseById';\n\n /**\n * Registers all press release dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new PressReleaseRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const dataSource = injector.resolve<PressReleaseRemoteDataSource>(this.REMOTE_DATA_SOURCE);\n return new PressReleaseRepositoryImpl(dataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<PressReleaseRepository>(this.REPOSITORY);\n return new GetAllPressReleases(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<PressReleaseRepository>(this.REPOSITORY);\n return new GetPressReleaseById(repository);\n });\n }\n\n /**\n * Resolves GetAllPressReleases use case\n */\n static getAllPressReleasesUseCase(injector: Injector): GetAllPressReleases {\n return injector.resolve<GetAllPressReleases>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Resolves GetPressReleaseById use case\n */\n static getPressReleaseByIdUseCase(injector: Injector): GetPressReleaseById {\n return injector.resolve<GetPressReleaseById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * StaticTable entity representing a static table from BPS\n */\nexport class StaticTable extends BaseEntity {\n constructor(\n public readonly id: string,\n public readonly title: string,\n public readonly subjectId: number,\n public readonly size: string,\n public readonly updatedAt: string,\n public readonly excelUrl: string\n ) {\n super();\n }\n\n toJson(): Record<string, unknown> {\n return {\n table_id: this.id,\n title: this.title,\n subj_id: this.subjectId,\n size: this.size,\n updt_date: this.updatedAt,\n excel: this.excelUrl,\n };\n }\n\n static fromJson(json: Record<string, unknown>): StaticTable {\n return new StaticTable(\n String(json.table_id || json.id || ''),\n String(json.title || ''),\n Number(json.subj_id || json.subjectId || 0),\n String(json.size || ''),\n String(json.updt_date || json.updatedAt || ''),\n String(json.excel || json.excelUrl || '')\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { StaticTable } from '../entities';\nimport { StaticTableRepository } from '../repositories/StaticTableRepository';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { StaticTableListParams } from '../../../../types';\n\n/**\n * Use case for getting all static tables\n */\nexport class GetAllStaticTables {\n constructor(private readonly repository: StaticTableRepository) {}\n\n async execute(\n params: StaticTableListParams\n ): Promise<Result<ListResult<StaticTable>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { StaticTable } from '../entities';\nimport { StaticTableRepository } from '../repositories/StaticTableRepository';\nimport { ViewParams } from '../../../../types';\n\n/**\n * Use case for getting a specific static table by ID\n */\nexport class GetStaticTableById {\n constructor(private readonly repository: StaticTableRepository) {}\n\n async execute(params: ViewParams): Promise<Result<StaticTable, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { ApiFailure } from '../../../../core/failures';\nimport { StaticTableListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for static tables\n * Handles API calls for static table data\n */\nexport class StaticTableRemoteDataSource {\n constructor(private client: NetworkClient) {}\n\n /**\n * Fetches all static tables from API\n */\n async getAll(\n params: StaticTableListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params.domain) {\n queryParams['domain'] = params.domain;\n }\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n if (params.page) {\n queryParams['page'] = params.page.toString();\n }\n if (params.keyword) {\n queryParams['keyword'] = params.keyword;\n }\n if (params.month) {\n queryParams['month'] = params.month.toString();\n }\n if (params.year) {\n queryParams['year'] = params.year.toString();\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.STATIC_TABLE_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n\n /**\n * Fetches a static table by ID from API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.STATIC_TABLE_LIST}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { StaticTable } from '../../domain/entities';\nimport { StaticTableRepository } from '../../domain/repositories/StaticTableRepository';\nimport { StaticTableRemoteDataSource } from '../datasources/StaticTableRemoteDataSource';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { StaticTableListParams, ViewParams } from '../../../../types';\n\n/**\n * Implementation of static table repository\n */\nexport class StaticTableRepositoryImpl implements StaticTableRepository {\n constructor(private readonly remoteDataSource: StaticTableRemoteDataSource) {}\n\n async getAll(\n params: StaticTableListParams\n ): Promise<Result<ListResult<StaticTable>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const staticTablesData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !staticTablesData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const staticTables = staticTablesData.map((item) => StaticTable.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || staticTablesData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: staticTables,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => StaticTable.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse static tables: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<StaticTable, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('Static table not found');\n }\n const staticTableData = response.data[0];\n if (!staticTableData) {\n throw new ParseFailure('Static table data is empty');\n }\n return StaticTable.fromJson(staticTableData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse static table data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { StaticTableRemoteDataSource } from '../data/datasources';\nimport { StaticTableRepositoryImpl } from '../data/repositories';\nimport { StaticTableRepository } from '../domain/repositories';\nimport { GetAllStaticTables, GetStaticTableById } from '../domain/usecases';\n\n/**\n * Dependency injection setup for StaticTable feature\n */\nexport class StaticTableInjector {\n private static readonly REMOTE_DATA_SOURCE = 'StaticTableRemoteDataSource';\n private static readonly REPOSITORY = 'StaticTableRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllStaticTables';\n private static readonly GET_BY_ID_USE_CASE = 'GetStaticTableById';\n\n /**\n * Registers all static table dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new StaticTableRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const dataSource = injector.resolve<StaticTableRemoteDataSource>(this.REMOTE_DATA_SOURCE);\n return new StaticTableRepositoryImpl(dataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<StaticTableRepository>(this.REPOSITORY);\n return new GetAllStaticTables(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<StaticTableRepository>(this.REPOSITORY);\n return new GetStaticTableById(repository);\n });\n }\n\n /**\n * Resolves GetAllStaticTables use case\n */\n static getAllStaticTablesUseCase(injector: Injector): GetAllStaticTables {\n return injector.resolve<GetAllStaticTables>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Resolves GetStaticTableById use case\n */\n static getStaticTableByIdUseCase(injector: Injector): GetStaticTableById {\n return injector.resolve<GetStaticTableById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a subject (subject matter/topic)\n */\nexport class Subject extends BaseEntity {\n constructor(\n public readonly id: number,\n public readonly name: string,\n public readonly categoryId: number\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n return {\n subj_id: this.id,\n title: this.name,\n subcatid: this.categoryId,\n };\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): Subject {\n return new Subject(\n Number(json.subj_id || json.id || 0),\n String(json.title || json.name || ''),\n Number(json.subcatid || json.categoryId || 0)\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { SubjectListParams } from '../../../../types';\nimport { Subject } from '../entities';\nimport { SubjectRepository } from '../repositories';\n\n/**\n * Use case for getting all subjects\n */\nexport class GetAllSubjects implements UseCase<SubjectListParams | undefined, ListResult<Subject>> {\n constructor(private readonly repository: SubjectRepository) {}\n\n async execute(params?: SubjectListParams): Promise<Result<ListResult<Subject>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ViewParams } from '../../../../types';\nimport { Subject } from '../entities';\nimport { SubjectRepository } from '../repositories';\n\n/**\n * Use case for getting a subject by ID\n */\nexport class GetSubjectById implements UseCase<ViewParams, Subject> {\n constructor(private readonly repository: SubjectRepository) {}\n\n async execute(params: ViewParams): Promise<Result<Subject, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { SubjectListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for subject operations\n */\nexport class SubjectRemoteDataSource {\n constructor(private readonly client: NetworkClient) {}\n\n /**\n * Gets all subjects from the API\n */\n async getAll(\n params?: SubjectListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params?.domain) {\n queryParams['domain'] = params.domain;\n }\n\n if (params?.lang) {\n queryParams['lang'] = params.lang;\n }\n\n if (params?.page) {\n queryParams['page'] = params.page.toString();\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.SUBJECT_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params?.cancelToken,\n });\n }\n\n /**\n * Gets a subject by ID from the API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.SUBJECT_LIST}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { SubjectListParams, ViewParams } from '../../../../types';\nimport { Subject } from '../../domain/entities';\nimport { SubjectRepository } from '../../domain/repositories';\nimport { SubjectRemoteDataSource } from '../datasources';\n\n/**\n * Implementation of SubjectRepository\n */\nexport class SubjectRepositoryImpl implements SubjectRepository {\n constructor(private readonly remoteDataSource: SubjectRemoteDataSource) {}\n\n async getAll(params?: SubjectListParams): Promise<Result<ListResult<Subject>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const subjectsData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !subjectsData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const subjects = subjectsData.map((item) => Subject.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || subjectsData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: subjects,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => Subject.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse subject: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<Subject, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('Subject not found');\n }\n const subjectData = response.data[0];\n if (!subjectData) {\n throw new ParseFailure('Subject data is empty');\n }\n return Subject.fromJson(subjectData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse subject data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { SubjectRemoteDataSource } from '../data/datasources';\nimport { SubjectRepositoryImpl } from '../data/repositories';\nimport { GetAllSubjects, GetSubjectById } from '../domain/usecases';\n\n/**\n * Dependency injector for Subject feature\n */\nexport class SubjectInjector {\n private static readonly REMOTE_DATA_SOURCE = 'SubjectRemoteDataSource';\n private static readonly REPOSITORY = 'SubjectRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllSubjects';\n private static readonly GET_BY_ID_USE_CASE = 'GetSubjectById';\n\n /**\n * Registers all Subject dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register remote data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new SubjectRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const remoteDataSource = injector.resolve<SubjectRemoteDataSource>(this.REMOTE_DATA_SOURCE);\n return new SubjectRepositoryImpl(remoteDataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<SubjectRepositoryImpl>(this.REPOSITORY);\n return new GetAllSubjects(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<SubjectRepositoryImpl>(this.REPOSITORY);\n return new GetSubjectById(repository);\n });\n }\n\n /**\n * Gets the GetAllSubjects use case\n */\n static getAllSubjectsUseCase(injector: Injector): GetAllSubjects {\n return injector.resolve<GetAllSubjects>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Gets the GetSubjectById use case\n */\n static getSubjectByIdUseCase(injector: Injector): GetSubjectById {\n return injector.resolve<GetSubjectById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a subject category\n */\nexport class SubjectCategory extends BaseEntity {\n constructor(\n public readonly id: number,\n public readonly name: string\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n return {\n subcat_id: this.id,\n subcat_name: this.name,\n };\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): SubjectCategory {\n return new SubjectCategory(\n Number(json.subcat_id || json.id || 0),\n String(json.subcat_name || json.name || '')\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { SubjectCategoryListParams } from '../../../../types';\nimport { SubjectCategory } from '../entities';\nimport { SubjectCategoryRepository } from '../repositories';\n\n/**\n * Use case for getting all subject categories\n */\nexport class GetAllSubjectCategories\n implements UseCase<SubjectCategoryListParams | undefined, ListResult<SubjectCategory>>\n{\n constructor(private readonly repository: SubjectCategoryRepository) {}\n\n async execute(\n params?: SubjectCategoryListParams\n ): Promise<Result<ListResult<SubjectCategory>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ViewParams } from '../../../../types';\nimport { SubjectCategory } from '../entities';\nimport { SubjectCategoryRepository } from '../repositories';\n\n/**\n * Use case for getting a subject category by ID\n */\nexport class GetSubjectCategoryById implements UseCase<ViewParams, SubjectCategory> {\n constructor(private readonly repository: SubjectCategoryRepository) {}\n\n async execute(params: ViewParams): Promise<Result<SubjectCategory, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { SubjectCategoryListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for subject category operations\n */\nexport class SubjectCategoryRemoteDataSource {\n constructor(private readonly client: NetworkClient) {}\n\n /**\n * Gets all subject categories from the API\n */\n async getAll(\n params?: SubjectCategoryListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params?.domain) {\n queryParams['domain'] = params.domain;\n }\n\n if (params?.lang) {\n queryParams['lang'] = params.lang;\n }\n\n if (params?.page) {\n queryParams['page'] = params.page.toString();\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.SUBJECT_CATEGORY_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params?.cancelToken,\n });\n }\n\n /**\n * Gets a subject category by ID from the API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.SUBJECT_CATEGORY_LIST}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { SubjectCategoryListParams, ViewParams } from '../../../../types';\nimport { SubjectCategory } from '../../domain/entities';\nimport { SubjectCategoryRepository } from '../../domain/repositories';\nimport { SubjectCategoryRemoteDataSource } from '../datasources';\n\n/**\n * Implementation of SubjectCategoryRepository\n */\nexport class SubjectCategoryRepositoryImpl implements SubjectCategoryRepository {\n constructor(private readonly remoteDataSource: SubjectCategoryRemoteDataSource) {}\n\n async getAll(\n params?: SubjectCategoryListParams\n ): Promise<Result<ListResult<SubjectCategory>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const categoriesData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !categoriesData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const categories = categoriesData.map((item) => SubjectCategory.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || categoriesData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: categories,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => SubjectCategory.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse subject category: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<SubjectCategory, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('Subject category not found');\n }\n const categoryData = response.data[0];\n if (!categoryData) {\n throw new ParseFailure('Subject category data is empty');\n }\n return SubjectCategory.fromJson(categoryData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse subject category data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { SubjectCategoryRemoteDataSource } from '../data/datasources';\nimport { SubjectCategoryRepositoryImpl } from '../data/repositories';\nimport { GetAllSubjectCategories, GetSubjectCategoryById } from '../domain/usecases';\n\n/**\n * Dependency injector for SubjectCategory feature\n */\nexport class SubjectCategoryInjector {\n private static readonly REMOTE_DATA_SOURCE = 'SubjectCategoryRemoteDataSource';\n private static readonly REPOSITORY = 'SubjectCategoryRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllSubjectCategories';\n private static readonly GET_BY_ID_USE_CASE = 'GetSubjectCategoryById';\n\n /**\n * Registers all SubjectCategory dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register remote data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new SubjectCategoryRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const remoteDataSource = injector.resolve<SubjectCategoryRemoteDataSource>(\n this.REMOTE_DATA_SOURCE\n );\n return new SubjectCategoryRepositoryImpl(remoteDataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<SubjectCategoryRepositoryImpl>(this.REPOSITORY);\n return new GetAllSubjectCategories(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<SubjectCategoryRepositoryImpl>(this.REPOSITORY);\n return new GetSubjectCategoryById(repository);\n });\n }\n\n /**\n * Gets the GetAllSubjectCategories use case\n */\n static getAllSubjectCategoriesUseCase(injector: Injector): GetAllSubjectCategories {\n return injector.resolve<GetAllSubjectCategories>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Gets the GetSubjectCategoryById use case\n */\n static getSubjectCategoryByIdUseCase(injector: Injector): GetSubjectCategoryById {\n return injector.resolve<GetSubjectCategoryById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a strategic indicator\n */\nexport class StrategicIndicator extends BaseEntity {\n constructor(\n public readonly variableId: number,\n public readonly indicatorId: number,\n public readonly subjectCsa: number,\n public readonly title: string,\n public readonly name: string,\n public readonly dataSource: string,\n public readonly value: number,\n public readonly unit: string,\n public readonly category: number,\n public readonly hashId: string,\n public readonly period: string\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n return {\n var: this.variableId,\n indicator_id: this.indicatorId,\n subject_csa: this.subjectCsa,\n title: this.title,\n name: this.name,\n data_source: this.dataSource,\n value: this.value,\n unit: this.unit,\n category: this.category,\n hash_id: this.hashId,\n periode: this.period,\n };\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): StrategicIndicator {\n return new StrategicIndicator(\n Number(json.var || json.variableId || 0),\n Number(json.indicator_id || json.indicatorId || 0),\n Number(json.subject_csa || json.subjectCsa || 0),\n String(json.title || ''),\n String(json.name || ''),\n String(json.data_source || json.dataSource || ''),\n Number(json.value || 0),\n String(json.unit || ''),\n Number(json.category || 0),\n String(json.hash_id || json.hashId || ''),\n String(json.periode || json.period || '')\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { StrategicIndicatorListParams } from '../../../../types';\nimport { StrategicIndicator } from '../entities';\nimport { StrategicIndicatorRepository } from '../repositories';\n\n/**\n * Use case for getting all strategic indicators\n */\nexport class GetAllStrategicIndicators\n implements UseCase<StrategicIndicatorListParams | undefined, ListResult<StrategicIndicator>>\n{\n constructor(private readonly repository: StrategicIndicatorRepository) {}\n\n async execute(\n params?: StrategicIndicatorListParams\n ): Promise<Result<ListResult<StrategicIndicator>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ViewParams } from '../../../../types';\nimport { StrategicIndicator } from '../entities';\nimport { StrategicIndicatorRepository } from '../repositories';\n\n/**\n * Use case for getting a strategic indicator by ID\n */\nexport class GetStrategicIndicatorById implements UseCase<ViewParams, StrategicIndicator> {\n constructor(private readonly repository: StrategicIndicatorRepository) {}\n\n async execute(params: ViewParams): Promise<Result<StrategicIndicator, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { StrategicIndicatorListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for strategic indicator operations\n */\nexport class StrategicIndicatorRemoteDataSource {\n constructor(private readonly client: NetworkClient) {}\n\n /**\n * Gets all strategic indicators from the API\n */\n async getAll(\n params?: StrategicIndicatorListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params?.domain) {\n queryParams['domain'] = params.domain;\n }\n\n if (params?.lang) {\n queryParams['lang'] = params.lang;\n }\n\n if (params?.page) {\n queryParams['page'] = params.page.toString();\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.STRATEGIC_INDICATOR_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params?.cancelToken,\n });\n }\n\n /**\n * Gets a strategic indicator by ID from the API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.STRATEGIC_INDICATOR_LIST}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { StrategicIndicatorListParams, ViewParams } from '../../../../types';\nimport { StrategicIndicator } from '../../domain/entities';\nimport { StrategicIndicatorRepository } from '../../domain/repositories';\nimport { StrategicIndicatorRemoteDataSource } from '../datasources';\n\n/**\n * Implementation of StrategicIndicatorRepository\n */\nexport class StrategicIndicatorRepositoryImpl implements StrategicIndicatorRepository {\n constructor(private readonly remoteDataSource: StrategicIndicatorRemoteDataSource) {}\n\n async getAll(\n params?: StrategicIndicatorListParams\n ): Promise<Result<ListResult<StrategicIndicator>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const indicatorsData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !indicatorsData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const indicators = indicatorsData.map((item) => StrategicIndicator.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || indicatorsData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: indicators,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => StrategicIndicator.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse strategic indicator: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<StrategicIndicator, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('Strategic indicator not found');\n }\n const indicatorData = response.data[0];\n if (!indicatorData) {\n throw new ParseFailure('Strategic indicator data is empty');\n }\n return StrategicIndicator.fromJson(indicatorData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse strategic indicator data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { StrategicIndicatorRemoteDataSource } from '../data/datasources';\nimport { StrategicIndicatorRepositoryImpl } from '../data/repositories';\nimport { GetAllStrategicIndicators, GetStrategicIndicatorById } from '../domain/usecases';\n\n/**\n * Dependency injector for StrategicIndicator feature\n */\nexport class StrategicIndicatorInjector {\n private static readonly REMOTE_DATA_SOURCE = 'StrategicIndicatorRemoteDataSource';\n private static readonly REPOSITORY = 'StrategicIndicatorRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllStrategicIndicators';\n private static readonly GET_BY_ID_USE_CASE = 'GetStrategicIndicatorById';\n\n /**\n * Registers all StrategicIndicator dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register remote data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new StrategicIndicatorRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const remoteDataSource = injector.resolve<StrategicIndicatorRemoteDataSource>(\n this.REMOTE_DATA_SOURCE\n );\n return new StrategicIndicatorRepositoryImpl(remoteDataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<StrategicIndicatorRepositoryImpl>(this.REPOSITORY);\n return new GetAllStrategicIndicators(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<StrategicIndicatorRepositoryImpl>(this.REPOSITORY);\n return new GetStrategicIndicatorById(repository);\n });\n }\n\n /**\n * Gets the GetAllStrategicIndicators use case\n */\n static getAllStrategicIndicatorsUseCase(injector: Injector): GetAllStrategicIndicators {\n return injector.resolve<GetAllStrategicIndicators>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Gets the GetStrategicIndicatorById use case\n */\n static getStrategicIndicatorByIdUseCase(injector: Injector): GetStrategicIndicatorById {\n return injector.resolve<GetStrategicIndicatorById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a variable (statistical indicator)\n */\nexport class Variable extends BaseEntity {\n constructor(\n public readonly id: number,\n public readonly title: string,\n public readonly subjectId: number,\n public readonly unit: string,\n public readonly verticalVariableCount: number,\n public readonly derivedVariableCount: number,\n public readonly graph: string[]\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n return {\n var_id: this.id,\n title: this.title,\n subject_id: this.subjectId,\n unit: this.unit,\n vertical_variable: this.verticalVariableCount,\n derived_variable: this.derivedVariableCount,\n graph: this.graph,\n };\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): Variable {\n const graphData = json.graph || json.graphs;\n let graphs: string[] = [];\n\n if (Array.isArray(graphData)) {\n graphs = graphData.map((item) => String(item));\n } else if (typeof graphData === 'string') {\n graphs = [graphData];\n }\n\n return new Variable(\n Number(json.var_id || json.id || 0),\n String(json.title || json.name || ''),\n Number(json.subject_id || json.subjectId || 0),\n String(json.unit || ''),\n Number(json.vertical_variable || json.verticalVariableCount || 0),\n Number(json.derived_variable || json.derivedVariableCount || 0),\n graphs\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { VariableListParams } from '../../../../types';\nimport { Variable } from '../entities';\nimport { VariableRepository } from '../repositories';\n\n/**\n * Use case for getting all variables\n */\nexport class GetAllVariables\n implements UseCase<VariableListParams | undefined, ListResult<Variable>>\n{\n constructor(private readonly repository: VariableRepository) {}\n\n async execute(params?: VariableListParams): Promise<Result<ListResult<Variable>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ViewParams } from '../../../../types';\nimport { Variable } from '../entities';\nimport { VariableRepository } from '../repositories';\n\n/**\n * Use case for getting a variable by ID\n */\nexport class GetVariableById implements UseCase<ViewParams, Variable> {\n constructor(private readonly repository: VariableRepository) {}\n\n async execute(params: ViewParams): Promise<Result<Variable, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { VariableListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for variable operations\n */\nexport class VariableRemoteDataSource {\n constructor(private readonly client: NetworkClient) {}\n\n /**\n * Gets all variables from the API\n */\n async getAll(\n params?: VariableListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params?.domain) {\n queryParams['domain'] = params.domain;\n }\n\n if (params?.lang) {\n queryParams['lang'] = params.lang;\n }\n\n if (params?.page) {\n queryParams['page'] = params.page.toString();\n }\n\n if (params?.subjectId) {\n queryParams['subject'] = params.subjectId.toString();\n }\n\n if (params?.showDeleted !== undefined) {\n queryParams['show_deleted'] = params.showDeleted ? '1' : '0';\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.VARIABLE_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params?.cancelToken,\n });\n }\n\n /**\n * Gets a variable by ID from the API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.VARIABLE_VIEW}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { VariableListParams, ViewParams } from '../../../../types';\nimport { Variable } from '../../domain/entities';\nimport { VariableRepository } from '../../domain/repositories';\nimport { VariableRemoteDataSource } from '../datasources';\n\n/**\n * Implementation of VariableRepository\n */\nexport class VariableRepositoryImpl implements VariableRepository {\n constructor(private readonly remoteDataSource: VariableRemoteDataSource) {}\n\n async getAll(params?: VariableListParams): Promise<Result<ListResult<Variable>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const variablesData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !variablesData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const variables = variablesData.map((item) => Variable.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || variablesData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: variables,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => Variable.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse variable: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<Variable, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('Variable not found');\n }\n const variableData = response.data[0];\n if (!variableData) {\n throw new ParseFailure('Variable data is empty');\n }\n return Variable.fromJson(variableData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse variable data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { VariableRemoteDataSource } from '../data/datasources';\nimport { VariableRepositoryImpl } from '../data/repositories';\nimport { GetAllVariables, GetVariableById } from '../domain/usecases';\n\n/**\n * Dependency injector for Variable feature\n */\nexport class VariableInjector {\n private static readonly REMOTE_DATA_SOURCE = 'VariableRemoteDataSource';\n private static readonly REPOSITORY = 'VariableRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllVariables';\n private static readonly GET_BY_ID_USE_CASE = 'GetVariableById';\n\n /**\n * Registers all Variable dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register remote data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new VariableRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const remoteDataSource = injector.resolve<VariableRemoteDataSource>(this.REMOTE_DATA_SOURCE);\n return new VariableRepositoryImpl(remoteDataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<VariableRepositoryImpl>(this.REPOSITORY);\n return new GetAllVariables(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<VariableRepositoryImpl>(this.REPOSITORY);\n return new GetVariableById(repository);\n });\n }\n\n /**\n * Gets the GetAllVariables use case\n */\n static getAllVariablesUseCase(injector: Injector): GetAllVariables {\n return injector.resolve<GetAllVariables>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Gets the GetVariableById use case\n */\n static getVariableByIdUseCase(injector: Injector): GetVariableById {\n return injector.resolve<GetVariableById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a vertical variable (sub-variable of a main variable)\n */\nexport class VerticalVariable extends BaseEntity {\n constructor(\n public readonly id: number,\n public readonly label: string,\n public readonly itemId: number,\n public readonly groupId: number,\n public readonly groupName: string\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n return {\n kode_ver_id: this.id,\n vervar: this.label,\n item_ver_id: this.itemId,\n group_ver_id: this.groupId,\n name_group_ver_id: this.groupName,\n };\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): VerticalVariable {\n return new VerticalVariable(\n Number(json.kode_ver_id || json.id || 0),\n String(json.vervar || json.label || ''),\n Number(json.item_ver_id || json.itemId || 0),\n Number(json.group_ver_id || json.groupId || 0),\n String(json.name_group_ver_id || json.groupName || '')\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { VerticalVariableListParams } from '../../../../types';\nimport { VerticalVariable } from '../entities';\nimport { VerticalVariableRepository } from '../repositories';\n\n/**\n * Use case for getting all vertical variables\n */\nexport class GetAllVerticalVariables\n implements UseCase<VerticalVariableListParams, ListResult<VerticalVariable>>\n{\n constructor(private readonly repository: VerticalVariableRepository) {}\n\n async execute(\n params: VerticalVariableListParams\n ): Promise<Result<ListResult<VerticalVariable>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ViewParams } from '../../../../types';\nimport { VerticalVariable } from '../entities';\nimport { VerticalVariableRepository } from '../repositories';\n\n/**\n * Use case for getting a vertical variable by ID\n */\nexport class GetVerticalVariableById implements UseCase<ViewParams, VerticalVariable> {\n constructor(private readonly repository: VerticalVariableRepository) {}\n\n async execute(params: ViewParams): Promise<Result<VerticalVariable, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { VerticalVariableListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for vertical variable operations\n */\nexport class VerticalVariableRemoteDataSource {\n constructor(private readonly client: NetworkClient) {}\n\n /**\n * Gets all vertical variables from the API\n */\n async getAll(\n params: VerticalVariableListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params.variableId !== undefined) {\n queryParams['var'] = params.variableId.toString();\n }\n\n if (params.domain) {\n queryParams['domain'] = params.domain;\n }\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n if (params.page) {\n queryParams['page'] = params.page.toString();\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.VERTICAL_VARIABLE_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n\n /**\n * Gets a vertical variable by ID from the API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.VERTICAL_VARIABLE_VIEW}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { VerticalVariableListParams, ViewParams } from '../../../../types';\nimport { VerticalVariable } from '../../domain/entities';\nimport { VerticalVariableRepository } from '../../domain/repositories';\nimport { VerticalVariableRemoteDataSource } from '../datasources';\n\n/**\n * Implementation of VerticalVariableRepository\n */\nexport class VerticalVariableRepositoryImpl implements VerticalVariableRepository {\n constructor(private readonly remoteDataSource: VerticalVariableRemoteDataSource) {}\n\n async getAll(\n params: VerticalVariableListParams\n ): Promise<Result<ListResult<VerticalVariable>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const verticalVariablesData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !verticalVariablesData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const verticalVariables = verticalVariablesData.map((item) =>\n VerticalVariable.fromJson(item)\n );\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || verticalVariablesData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: verticalVariables,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => VerticalVariable.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse vertical variable: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<VerticalVariable, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('Vertical variable not found');\n }\n const verticalVariableData = response.data[0];\n if (!verticalVariableData) {\n throw new ParseFailure('Vertical variable data is empty');\n }\n return VerticalVariable.fromJson(verticalVariableData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse vertical variable data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { VerticalVariableRemoteDataSource } from '../data/datasources';\nimport { VerticalVariableRepositoryImpl } from '../data/repositories';\nimport { GetAllVerticalVariables, GetVerticalVariableById } from '../domain/usecases';\n\n/**\n * Dependency injector for VerticalVariable feature\n */\nexport class VerticalVariableInjector {\n private static readonly REMOTE_DATA_SOURCE = 'VerticalVariableRemoteDataSource';\n private static readonly REPOSITORY = 'VerticalVariableRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllVerticalVariables';\n private static readonly GET_BY_ID_USE_CASE = 'GetVerticalVariableById';\n\n /**\n * Registers all VerticalVariable dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register remote data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new VerticalVariableRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const remoteDataSource = injector.resolve<VerticalVariableRemoteDataSource>(\n this.REMOTE_DATA_SOURCE\n );\n return new VerticalVariableRepositoryImpl(remoteDataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<VerticalVariableRepositoryImpl>(this.REPOSITORY);\n return new GetAllVerticalVariables(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<VerticalVariableRepositoryImpl>(this.REPOSITORY);\n return new GetVerticalVariableById(repository);\n });\n }\n\n /**\n * Gets the GetAllVerticalVariables use case\n */\n static getAllVerticalVariablesUseCase(injector: Injector): GetAllVerticalVariables {\n return injector.resolve<GetAllVerticalVariables>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Gets the GetVerticalVariableById use case\n */\n static getVerticalVariableByIdUseCase(injector: Injector): GetVerticalVariableById {\n return injector.resolve<GetVerticalVariableById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a unit of measurement\n */\nexport class Unit extends BaseEntity {\n constructor(\n public readonly id: number,\n public readonly name: string\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n return {\n unit_id: this.id,\n unit: this.name,\n };\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): Unit {\n return new Unit(Number(json.unit_id || json.id || 0), String(json.unit || json.name || ''));\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { UnitListParams } from '../../../../types';\nimport { Unit } from '../entities';\nimport { UnitRepository } from '../repositories';\n\n/**\n * Use case for getting all units\n */\nexport class GetAllUnits implements UseCase<UnitListParams | undefined, ListResult<Unit>> {\n constructor(private readonly repository: UnitRepository) {}\n\n async execute(params?: UnitListParams): Promise<Result<ListResult<Unit>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ViewParams } from '../../../../types';\nimport { Unit } from '../entities';\nimport { UnitRepository } from '../repositories';\n\n/**\n * Use case for getting a unit by ID\n */\nexport class GetUnitById implements UseCase<ViewParams, Unit> {\n constructor(private readonly repository: UnitRepository) {}\n\n async execute(params: ViewParams): Promise<Result<Unit, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { UnitListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for unit operations\n */\nexport class UnitRemoteDataSource {\n constructor(private readonly client: NetworkClient) {}\n\n /**\n * Gets all units from the API\n */\n async getAll(\n params?: UnitListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params?.domain) {\n queryParams['domain'] = params.domain;\n }\n\n if (params?.lang) {\n queryParams['lang'] = params.lang;\n }\n\n if (params?.page) {\n queryParams['page'] = params.page.toString();\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.UNIT_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params?.cancelToken,\n });\n }\n\n /**\n * Gets a unit by ID from the API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.UNIT_VIEW}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { UnitListParams, ViewParams } from '../../../../types';\nimport { Unit } from '../../domain/entities';\nimport { UnitRepository } from '../../domain/repositories';\nimport { UnitRemoteDataSource } from '../datasources';\n\n/**\n * Implementation of UnitRepository\n */\nexport class UnitRepositoryImpl implements UnitRepository {\n constructor(private readonly remoteDataSource: UnitRemoteDataSource) {}\n\n async getAll(params?: UnitListParams): Promise<Result<ListResult<Unit>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const unitsData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !unitsData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const units = unitsData.map((item) => Unit.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || unitsData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: units,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => Unit.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse unit: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<Unit, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('Unit not found');\n }\n const unitData = response.data[0];\n if (!unitData) {\n throw new ParseFailure('Unit data is empty');\n }\n return Unit.fromJson(unitData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse unit data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { UnitRemoteDataSource } from '../data/datasources';\nimport { UnitRepositoryImpl } from '../data/repositories';\nimport { GetAllUnits, GetUnitById } from '../domain/usecases';\n\n/**\n * Dependency injector for Unit feature\n */\nexport class UnitInjector {\n private static readonly REMOTE_DATA_SOURCE = 'UnitRemoteDataSource';\n private static readonly REPOSITORY = 'UnitRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllUnits';\n private static readonly GET_BY_ID_USE_CASE = 'GetUnitById';\n\n /**\n * Registers all Unit dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register remote data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new UnitRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const remoteDataSource = injector.resolve<UnitRemoteDataSource>(this.REMOTE_DATA_SOURCE);\n return new UnitRepositoryImpl(remoteDataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<UnitRepositoryImpl>(this.REPOSITORY);\n return new GetAllUnits(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<UnitRepositoryImpl>(this.REPOSITORY);\n return new GetUnitById(repository);\n });\n }\n\n /**\n * Gets the GetAllUnits use case\n */\n static getAllUnitsUseCase(injector: Injector): GetAllUnits {\n return injector.resolve<GetAllUnits>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Gets the GetUnitById use case\n */\n static getUnitByIdUseCase(injector: Injector): GetUnitById {\n return injector.resolve<GetUnitById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a time period for statistical data\n */\nexport class Period extends BaseEntity {\n constructor(\n public readonly id: number,\n public readonly period: number\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n return {\n th_id: this.id,\n th: this.period,\n };\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): Period {\n return new Period(Number(json.th_id || json.id || 0), Number(json.th || json.period || 0));\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { PeriodListParams } from '../../../../types';\nimport { Period } from '../entities';\nimport { PeriodRepository } from '../repositories';\n\n/**\n * Use case for getting all periods\n */\nexport class GetAllPeriods implements UseCase<PeriodListParams, ListResult<Period>> {\n constructor(private readonly repository: PeriodRepository) {}\n\n async execute(params: PeriodListParams): Promise<Result<ListResult<Period>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ViewParams } from '../../../../types';\nimport { Period } from '../entities';\nimport { PeriodRepository } from '../repositories';\n\n/**\n * Use case for getting a period by ID\n */\nexport class GetPeriodById implements UseCase<ViewParams, Period> {\n constructor(private readonly repository: PeriodRepository) {}\n\n async execute(params: ViewParams): Promise<Result<Period, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { PeriodListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for period operations\n */\nexport class PeriodRemoteDataSource {\n constructor(private readonly client: NetworkClient) {}\n\n /**\n * Gets all periods from the API\n */\n async getAll(\n params: PeriodListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params.variableId !== undefined) {\n queryParams['var'] = params.variableId.toString();\n }\n\n if (params.domain) {\n queryParams['domain'] = params.domain;\n }\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n if (params.page) {\n queryParams['page'] = params.page.toString();\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.PERIOD_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n\n /**\n * Gets a period by ID from the API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.PERIOD_VIEW}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { PeriodListParams, ViewParams } from '../../../../types';\nimport { Period } from '../../domain/entities';\nimport { PeriodRepository } from '../../domain/repositories';\nimport { PeriodRemoteDataSource } from '../datasources';\n\n/**\n * Implementation of PeriodRepository\n */\nexport class PeriodRepositoryImpl implements PeriodRepository {\n constructor(private readonly remoteDataSource: PeriodRemoteDataSource) {}\n\n async getAll(params: PeriodListParams): Promise<Result<ListResult<Period>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const periodsData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !periodsData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const periods = periodsData.map((item) => Period.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || periodsData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: periods,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => Period.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse period: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<Period, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('Period not found');\n }\n const periodData = response.data[0];\n if (!periodData) {\n throw new ParseFailure('Period data is empty');\n }\n return Period.fromJson(periodData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse period data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { PeriodRemoteDataSource } from '../data/datasources';\nimport { PeriodRepositoryImpl } from '../data/repositories';\nimport { GetAllPeriods, GetPeriodById } from '../domain/usecases';\n\n/**\n * Dependency injector for Period feature\n */\nexport class PeriodInjector {\n private static readonly REMOTE_DATA_SOURCE = 'PeriodRemoteDataSource';\n private static readonly REPOSITORY = 'PeriodRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllPeriods';\n private static readonly GET_BY_ID_USE_CASE = 'GetPeriodById';\n\n /**\n * Registers all Period dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register remote data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new PeriodRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const remoteDataSource = injector.resolve<PeriodRemoteDataSource>(this.REMOTE_DATA_SOURCE);\n return new PeriodRepositoryImpl(remoteDataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<PeriodRepositoryImpl>(this.REPOSITORY);\n return new GetAllPeriods(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<PeriodRepositoryImpl>(this.REPOSITORY);\n return new GetPeriodById(repository);\n });\n }\n\n /**\n * Gets the GetAllPeriods use case\n */\n static getAllPeriodsUseCase(injector: Injector): GetAllPeriods {\n return injector.resolve<GetAllPeriods>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Gets the GetPeriodById use case\n */\n static getPeriodByIdUseCase(injector: Injector): GetPeriodById {\n return injector.resolve<GetPeriodById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a derived period entity\n */\nexport class DerivedPeriod extends BaseEntity {\n constructor(\n public readonly id: number,\n public readonly period: string,\n public readonly groupId: number,\n public readonly groupName: string\n ) {\n super();\n }\n\n toJson(): Record<string, unknown> {\n return {\n turth_id: this.id,\n turth: this.period,\n group_turth_id: this.groupId,\n name_group_turth: this.groupName,\n };\n }\n\n static fromJson(json: Record<string, unknown>): DerivedPeriod {\n return new DerivedPeriod(\n Number(json.turth_id || json.id || 0),\n String(json.turth || json.period || ''),\n Number(json.group_turth_id || json.groupId || 0),\n String(json.name_group_turth || json.groupName || '')\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { DerivedPeriodListParams } from '../../../../types';\nimport { DerivedPeriod } from '../entities';\nimport { DerivedPeriodRepository } from '../repositories';\n\n/**\n * Use case for getting all derived periods\n */\nexport class GetAllDerivedPeriods {\n constructor(private readonly repository: DerivedPeriodRepository) {}\n\n execute(params: DerivedPeriodListParams): Promise<Result<ListResult<DerivedPeriod>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ViewParams } from '../../../../types';\nimport { DerivedPeriod } from '../entities';\nimport { DerivedPeriodRepository } from '../repositories';\n\n/**\n * Use case for getting a derived period by ID\n */\nexport class GetDerivedPeriodById {\n constructor(private readonly repository: DerivedPeriodRepository) {}\n\n execute(params: ViewParams): Promise<Result<DerivedPeriod, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { DerivedPeriodListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for derived period operations\n */\nexport class DerivedPeriodRemoteDataSource {\n constructor(private readonly client: NetworkClient) {}\n\n /**\n * Gets all derived periods from the API\n */\n async getAll(\n params: DerivedPeriodListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params.variableId !== undefined) {\n queryParams['var'] = params.variableId.toString();\n }\n\n if (params.domain) {\n queryParams['domain'] = params.domain;\n }\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n if (params.page) {\n queryParams['page'] = params.page.toString();\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.DERIVED_PERIOD_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n\n /**\n * Gets a derived period by ID from the API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.DERIVED_PERIOD_VIEW}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { DerivedPeriodListParams, ViewParams } from '../../../../types';\nimport { DerivedPeriod } from '../../domain/entities';\nimport { DerivedPeriodRepository } from '../../domain/repositories';\nimport { DerivedPeriodRemoteDataSource } from '../datasources';\n\n/**\n * Implementation of DerivedPeriodRepository\n */\nexport class DerivedPeriodRepositoryImpl implements DerivedPeriodRepository {\n constructor(private readonly remoteDataSource: DerivedPeriodRemoteDataSource) {}\n\n async getAll(\n params: DerivedPeriodListParams\n ): Promise<Result<ListResult<DerivedPeriod>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const derivedPeriodsData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !derivedPeriodsData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const derivedPeriods = derivedPeriodsData.map((item) => DerivedPeriod.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || derivedPeriodsData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: derivedPeriods,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => DerivedPeriod.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse derived period: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<DerivedPeriod, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('Derived period not found');\n }\n const derivedPeriodData = response.data[0];\n if (!derivedPeriodData) {\n throw new ParseFailure('Derived period data is empty');\n }\n return DerivedPeriod.fromJson(derivedPeriodData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse derived period data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { DerivedPeriodRemoteDataSource } from '../data/datasources';\nimport { DerivedPeriodRepositoryImpl } from '../data/repositories';\nimport { GetAllDerivedPeriods, GetDerivedPeriodById } from '../domain/usecases';\n\n/**\n * Dependency injector for DerivedPeriod feature\n */\nexport class DerivedPeriodInjector {\n private static readonly REMOTE_DATA_SOURCE = 'DerivedPeriodRemoteDataSource';\n private static readonly REPOSITORY = 'DerivedPeriodRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllDerivedPeriods';\n private static readonly GET_BY_ID_USE_CASE = 'GetDerivedPeriodById';\n\n /**\n * Registers all DerivedPeriod dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register remote data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new DerivedPeriodRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const remoteDataSource = injector.resolve<DerivedPeriodRemoteDataSource>(\n this.REMOTE_DATA_SOURCE\n );\n return new DerivedPeriodRepositoryImpl(remoteDataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<DerivedPeriodRepositoryImpl>(this.REPOSITORY);\n return new GetAllDerivedPeriods(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<DerivedPeriodRepositoryImpl>(this.REPOSITORY);\n return new GetDerivedPeriodById(repository);\n });\n }\n\n /**\n * Gets the GetAllDerivedPeriods use case\n */\n static getAllDerivedPeriodsUseCase(injector: Injector): GetAllDerivedPeriods {\n return injector.resolve<GetAllDerivedPeriods>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Gets the GetDerivedPeriodById use case\n */\n static getDerivedPeriodByIdUseCase(injector: Injector): GetDerivedPeriodById {\n return injector.resolve<GetDerivedPeriodById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a derived variable entity\n */\nexport class DerivedVariable extends BaseEntity {\n constructor(\n public readonly id: number,\n public readonly name: string,\n public readonly groupId: number,\n public readonly groupName: string\n ) {\n super();\n }\n\n toJson(): Record<string, unknown> {\n return {\n turvar_id: this.id,\n turvar: this.name,\n group_turvar_id: this.groupId,\n name_group_turvar: this.groupName,\n };\n }\n\n static fromJson(json: Record<string, unknown>): DerivedVariable {\n return new DerivedVariable(\n Number(json.turvar_id || json.id || 0),\n String(json.turvar || json.name || ''),\n Number(json.group_turvar_id || json.groupId || 0),\n String(json.name_group_turvar || json.groupName || '')\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { DerivedVariableListParams } from '../../../../types';\nimport { DerivedVariable } from '../entities';\nimport { DerivedVariableRepository } from '../repositories';\n\n/**\n * Use case for getting all derived variables\n */\nexport class GetAllDerivedVariables {\n constructor(private readonly repository: DerivedVariableRepository) {}\n\n execute(\n params: DerivedVariableListParams\n ): Promise<Result<ListResult<DerivedVariable>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ViewParams } from '../../../../types';\nimport { DerivedVariable } from '../entities';\nimport { DerivedVariableRepository } from '../repositories';\n\n/**\n * Use case for getting a derived variable by ID\n */\nexport class GetDerivedVariableById {\n constructor(private readonly repository: DerivedVariableRepository) {}\n\n execute(params: ViewParams): Promise<Result<DerivedVariable, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { DerivedVariableListParams, ViewParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for derived variable operations\n */\nexport class DerivedVariableRemoteDataSource {\n constructor(private readonly client: NetworkClient) {}\n\n /**\n * Gets all derived variables from the API\n */\n async getAll(\n params: DerivedVariableListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params.variableId !== undefined) {\n queryParams['var'] = params.variableId.toString();\n }\n\n if (params.domain) {\n queryParams['domain'] = params.domain;\n }\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n if (params.page) {\n queryParams['page'] = params.page.toString();\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.DERIVED_VARIABLE_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n\n /**\n * Gets a derived variable by ID from the API\n */\n async getById(\n params: ViewParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.DERIVED_VARIABLE_VIEW}/${params.id}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { DerivedVariableListParams, ViewParams } from '../../../../types';\nimport { DerivedVariable } from '../../domain/entities';\nimport { DerivedVariableRepository } from '../../domain/repositories';\nimport { DerivedVariableRemoteDataSource } from '../datasources';\n\n/**\n * Implementation of DerivedVariableRepository\n */\nexport class DerivedVariableRepositoryImpl implements DerivedVariableRepository {\n constructor(private readonly remoteDataSource: DerivedVariableRemoteDataSource) {}\n\n async getAll(\n params: DerivedVariableListParams\n ): Promise<Result<ListResult<DerivedVariable>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const derivedVariablesData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !derivedVariablesData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const derivedVariables = derivedVariablesData.map((item) => DerivedVariable.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || derivedVariablesData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: derivedVariables,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => DerivedVariable.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse derived variable: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<DerivedVariable, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('Derived variable not found');\n }\n const derivedVariableData = response.data[0];\n if (!derivedVariableData) {\n throw new ParseFailure('Derived variable data is empty');\n }\n return DerivedVariable.fromJson(derivedVariableData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse derived variable data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { DerivedVariableRemoteDataSource } from '../data/datasources';\nimport { DerivedVariableRepositoryImpl } from '../data/repositories';\nimport { GetAllDerivedVariables, GetDerivedVariableById } from '../domain/usecases';\n\n/**\n * Dependency injector for DerivedVariable feature\n */\nexport class DerivedVariableInjector {\n private static readonly REMOTE_DATA_SOURCE = 'DerivedVariableRemoteDataSource';\n private static readonly REPOSITORY = 'DerivedVariableRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllDerivedVariables';\n private static readonly GET_BY_ID_USE_CASE = 'GetDerivedVariableById';\n\n /**\n * Registers all DerivedVariable dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register remote data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new DerivedVariableRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const remoteDataSource = injector.resolve<DerivedVariableRemoteDataSource>(\n this.REMOTE_DATA_SOURCE\n );\n return new DerivedVariableRepositoryImpl(remoteDataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<DerivedVariableRepositoryImpl>(this.REPOSITORY);\n return new GetAllDerivedVariables(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<DerivedVariableRepositoryImpl>(this.REPOSITORY);\n return new GetDerivedVariableById(repository);\n });\n }\n\n /**\n * Gets the GetAllDerivedVariables use case\n */\n static getAllDerivedVariablesUseCase(injector: Injector): GetAllDerivedVariables {\n return injector.resolve<GetAllDerivedVariables>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Gets the GetDerivedVariableById use case\n */\n static getDerivedVariableByIdUseCase(injector: Injector): GetDerivedVariableById {\n return injector.resolve<GetDerivedVariableById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a statistic classification entity (KBLI)\n */\nexport class StatisticClassification extends BaseEntity {\n constructor(\n public readonly id: string,\n public readonly title: string\n ) {\n super();\n }\n\n toJson(): Record<string, unknown> {\n return {\n kbli_id: this.id,\n title: this.title,\n };\n }\n\n static fromJson(json: Record<string, unknown>): StatisticClassification {\n return new StatisticClassification(\n String(json.kbli_id || json.id || ''),\n String(json.title || json.name || '')\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { StatisticClassificationListParams } from '../../../../types';\nimport { StatisticClassification } from '../entities';\nimport { StatisticClassificationRepository } from '../repositories';\n\n/**\n * Use case for getting all statistic classifications\n */\nexport class GetAllStatisticClassifications {\n constructor(private readonly repository: StatisticClassificationRepository) {}\n\n execute(\n params?: StatisticClassificationListParams\n ): Promise<Result<ListResult<StatisticClassification>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ViewParams } from '../../../../types';\nimport { StatisticClassification } from '../entities';\nimport { StatisticClassificationRepository } from '../repositories';\n\n/**\n * Use case for getting a statistic classification by ID\n */\nexport class GetStatisticClassificationById {\n constructor(private readonly repository: StatisticClassificationRepository) {}\n\n execute(params: ViewParams): Promise<Result<StatisticClassification, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { NetworkClient } from '../../../../core/network';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ApiEndpoint } from '../../../../core/constants';\nimport { StatisticClassificationListParams, ViewParams, ResponseData } from '../../../../types';\nimport { ClassificationType } from '../../../../shared/enums';\n\n/**\n * Remote data source for statistic classification operations\n */\nexport class StatisticClassificationRemoteDataSource {\n constructor(private readonly client: NetworkClient) {}\n\n /**\n * Gets all statistic classifications from the API\n */\n async getAll(\n params?: StatisticClassificationListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n if (params?.domain) {\n queryParams['domain'] = params.domain;\n }\n\n if (params?.lang) {\n queryParams['lang'] = params.lang;\n }\n\n if (params?.page) {\n queryParams['page'] = params.page.toString();\n }\n\n if (params?.keyword) {\n queryParams['keyword'] = params.keyword;\n }\n\n if (params?.level) {\n queryParams['level'] = params.level;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const classificationType = params?.type || ClassificationType.KBLI_2020;\n const url = `${ApiEndpoint.statisticClassification(classificationType)}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params?.cancelToken,\n });\n }\n\n /**\n * Gets a statistic classification by ID from the API\n */\n async getById(\n params: ViewParams & { type?: ClassificationType }\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n id: params.id.toString(),\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const classificationType = params.type || ClassificationType.KBLI_2020;\n const url = `${ApiEndpoint.statisticClassification(classificationType)}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared/domain/entities';\nimport { StatisticClassificationListParams, ViewParams } from '../../../../types';\nimport { StatisticClassification } from '../../domain/entities';\nimport { StatisticClassificationRepository } from '../../domain/repositories';\nimport { StatisticClassificationRemoteDataSource } from '../datasources';\n\n/**\n * Implementation of StatisticClassificationRepository\n */\nexport class StatisticClassificationRepositoryImpl implements StatisticClassificationRepository {\n constructor(private readonly remoteDataSource: StatisticClassificationRemoteDataSource) {}\n\n async getAll(\n params?: StatisticClassificationListParams\n ): Promise<Result<ListResult<StatisticClassification>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const statisticClassificationsData = response.data[1] as unknown as Record<\n string,\n unknown\n >[];\n\n if (!paginationInfo || !statisticClassificationsData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const statisticClassifications = statisticClassificationsData.map((item) =>\n StatisticClassification.fromJson(item)\n );\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || statisticClassificationsData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: statisticClassifications,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => StatisticClassification.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse statistic classification: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n async getById(params: ViewParams): Promise<Result<StatisticClassification, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n if (response.data.length === 0) {\n throw new ParseFailure('Statistic classification not found');\n }\n const statisticClassificationData = response.data[0];\n if (!statisticClassificationData) {\n throw new ParseFailure('Statistic classification data is empty');\n }\n return StatisticClassification.fromJson(statisticClassificationData);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse statistic classification data: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { StatisticClassificationRemoteDataSource } from '../data/datasources';\nimport { StatisticClassificationRepositoryImpl } from '../data/repositories';\nimport { GetAllStatisticClassifications, GetStatisticClassificationById } from '../domain/usecases';\n\n/**\n * Dependency injector for StatisticClassification feature\n */\nexport class StatisticClassificationInjector {\n private static readonly REMOTE_DATA_SOURCE = 'StatisticClassificationRemoteDataSource';\n private static readonly REPOSITORY = 'StatisticClassificationRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllStatisticClassifications';\n private static readonly GET_BY_ID_USE_CASE = 'GetStatisticClassificationById';\n\n /**\n * Registers all StatisticClassification dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register remote data source\n injector.registerFactory(\n this.REMOTE_DATA_SOURCE,\n () => new StatisticClassificationRemoteDataSource(networkClient)\n );\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const remoteDataSource = injector.resolve<StatisticClassificationRemoteDataSource>(\n this.REMOTE_DATA_SOURCE\n );\n return new StatisticClassificationRepositoryImpl(remoteDataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<StatisticClassificationRepositoryImpl>(this.REPOSITORY);\n return new GetAllStatisticClassifications(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<StatisticClassificationRepositoryImpl>(this.REPOSITORY);\n return new GetStatisticClassificationById(repository);\n });\n }\n\n /**\n * Gets the GetAllStatisticClassifications use case\n */\n static getAllStatisticClassificationsUseCase(injector: Injector): GetAllStatisticClassifications {\n return injector.resolve<GetAllStatisticClassifications>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Gets the GetStatisticClassificationById use case\n */\n static getStatisticClassificationByIdUseCase(injector: Injector): GetStatisticClassificationById {\n return injector.resolve<GetStatisticClassificationById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a category in census data\n */\nexport class CensusCategory extends BaseEntity {\n constructor(\n public readonly id: string,\n public readonly name: string,\n public readonly itemId: string,\n public readonly itemCode: string,\n public readonly itemName: string\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n return {\n id: this.id,\n name: this.name,\n itemID: this.itemId,\n itemCode: this.itemCode,\n itemName: this.itemName,\n };\n }\n\n /**\n * Custom JSON serialization for JSON.stringify()\n */\n toJSON(): Record<string, unknown> {\n return this.toJson();\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): CensusCategory {\n return new CensusCategory(\n String(json.id || ''),\n String(json.name || ''),\n String(json.itemID || ''),\n String(json.itemCode || ''),\n String(json.itemName || '')\n );\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a census event (id=37)\n */\nexport class CensusEvent extends BaseEntity {\n constructor(\n public readonly id: string,\n public readonly name: string,\n public readonly year: number\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n return {\n id: this.id,\n kegiatan: this.name,\n tahun_kegiatan: this.year,\n };\n }\n\n /**\n * Custom JSON serialization for JSON.stringify()\n */\n toJSON(): Record<string, unknown> {\n return this.toJson();\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): CensusEvent {\n return new CensusEvent(\n String(json.id || ''),\n String(json.kegiatan || ''),\n Number(json.tahun_kegiatan || 0)\n );\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a census topic (id=38)\n */\nexport class CensusTopic extends BaseEntity {\n constructor(\n public readonly id: number,\n public readonly topic: string,\n public readonly eventId: string,\n public readonly eventName: string\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n return {\n id: this.id,\n topik: this.topic,\n id_kegiatan: this.eventId,\n kegiatan: this.eventName,\n };\n }\n\n /**\n * Custom JSON serialization for JSON.stringify()\n */\n toJSON(): Record<string, unknown> {\n return this.toJson();\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): CensusTopic {\n return new CensusTopic(\n Number(json.id || 0),\n String(json.topik || ''),\n String(json.id_kegiatan || ''),\n String(json.kegiatan || '')\n );\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a census area (id=39)\n */\nexport class CensusArea extends BaseEntity {\n constructor(\n public readonly id: number,\n public readonly mfdCode: string,\n public readonly name: string,\n public readonly slug: string\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n return {\n id: this.id,\n kode_mfd: this.mfdCode,\n nama: this.name,\n slug: this.slug,\n };\n }\n\n /**\n * Custom JSON serialization for JSON.stringify()\n */\n toJSON(): Record<string, unknown> {\n return this.toJson();\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): CensusArea {\n return new CensusArea(\n Number(json.id || 0),\n String(json.kode_mfd || ''),\n String(json.nama || ''),\n String(json.slug || '')\n );\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a census dataset (id=40)\n */\nexport class CensusDataset extends BaseEntity {\n constructor(\n public readonly id: number,\n public readonly topicId: number,\n public readonly topic: string,\n public readonly eventId: number,\n public readonly name: string,\n public readonly description?: string | null\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n const json: Record<string, unknown> = {\n id: this.id,\n id_topik: this.topicId,\n topik: this.topic,\n id_kegiatan: this.eventId,\n nama: this.name,\n };\n\n if (this.description !== undefined && this.description !== null) {\n json.deskripsi = this.description;\n }\n\n return json;\n }\n\n /**\n * Custom JSON serialization for JSON.stringify()\n */\n toJSON(): Record<string, unknown> {\n return this.toJson();\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): CensusDataset {\n return new CensusDataset(\n Number(json.id || 0),\n Number(json.id_topik || 0),\n String(json.topik || ''),\n Number(json.id_kegiatan || 0),\n String(json.nama || ''),\n json.deskripsi ? String(json.deskripsi) : null\n );\n }\n}\n","import { BaseEntity } from '../../../../core';\nimport { CensusCategory } from './CensusCategory';\n\n/**\n * Represents census data (id=41)\n */\nexport class CensusData extends BaseEntity {\n constructor(\n public readonly regionId: string,\n public readonly regionCode: string,\n public readonly regionName: string,\n public readonly indicatorId: string,\n public readonly indicatorName: string,\n public readonly categories: CensusCategory[],\n public readonly period: string,\n public readonly value: number,\n public readonly regionLevel?: string | null\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n const json: Record<string, unknown> = {\n id_wilayah: this.regionId,\n kode_wilayah: this.regionCode,\n nama_wilayah: this.regionName,\n id_indikator: this.indicatorId,\n nama_indikator: this.indicatorName,\n categories: this.categories.map((category) => ({\n id: category.id,\n name: category.name,\n item_id: category.itemId,\n item_code: category.itemCode,\n item_name: category.itemName,\n })),\n period: this.period,\n nilai: this.value,\n };\n\n if (this.regionLevel !== undefined && this.regionLevel !== null) {\n json.level_wilayah = this.regionLevel;\n }\n\n return json;\n }\n\n /**\n * Custom JSON serialization for JSON.stringify()\n */\n toJSON(): Record<string, unknown> {\n return this.toJson();\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): CensusData {\n // Parse categories from JSON\n const categories: CensusCategory[] = [];\n\n for (let i = 1; i <= 5; i++) {\n const categoryId = String(json[`id_kategori_${i}`] || '');\n const categoryName = String(json[`nama_kategori_${i}`] || '');\n const itemId = String(json[`id_item_kategori_${i}`] || '');\n const itemCode = String(json[`kode_item_kategori_${i}`] || '');\n const itemName = String(json[`nama_item__kategori_${i}`] || '');\n\n // Skip if any required field is empty\n if (!categoryId || !categoryName || !itemId || !itemCode || !itemName) {\n continue;\n }\n\n categories.push(new CensusCategory(categoryId, categoryName, itemId, itemCode, itemName));\n }\n\n return new CensusData(\n String(json.id_wilayah || ''),\n String(json.kode_wilayah || ''),\n String(json.nama_wilayah || ''),\n String(json.id_indikator || ''),\n String(json.nama_indikator || ''),\n categories,\n String(json.period || ''),\n Number(json.nilai || 0),\n json.level_wilayah ? String(json.level_wilayah) : null\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core/base';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared';\nimport { CensusListParams } from '../../../../types';\nimport { CensusEvent, CensusTopic, CensusArea, CensusDataset, CensusData } from '../entities';\nimport { CensusRepository } from '../repositories';\n\ntype CensusEntity = CensusEvent | CensusTopic | CensusArea | CensusDataset | CensusData;\n\n/**\n * Use case for getting all census data\n */\nexport class GetAllCensuses\n implements UseCase<CensusListParams | undefined, ListResult<CensusEntity>>\n{\n constructor(private repository: CensusRepository) {}\n\n /**\n * Executes the use case\n * @param params - List parameters\n * @returns Result containing list of census data or failure\n */\n async execute(params?: CensusListParams): Promise<Result<ListResult<CensusEntity>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core/base';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ViewParams } from '../../../../types';\nimport { CensusEvent } from '../entities';\nimport { CensusRepository } from '../repositories';\n\n/**\n * Use case for getting a census event by ID\n */\nexport class GetCensusById implements UseCase<ViewParams, CensusEvent> {\n constructor(private repository: CensusRepository) {}\n\n /**\n * Executes the use case\n * @param params - View parameters\n * @returns Result containing census event or failure\n */\n async execute(params: ViewParams): Promise<Result<CensusEvent, ApiFailure>> {\n return this.repository.getById(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiEndpoint, NetworkClient } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { CensusListParams, ResponseData, ViewParams } from '../../../../types';\n\n/**\n * Remote data source for Census operations\n */\nexport class CensusRemoteDataSource {\n constructor(private client: NetworkClient) {}\n\n /**\n * Gets census data from the API based on type\n * @param params - List parameters\n * @returns Result containing response data or failure\n */\n async getAll(\n params?: CensusListParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n // Determine which endpoint and parameters based on type\n switch (params?.type) {\n case 'topics':\n // id=38 for census topics\n queryParams['id'] = '38';\n if (params.censusId) {\n queryParams['kegiatan'] = params.censusId;\n }\n break;\n\n case 'areas':\n // id=39 for census areas\n queryParams['id'] = '39';\n if (params.censusId) {\n queryParams['kegiatan'] = params.censusId;\n }\n break;\n\n case 'datasets':\n // id=40 for census datasets\n queryParams['id'] = '40';\n if (params.censusId) {\n queryParams['kegiatan'] = params.censusId;\n }\n if (params.topicId) {\n queryParams['topik'] = params.topicId.toString();\n }\n break;\n\n case 'data':\n // id=41 for census data\n queryParams['id'] = '41';\n if (params.censusId) {\n queryParams['kegiatan'] = params.censusId;\n }\n if (params.censusAreaId) {\n queryParams['wilayah_sensus'] = params.censusAreaId;\n }\n if (params.datasetId) {\n queryParams['dataset'] = params.datasetId;\n }\n break;\n\n default:\n // id=37 for census events (default)\n queryParams['id'] = '37';\n break;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.CENSUS}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params?.cancelToken,\n });\n }\n\n /**\n * Gets a census event by ID from the API\n * @param params - View parameters\n * @returns Result containing response data or failure\n */\n async getById(params: ViewParams): Promise<Result<Record<string, unknown>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n id: params.id.toString(),\n domain: params.domain,\n };\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.CENSUS}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<Record<string, unknown>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { ListResult, Pagination } from '../../../../shared';\nimport { CensusListParams, ViewParams } from '../../../../types';\nimport {\n CensusEvent,\n CensusTopic,\n CensusArea,\n CensusDataset,\n CensusData,\n} from '../../domain/entities';\nimport { CensusRepository } from '../../domain/repositories';\nimport { CensusRemoteDataSource } from '../datasources';\n\n/**\n * Implementation of CensusRepository\n */\nexport class CensusRepositoryImpl implements CensusRepository {\n constructor(private remoteDataSource: CensusRemoteDataSource) {}\n\n /**\n * Gets all census data based on type\n * @param params - List parameters\n * @returns Result containing list of census data or failure\n */\n async getAll(\n params?: CensusListParams\n ): Promise<\n Result<\n ListResult<CensusEvent | CensusTopic | CensusArea | CensusDataset | CensusData>,\n ApiFailure\n >\n > {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // Handle null or missing data gracefully - return empty list\n if (!response.data || response.data === null) {\n return this.createEmptyListResult(params);\n }\n\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data is an array with at least 2 elements\n if (!Array.isArray(response.data) || response.data.length < 2) {\n return this.createEmptyListResult(params);\n }\n\n const paginationInfo = response.data[0];\n let censusesData = response.data[1] as unknown as\n | Record<string, unknown>[]\n | Record<string, unknown>;\n\n // Handle census data (id=41) which wraps the array in an object with 'data' property\n if (censusesData && !Array.isArray(censusesData) && typeof censusesData === 'object') {\n // Census data endpoint returns: { timestamp, status, data_count, data: [...] }\n const wrapper = censusesData;\n if (wrapper.data && Array.isArray(wrapper.data)) {\n censusesData = wrapper.data as Record<string, unknown>[];\n }\n }\n\n // Handle null or non-array census data\n if (!censusesData || !Array.isArray(censusesData)) {\n return this.createEmptyListResult(params, paginationInfo);\n }\n\n // Parse data based on type\n const censuses = censusesData.map((item) => this.parseEntity(item, params?.type));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || censusesData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n // Create ListResult directly with already-parsed entities\n return new ListResult(\n censuses,\n new Pagination(\n Number(paginationInfo.page || 1),\n perPage,\n Number(paginationInfo.total || 0),\n Number(paginationInfo.pages || 1),\n count\n )\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse census: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n /**\n * Gets a census event by ID\n * @param params - View parameters\n * @returns Result containing census event or failure\n */\n async getById(params: ViewParams): Promise<Result<CensusEvent, ApiFailure>> {\n const result = await this.remoteDataSource.getById(params);\n\n return result.map((response) => {\n try {\n return CensusEvent.fromJson(response);\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse census event: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n\n /**\n * Parses entity based on census type\n */\n private parseEntity(\n json: Record<string, unknown>,\n type?: 'events' | 'topics' | 'areas' | 'datasets' | 'data'\n ): CensusEvent | CensusTopic | CensusArea | CensusDataset | CensusData {\n switch (type) {\n case 'topics':\n return CensusTopic.fromJson(json);\n case 'areas':\n return CensusArea.fromJson(json);\n case 'datasets':\n return CensusDataset.fromJson(json);\n case 'data':\n return CensusData.fromJson(json);\n case 'events':\n default:\n return CensusEvent.fromJson(json);\n }\n }\n\n /**\n * Creates an empty list result with proper pagination\n */\n private createEmptyListResult(\n params?: CensusListParams,\n paginationInfo?: Record<string, unknown>\n ): ListResult<CensusEvent | CensusTopic | CensusArea | CensusDataset | CensusData> {\n return ListResult.fromJson(\n {\n data: [],\n pagination: {\n page: Number(paginationInfo?.page || 1),\n per_page: Number(paginationInfo?.per_page || 10),\n total: Number(paginationInfo?.total || 0),\n pages: Number(paginationInfo?.pages || 0),\n count: 0,\n },\n },\n (json: Record<string, unknown>) => this.parseEntity(json, params?.type)\n );\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { CensusRemoteDataSource } from '../data/datasources';\nimport { CensusRepositoryImpl } from '../data/repositories';\nimport { GetAllCensuses, GetCensusById } from '../domain/usecases';\n\n/**\n * Dependency injector for Census feature\n */\nexport class CensusInjector {\n private static readonly REMOTE_DATA_SOURCE = 'CensusRemoteDataSource';\n private static readonly REPOSITORY = 'CensusRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllCensuses';\n private static readonly GET_BY_ID_USE_CASE = 'GetCensusById';\n\n /**\n * Registers all Census dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register remote data source\n injector.registerFactory(this.REMOTE_DATA_SOURCE, () => {\n return new CensusRemoteDataSource(networkClient);\n });\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const remoteDataSource = injector.resolve<CensusRemoteDataSource>(this.REMOTE_DATA_SOURCE);\n return new CensusRepositoryImpl(remoteDataSource);\n });\n\n // Register use cases\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<CensusRepositoryImpl>(this.REPOSITORY);\n return new GetAllCensuses(repository);\n });\n\n injector.registerFactory(this.GET_BY_ID_USE_CASE, () => {\n const repository = injector.resolve<CensusRepositoryImpl>(this.REPOSITORY);\n return new GetCensusById(repository);\n });\n }\n\n /**\n * Gets the GetAllCensuses use case\n */\n static getAllCensusesUseCase(injector: Injector): GetAllCensuses {\n return injector.resolve<GetAllCensuses>(this.GET_ALL_USE_CASE);\n }\n\n /**\n * Gets the GetCensusById use case\n */\n static getCensusByIdUseCase(injector: Injector): GetCensusById {\n return injector.resolve<GetCensusById>(this.GET_BY_ID_USE_CASE);\n }\n}\n","import { BaseEntity } from '../../../../core';\n\n/**\n * Represents a dynamic statistical table from BPS Web API\n *\n * For list endpoint, contains basic variable metadata.\n * For detail endpoint (not yet implemented), would include comprehensive data.\n */\nexport class DynamicTable extends BaseEntity {\n constructor(\n public readonly variableId: number,\n public readonly title: string,\n public readonly subjectId: number,\n public readonly subjectName: string,\n public readonly notes: string,\n public readonly unit: string,\n public readonly verticalVariableId: number,\n public readonly domain: string,\n public readonly csaSubjectId?: number,\n public readonly csaSubjectName?: string,\n public readonly graphId?: number,\n public readonly graphName?: string\n ) {\n super();\n }\n\n /**\n * Converts the entity to JSON\n */\n toJson(): Record<string, unknown> {\n return {\n var: this.variableId,\n label: this.title,\n subj: this.subjectId,\n subj_label: this.subjectName,\n notes: this.notes,\n unit: this.unit,\n vervar: this.verticalVariableId,\n table: this.domain,\n subcsa: this.csaSubjectId,\n subcsa_label: this.csaSubjectName,\n graph: this.graphId,\n graph_label: this.graphName,\n };\n }\n\n /**\n * Creates an entity from JSON\n */\n static fromJson(json: Record<string, unknown>): DynamicTable {\n const varValue = json.var;\n const subjValue = json.subj;\n\n return new DynamicTable(\n typeof varValue === 'number' ? varValue : parseInt(String(varValue || 0)),\n String(json.label || ''),\n typeof subjValue === 'number' ? subjValue : parseInt(String(subjValue || 0)),\n String(json.subj_label || ''),\n String(json.notes || ''),\n String(json.unit || ''),\n Number(json.vervar || 0),\n String(json.table || ''),\n json.subcsa !== undefined ? Number(json.subcsa) : undefined,\n json.subcsa_label !== undefined ? String(json.subcsa_label) : undefined,\n json.graph !== undefined ? Number(json.graph) : undefined,\n json.graph_label !== undefined ? String(json.graph_label) : undefined\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core/base';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared';\nimport { DynamicTableParams } from '../../../../types';\nimport { DynamicTable } from '../entities';\nimport { DynamicTableRepository } from '../repositories';\n\n/**\n * Use case for getting all dynamic tables\n */\nexport class GetAllDynamicTables implements UseCase<DynamicTableParams, ListResult<DynamicTable>> {\n constructor(private repository: DynamicTableRepository) {}\n\n /**\n * Executes the use case\n * @param params - Dynamic table parameters\n * @returns Result containing list of dynamic tables or failure\n */\n async execute(params: DynamicTableParams): Promise<Result<ListResult<DynamicTable>, ApiFailure>> {\n return this.repository.getAll(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiEndpoint, NetworkClient } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { DynamicTableParams, ResponseData } from '../../../../types';\n\n/**\n * Remote data source for DynamicTable operations\n *\n * Note: The list of dynamic tables is handled by the Variable endpoint.\n * This datasource fetches variables which represent available tables.\n */\nexport class DynamicTableRemoteDataSource {\n constructor(private client: NetworkClient) {}\n\n /**\n * Gets all dynamic tables from the API\n * Uses the Variable endpoint since there's no dedicated dynamic table list endpoint\n * @param params - Dynamic table parameters\n * @returns Result containing response data or failure\n */\n async getAll(\n params: DynamicTableParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {};\n\n // For list operation, use domain from BaseListParams or fallback to tableId\n if (params.domain) {\n queryParams['domain'] = params.domain;\n } else {\n queryParams['domain'] = params.tableId;\n }\n\n if (params.lang) {\n queryParams['lang'] = params.lang;\n }\n\n if (params.page) {\n queryParams['page'] = params.page.toString();\n }\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.VARIABLE_LIST}${queryString ? `?${queryString}` : ''}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure, ParseFailure } from '../../../../core/failures';\nimport { ListResult } from '../../../../shared';\nimport { DynamicTableParams } from '../../../../types';\nimport { DynamicTable } from '../../domain/entities';\nimport { DynamicTableRepository } from '../../domain/repositories';\nimport { DynamicTableRemoteDataSource } from '../datasources';\n\n/**\n * Implementation of DynamicTableRepository\n */\nexport class DynamicTableRepositoryImpl implements DynamicTableRepository {\n constructor(private remoteDataSource: DynamicTableRemoteDataSource) {}\n\n /**\n * Gets all dynamic tables\n * @param params - Dynamic table parameters\n * @returns Result containing list of dynamic tables or failure\n */\n async getAll(params: DynamicTableParams): Promise<Result<ListResult<DynamicTable>, ApiFailure>> {\n const result = await this.remoteDataSource.getAll(params);\n\n return result.map((response) => {\n try {\n // BPS API returns data in format: data[0] = pagination info, data[1] = array of items\n // Validate that response.data exists and is an array with at least 2 elements\n if (!response.data || !Array.isArray(response.data) || response.data.length < 2) {\n throw new ParseFailure('Invalid response structure: missing or invalid data array');\n }\n\n const paginationInfo = response.data[0];\n const dynamicTablesData = response.data[1] as unknown as Record<string, unknown>[];\n\n if (!paginationInfo || !dynamicTablesData) {\n throw new ParseFailure('Invalid response structure');\n }\n\n const dynamicTables = dynamicTablesData.map((item) => DynamicTable.fromJson(item));\n\n // Calculate fallback values for missing pagination fields\n const count = Number(paginationInfo.count) || dynamicTablesData.length;\n const perPage = Number(paginationInfo.per_page) || count;\n\n return ListResult.fromJson(\n {\n data: dynamicTables,\n pagination: {\n page: Number(paginationInfo.page || 1),\n per_page: perPage,\n total: Number(paginationInfo.total || 0),\n pages: Number(paginationInfo.pages || 1),\n count: count,\n },\n },\n (json: Record<string, unknown>) => DynamicTable.fromJson(json)\n );\n } catch (error) {\n throw new ParseFailure(\n `Failed to parse dynamic table: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n });\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { DynamicTableRemoteDataSource } from '../data/datasources';\nimport { DynamicTableRepositoryImpl } from '../data/repositories';\nimport { GetAllDynamicTables } from '../domain/usecases';\n\n/**\n * Dependency injector for DynamicTable feature\n */\nexport class DynamicTableInjector {\n private static readonly REMOTE_DATA_SOURCE = 'DynamicTableRemoteDataSource';\n private static readonly REPOSITORY = 'DynamicTableRepository';\n private static readonly GET_ALL_USE_CASE = 'GetAllDynamicTables';\n\n /**\n * Registers all DynamicTable dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register remote data source\n injector.registerFactory(this.REMOTE_DATA_SOURCE, () => {\n return new DynamicTableRemoteDataSource(networkClient);\n });\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const remoteDataSource = injector.resolve<DynamicTableRemoteDataSource>(\n this.REMOTE_DATA_SOURCE\n );\n return new DynamicTableRepositoryImpl(remoteDataSource);\n });\n\n // Register use case\n injector.registerFactory(this.GET_ALL_USE_CASE, () => {\n const repository = injector.resolve<DynamicTableRepositoryImpl>(this.REPOSITORY);\n return new GetAllDynamicTables(repository);\n });\n }\n\n /**\n * Gets the GetAllDynamicTables use case\n */\n static getAllDynamicTablesUseCase(injector: Injector): GetAllDynamicTables {\n return injector.resolve<GetAllDynamicTables>(this.GET_ALL_USE_CASE);\n }\n}\n","import { Result } from 'neverthrow';\nimport { StadataList } from './StadataList';\nimport { ApiFailure } from '../core/failures';\nimport { ListResult } from '../shared/domain/entities';\nimport { Injector } from '../core/di';\nimport {\n DomainListParams,\n PublicationListParams,\n InfographicListParams,\n NewsListParams,\n NewsCategoryListParams,\n PressReleaseListParams,\n StaticTableListParams,\n SubjectListParams,\n SubjectCategoryListParams,\n StrategicIndicatorListParams,\n VariableListParams,\n VerticalVariableListParams,\n UnitListParams,\n PeriodListParams,\n DerivedPeriodListParams,\n DerivedVariableListParams,\n StatisticClassificationListParams,\n DynamicTableParams,\n} from '../types';\nimport { Domain, DomainInjector } from '../features/domain';\nimport { Publication, PublicationInjector } from '../features/publication';\nimport { Infographic, InfographicInjector } from '../features/infographic';\nimport { News, NewsInjector } from '../features/news';\nimport { NewsCategory, NewsCategoryInjector } from '../features/news-category';\nimport { PressRelease, PressReleaseInjector } from '../features/press-release';\nimport { StaticTable, StaticTableInjector } from '../features/static-table';\nimport { Subject, SubjectInjector } from '../features/subject';\nimport { SubjectCategory, SubjectCategoryInjector } from '../features/subject-category';\nimport { StrategicIndicator, StrategicIndicatorInjector } from '../features/strategic-indicator';\nimport { Variable, VariableInjector } from '../features/variable';\nimport { VerticalVariable, VerticalVariableInjector } from '../features/vertical-variable';\nimport { Unit, UnitInjector } from '../features/unit';\nimport { Period, PeriodInjector } from '../features/period';\nimport { DerivedPeriod, DerivedPeriodInjector } from '../features/derived-period';\nimport { DerivedVariable, DerivedVariableInjector } from '../features/derived-variable';\nimport {\n StatisticClassification,\n StatisticClassificationInjector,\n} from '../features/statistic-classification';\nimport {\n CensusEvent,\n CensusTopic,\n CensusArea,\n CensusDataset,\n CensusData,\n CensusInjector,\n} from '../features/census';\nimport { DynamicTable, DynamicTableInjector } from '../features/dynamic-table';\n\n/**\n * Implementation of StadataList interface\n */\nexport class StadataListImpl implements StadataList {\n constructor(private injector: Injector) {}\n\n async domains(params?: DomainListParams): Promise<Result<ListResult<Domain>, ApiFailure>> {\n const useCase = DomainInjector.getAllDomainsUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async publications(\n params: PublicationListParams\n ): Promise<Result<ListResult<Publication>, ApiFailure>> {\n const useCase = PublicationInjector.getAllPublicationsUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async infographics(\n params: InfographicListParams\n ): Promise<Result<ListResult<Infographic>, ApiFailure>> {\n const useCase = InfographicInjector.getAllInfographicsUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async news(params: NewsListParams): Promise<Result<ListResult<News>, ApiFailure>> {\n const useCase = NewsInjector.getAllNewsUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async newsCategories(\n params?: NewsCategoryListParams\n ): Promise<Result<ListResult<NewsCategory>, ApiFailure>> {\n const useCase = NewsCategoryInjector.getAllNewsCategoriesUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async pressReleases(\n params: PressReleaseListParams\n ): Promise<Result<ListResult<PressRelease>, ApiFailure>> {\n const useCase = PressReleaseInjector.getAllPressReleasesUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async staticTables(\n params: StaticTableListParams\n ): Promise<Result<ListResult<StaticTable>, ApiFailure>> {\n const useCase = StaticTableInjector.getAllStaticTablesUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async subjects(params?: SubjectListParams): Promise<Result<ListResult<Subject>, ApiFailure>> {\n const useCase = SubjectInjector.getAllSubjectsUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async subjectCategories(\n params?: SubjectCategoryListParams\n ): Promise<Result<ListResult<SubjectCategory>, ApiFailure>> {\n const useCase = SubjectCategoryInjector.getAllSubjectCategoriesUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async strategicIndicators(\n params?: StrategicIndicatorListParams\n ): Promise<Result<ListResult<StrategicIndicator>, ApiFailure>> {\n const useCase = StrategicIndicatorInjector.getAllStrategicIndicatorsUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async variables(params?: VariableListParams): Promise<Result<ListResult<Variable>, ApiFailure>> {\n const useCase = VariableInjector.getAllVariablesUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async verticalVariables(\n params: VerticalVariableListParams\n ): Promise<Result<ListResult<VerticalVariable>, ApiFailure>> {\n const useCase = VerticalVariableInjector.getAllVerticalVariablesUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async units(params?: UnitListParams): Promise<Result<ListResult<Unit>, ApiFailure>> {\n const useCase = UnitInjector.getAllUnitsUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async periods(params: PeriodListParams): Promise<Result<ListResult<Period>, ApiFailure>> {\n const useCase = PeriodInjector.getAllPeriodsUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async derivedPeriods(\n params: DerivedPeriodListParams\n ): Promise<Result<ListResult<DerivedPeriod>, ApiFailure>> {\n const useCase = DerivedPeriodInjector.getAllDerivedPeriodsUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async derivedVariables(\n params: DerivedVariableListParams\n ): Promise<Result<ListResult<DerivedVariable>, ApiFailure>> {\n const useCase = DerivedVariableInjector.getAllDerivedVariablesUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async statisticClassifications(\n params?: StatisticClassificationListParams\n ): Promise<Result<ListResult<StatisticClassification>, ApiFailure>> {\n const useCase = StatisticClassificationInjector.getAllStatisticClassificationsUseCase(\n this.injector\n );\n return useCase.execute(params);\n }\n\n async censusEvents(): Promise<Result<ListResult<CensusEvent>, ApiFailure>> {\n const useCase = CensusInjector.getAllCensusesUseCase(this.injector);\n return useCase.execute() as Promise<Result<ListResult<CensusEvent>, ApiFailure>>;\n }\n\n async censusTopics(params: {\n censusId: string;\n }): Promise<Result<ListResult<CensusTopic>, ApiFailure>> {\n const useCase = CensusInjector.getAllCensusesUseCase(this.injector);\n return useCase.execute({ censusId: params.censusId, type: 'topics' }) as Promise<\n Result<ListResult<CensusTopic>, ApiFailure>\n >;\n }\n\n async censusEventAreas(params: {\n censusId: string;\n }): Promise<Result<ListResult<CensusArea>, ApiFailure>> {\n const useCase = CensusInjector.getAllCensusesUseCase(this.injector);\n return useCase.execute({ censusId: params.censusId, type: 'areas' }) as Promise<\n Result<ListResult<CensusArea>, ApiFailure>\n >;\n }\n\n async censusEventDatasets(params: {\n censusId: string;\n topicId: number;\n }): Promise<Result<ListResult<CensusDataset>, ApiFailure>> {\n const useCase = CensusInjector.getAllCensusesUseCase(this.injector);\n return useCase.execute({\n censusId: params.censusId,\n topicId: params.topicId,\n type: 'datasets',\n }) as Promise<Result<ListResult<CensusDataset>, ApiFailure>>;\n }\n\n async censusData(params: {\n censusId: string;\n censusAreaId: string;\n datasetId: string;\n }): Promise<Result<ListResult<CensusData>, ApiFailure>> {\n const useCase = CensusInjector.getAllCensusesUseCase(this.injector);\n return useCase.execute({\n censusId: params.censusId,\n censusAreaId: params.censusAreaId,\n datasetId: params.datasetId,\n type: 'data',\n }) as Promise<Result<ListResult<CensusData>, ApiFailure>>;\n }\n\n async dynamicTables(\n params: DynamicTableParams\n ): Promise<Result<ListResult<DynamicTable>, ApiFailure>> {\n const useCase = DynamicTableInjector.getAllDynamicTablesUseCase(this.injector);\n return useCase.execute(params);\n }\n\n // TODO: Implement other features\n}\n","import { Result } from 'neverthrow';\nimport { StadataView } from './StadataView';\nimport { ApiFailure } from '../core/failures';\nimport { Injector } from '../core/di';\nimport { ViewParams } from '../types';\nimport { Publication, PublicationInjector } from '../features/publication';\nimport { Infographic, InfographicInjector } from '../features/infographic';\nimport { News, NewsInjector } from '../features/news';\nimport { NewsCategory, NewsCategoryInjector } from '../features/news-category';\nimport { PressRelease, PressReleaseInjector } from '../features/press-release';\nimport { StaticTable, StaticTableInjector } from '../features/static-table';\nimport { Subject, SubjectInjector } from '../features/subject';\nimport { SubjectCategory, SubjectCategoryInjector } from '../features/subject-category';\nimport { StrategicIndicator, StrategicIndicatorInjector } from '../features/strategic-indicator';\nimport { Variable, VariableInjector } from '../features/variable';\nimport { VerticalVariable, VerticalVariableInjector } from '../features/vertical-variable';\nimport { Unit, UnitInjector } from '../features/unit';\nimport { Period, PeriodInjector } from '../features/period';\nimport { DerivedPeriod, DerivedPeriodInjector } from '../features/derived-period';\nimport { DerivedVariable, DerivedVariableInjector } from '../features/derived-variable';\nimport {\n StatisticClassification,\n StatisticClassificationInjector,\n} from '../features/statistic-classification';\nimport { CensusEvent, CensusInjector } from '../features/census';\n\n/**\n * Implementation of StadataView interface\n */\nexport class StadataViewImpl implements StadataView {\n constructor(private injector: Injector) {}\n\n async publication(params: ViewParams): Promise<Result<Publication, ApiFailure>> {\n const useCase = PublicationInjector.getPublicationByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async infographic(params: ViewParams): Promise<Result<Infographic, ApiFailure>> {\n const useCase = InfographicInjector.getInfographicByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async news(params: ViewParams): Promise<Result<News, ApiFailure>> {\n const useCase = NewsInjector.getNewsByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async newsCategory(params: ViewParams): Promise<Result<NewsCategory, ApiFailure>> {\n const useCase = NewsCategoryInjector.getNewsCategoryByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async pressRelease(params: ViewParams): Promise<Result<PressRelease, ApiFailure>> {\n const useCase = PressReleaseInjector.getPressReleaseByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async staticTable(params: ViewParams): Promise<Result<StaticTable, ApiFailure>> {\n const useCase = StaticTableInjector.getStaticTableByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async subject(params: ViewParams): Promise<Result<Subject, ApiFailure>> {\n const useCase = SubjectInjector.getSubjectByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async subjectCategory(params: ViewParams): Promise<Result<SubjectCategory, ApiFailure>> {\n const useCase = SubjectCategoryInjector.getSubjectCategoryByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async strategicIndicator(params: ViewParams): Promise<Result<StrategicIndicator, ApiFailure>> {\n const useCase = StrategicIndicatorInjector.getStrategicIndicatorByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async variable(params: ViewParams): Promise<Result<Variable, ApiFailure>> {\n const useCase = VariableInjector.getVariableByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async verticalVariable(params: ViewParams): Promise<Result<VerticalVariable, ApiFailure>> {\n const useCase = VerticalVariableInjector.getVerticalVariableByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async unit(params: ViewParams): Promise<Result<Unit, ApiFailure>> {\n const useCase = UnitInjector.getUnitByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async period(params: ViewParams): Promise<Result<Period, ApiFailure>> {\n const useCase = PeriodInjector.getPeriodByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async derivedPeriod(params: ViewParams): Promise<Result<DerivedPeriod, ApiFailure>> {\n const useCase = DerivedPeriodInjector.getDerivedPeriodByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async derivedVariable(params: ViewParams): Promise<Result<DerivedVariable, ApiFailure>> {\n const useCase = DerivedVariableInjector.getDerivedVariableByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n async statisticClassification(\n params: ViewParams\n ): Promise<Result<StatisticClassification, ApiFailure>> {\n const useCase = StatisticClassificationInjector.getStatisticClassificationByIdUseCase(\n this.injector\n );\n return useCase.execute(params);\n }\n\n async census(params: ViewParams): Promise<Result<CensusEvent, ApiFailure>> {\n const useCase = CensusInjector.getCensusByIdUseCase(this.injector);\n return useCase.execute(params);\n }\n\n // TODO: Implement other features\n}\n","import { BaseEntity } from '../../../../core/base/BaseEntity';\n\n/**\n * Trade entity representing foreign trade (export/import) data\n */\nexport class Trade extends BaseEntity {\n constructor(\n public readonly value: number,\n public readonly netWeight: number,\n public readonly hsCode: string,\n public readonly port: string,\n public readonly country: string,\n public readonly year: string\n ) {\n super();\n }\n\n toJson(): Record<string, unknown> {\n return {\n value: this.value,\n netweight: this.netWeight,\n kodehs: this.hsCode,\n pod: this.port,\n ctr: this.country,\n tahun: this.year,\n };\n }\n\n static fromJson(json: Record<string, unknown>): Trade {\n return new Trade(\n Number(json.value || 0),\n Number(json.netweight || 0),\n String(json.kodehs || ''),\n String(json.pod || ''),\n String(json.ctr || ''),\n String(json.tahun || '')\n );\n }\n}\n","import { Result } from 'neverthrow';\nimport { UseCase } from '../../../../core/base';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ResponseData, TradeParams } from '../../../../types';\nimport { TradeRepository } from '../repositories/TradeRepository';\n\n/**\n * Use case for getting trade data\n */\nexport class GetTrade implements UseCase<TradeParams, ResponseData<Record<string, unknown>>> {\n constructor(private repository: TradeRepository) {}\n\n execute(params: TradeParams): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n return this.repository.get(params);\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiEndpoint, NetworkClient } from '../../../../core';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ResponseData, TradeParams } from '../../../../types';\n\n/**\n * Remote data source for Trade operations\n */\nexport class TradeRemoteDataSource {\n constructor(private client: NetworkClient) {}\n\n /**\n * Gets trade data from the API\n * @param params - Trade parameters\n * @returns Result containing response data or failure\n */\n async get(\n params: TradeParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const queryParams: Record<string, string> = {\n sumber: params.source.toString(),\n periode: params.period.toString(),\n kodehs: params.hsCode,\n jenishs: params.hsType.toString(),\n tahun: params.year,\n };\n\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `${ApiEndpoint.TRADE}?${queryString}`;\n\n return this.client.get<ResponseData<Record<string, unknown>>>(url, {\n cancelToken: params.cancelToken,\n });\n }\n}\n","import { Result } from 'neverthrow';\nimport { ApiFailure } from '../../../../core/failures';\nimport { ResponseData, TradeParams } from '../../../../types';\nimport { TradeRepository } from '../../domain/repositories/TradeRepository';\nimport { TradeRemoteDataSource } from '../datasources/TradeRemoteDataSource';\n\n/**\n * Implementation of TradeRepository\n */\nexport class TradeRepositoryImpl implements TradeRepository {\n constructor(private remoteDataSource: TradeRemoteDataSource) {}\n\n get(params: TradeParams): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n return this.remoteDataSource.get(params);\n }\n}\n","import { Injector } from '../../../core/di';\nimport { NetworkClient } from '../../../core/network';\nimport { TradeRemoteDataSource } from '../data/datasources';\nimport { TradeRepositoryImpl } from '../data/repositories';\nimport { GetTrade } from '../domain/usecases';\n\n/**\n * Dependency injector for Trade feature\n */\nexport class TradeInjector {\n private static readonly REMOTE_DATA_SOURCE = 'TradeRemoteDataSource';\n private static readonly REPOSITORY = 'TradeRepository';\n private static readonly GET_TRADE_USE_CASE = 'GetTrade';\n\n /**\n * Registers all Trade dependencies\n */\n static register(injector: Injector, networkClient: NetworkClient): void {\n // Register remote data source\n injector.registerFactory(this.REMOTE_DATA_SOURCE, () => {\n return new TradeRemoteDataSource(networkClient);\n });\n\n // Register repository\n injector.registerFactory(this.REPOSITORY, () => {\n const remoteDataSource = injector.resolve<TradeRemoteDataSource>(this.REMOTE_DATA_SOURCE);\n return new TradeRepositoryImpl(remoteDataSource);\n });\n\n // Register use case\n injector.registerFactory(this.GET_TRADE_USE_CASE, () => {\n const repository = injector.resolve<TradeRepositoryImpl>(this.REPOSITORY);\n return new GetTrade(repository);\n });\n }\n\n /**\n * Gets the GetTrade use case\n */\n static getTradeUseCase(injector: Injector): GetTrade {\n return injector.resolve<GetTrade>(this.GET_TRADE_USE_CASE);\n }\n}\n","import { Injector } from './core/di';\nimport { NetworkClient, NetworkInterceptor, AuthInterceptor } from './core/network';\nimport { ApiConstant } from './core/constants';\nimport { ApiConfig } from './config';\nimport { StadataList, StadataView, StadataListImpl, StadataViewImpl } from './api';\nimport { DomainInjector } from './features/domain';\nimport { PublicationInjector } from './features/publication';\nimport { InfographicInjector } from './features/infographic';\nimport { NewsInjector } from './features/news';\nimport { NewsCategoryInjector } from './features/news-category';\nimport { PressReleaseInjector } from './features/press-release';\nimport { StaticTableInjector } from './features/static-table';\nimport { SubjectInjector } from './features/subject';\nimport { SubjectCategoryInjector } from './features/subject-category';\nimport { StrategicIndicatorInjector } from './features/strategic-indicator';\nimport { VariableInjector } from './features/variable';\nimport { VerticalVariableInjector } from './features/vertical-variable';\nimport { UnitInjector } from './features/unit';\nimport { PeriodInjector } from './features/period';\nimport { DerivedPeriodInjector } from './features/derived-period';\nimport { DerivedVariableInjector } from './features/derived-variable';\nimport { StatisticClassificationInjector } from './features/statistic-classification';\nimport { CensusInjector } from './features/census';\nimport { DynamicTableInjector } from './features/dynamic-table';\nimport { TradeInjector } from './features/trade';\nimport { Logger, LogLevel, ProductionLogFilter } from './core/log';\nimport { GetTrade } from './features/trade';\nimport { TradeParams, ResponseData } from './types';\nimport { Result } from 'neverthrow';\nimport { ApiFailure } from './core/failures';\n\n/**\n * Configuration options for StadataJS\n */\nexport interface StadataJSConfig {\n /**\n * API key for authentication\n */\n apiKey: string;\n\n /**\n * Base URL for API (optional, defaults to BPS API)\n */\n baseURL?: string;\n\n /**\n * Request timeout in milliseconds (optional, defaults to 30000)\n */\n timeout?: number;\n\n /**\n * Additional network interceptors (optional)\n */\n interceptors?: NetworkInterceptor[];\n\n /**\n * Enable debug logging (optional, defaults to false)\n */\n debug?: boolean;\n\n /**\n * Minimum log level (optional, defaults to INFO)\n */\n logLevel?: LogLevel;\n}\n\n/**\n * Main SDK class for Stadata API\n * Provides a singleton instance with configured API clients\n *\n * @example\n * ```typescript\n * // Initialize the SDK\n * await StadataJS.init({ apiKey: 'your-api-key' });\n *\n * // Get the instance\n * const stadata = StadataJS.instance;\n *\n * // Use list API\n * const domainsResult = await stadata.list.domains();\n *\n * // Use view API\n * const domainResult = await stadata.view.domain({ id: '7200', domain: '7200' });\n * ```\n */\nexport class StadataJS {\n private static _instance: StadataJS | null = null;\n private _list: StadataList;\n private _view: StadataView;\n private injector: Injector;\n private networkClient: NetworkClient;\n private authInterceptor: AuthInterceptor;\n private logger: Logger;\n\n private constructor(config: StadataJSConfig) {\n // Configure logger\n this.logger = Logger.getInstance();\n this.logger.configure({\n enabled: config.debug ?? false,\n filter: new ProductionLogFilter(config.logLevel ?? LogLevel.INFO),\n });\n\n // Store API key\n ApiConfig.getInstance().setApiKey(config.apiKey);\n\n // Create auth interceptor\n this.authInterceptor = new AuthInterceptor(config.apiKey);\n\n // Create network client\n const interceptors = [this.authInterceptor, ...(config.interceptors || [])];\n this.networkClient = new NetworkClient({\n baseURL: config.baseURL || ApiConstant.BASE_URL,\n timeout: config.timeout || ApiConstant.DEFAULT_TIMEOUT,\n interceptors,\n });\n\n // Setup dependency injection\n this.injector = Injector.getInstance();\n this.setupDependencies();\n\n // Create API implementations\n this._list = new StadataListImpl(this.injector);\n this._view = new StadataViewImpl(this.injector);\n\n this.logger.info('StadataJS initialized successfully');\n }\n\n /**\n * Gets the singleton instance\n * @throws Error if SDK is not initialized\n */\n static get instance(): StadataJS {\n if (!StadataJS._instance) {\n throw new Error('StadataJS not initialized. Call StadataJS.init() first.');\n }\n return StadataJS._instance;\n }\n\n /**\n * Initializes the SDK\n * @param config - Configuration options\n * @returns The SDK instance\n */\n static init(config: StadataJSConfig): StadataJS {\n if (StadataJS._instance) {\n StadataJS._instance.logger.warn('StadataJS already initialized. Reinitializing...');\n }\n\n StadataJS._instance = new StadataJS(config);\n return StadataJS._instance;\n }\n\n /**\n * Checks if SDK is initialized\n */\n static isInitialized(): boolean {\n return StadataJS._instance !== null;\n }\n\n /**\n * Destroys the SDK instance\n */\n static destroy(): void {\n if (StadataJS._instance) {\n StadataJS._instance.cleanup();\n StadataJS._instance = null;\n }\n }\n\n /**\n * Gets the list API\n */\n get list(): StadataList {\n return this._list;\n }\n\n /**\n * Gets the view API\n */\n get view(): StadataView {\n return this._view;\n }\n\n /**\n * Updates the API key\n */\n setApiKey(apiKey: string): void {\n ApiConfig.getInstance().setApiKey(apiKey);\n this.authInterceptor.setApiKey(apiKey);\n this.logger.info('API key updated');\n }\n\n /**\n * Adds a network interceptor\n */\n addInterceptor(interceptor: NetworkInterceptor): void {\n this.networkClient.addInterceptor(interceptor);\n this.logger.debug('Interceptor added');\n }\n\n /**\n * Removes a network interceptor\n */\n removeInterceptor(interceptor: NetworkInterceptor): void {\n this.networkClient.removeInterceptor(interceptor);\n this.logger.debug('Interceptor removed');\n }\n\n /**\n * Enables debug logging\n */\n enableDebug(): void {\n this.logger.enable();\n this.logger.configure({\n filter: new ProductionLogFilter(LogLevel.DEBUG),\n });\n }\n\n /**\n * Disables debug logging\n */\n disableDebug(): void {\n this.logger.configure({\n filter: new ProductionLogFilter(LogLevel.INFO),\n });\n }\n\n /**\n * Gets trade data from BPS API\n * @param params - Trade query parameters\n * @returns Trade data result\n *\n * @example\n * ```typescript\n * const result = await stadata.trade({\n * source: TradeSource.Export,\n * period: TradePeriod.Monthly,\n * hsCode: '01',\n * hsType: HSCodeType.TwoDigit,\n * year: '2023'\n * });\n *\n * if (result.isOk()) {\n * console.log(result.value);\n * }\n * ```\n */\n async trade(\n params: TradeParams\n ): Promise<Result<ResponseData<Record<string, unknown>>, ApiFailure>> {\n const useCase = this.injector.resolve<GetTrade>('GetTrade');\n return useCase.execute(params);\n }\n\n /**\n * Sets up all feature dependencies\n */\n private setupDependencies(): void {\n // Register domain feature\n DomainInjector.register(this.injector, this.networkClient);\n\n // Register publication feature\n PublicationInjector.register(this.injector, this.networkClient);\n\n // Register infographic feature\n InfographicInjector.register(this.injector, this.networkClient);\n\n // Register news feature\n NewsInjector.register(this.injector, this.networkClient);\n\n // Register news category feature\n NewsCategoryInjector.register(this.injector, this.networkClient);\n\n // Register press release feature\n PressReleaseInjector.register(this.injector, this.networkClient);\n\n // Register static table feature\n StaticTableInjector.register(this.injector, this.networkClient);\n\n // Register subject feature\n SubjectInjector.register(this.injector, this.networkClient);\n\n // Register subject category feature\n SubjectCategoryInjector.register(this.injector, this.networkClient);\n\n // Register strategic indicator feature\n StrategicIndicatorInjector.register(this.injector, this.networkClient);\n\n // Register variable feature\n VariableInjector.register(this.injector, this.networkClient);\n\n // Register vertical variable feature\n VerticalVariableInjector.register(this.injector, this.networkClient);\n\n // Register unit feature\n UnitInjector.register(this.injector, this.networkClient);\n\n // Register period feature\n PeriodInjector.register(this.injector, this.networkClient);\n\n // Register derived period feature\n DerivedPeriodInjector.register(this.injector, this.networkClient);\n\n // Register derived variable feature\n DerivedVariableInjector.register(this.injector, this.networkClient);\n\n // Register statistic classification feature\n StatisticClassificationInjector.register(this.injector, this.networkClient);\n\n // Register census feature\n CensusInjector.register(this.injector, this.networkClient);\n\n // Register dynamic table feature\n DynamicTableInjector.register(this.injector, this.networkClient);\n\n // Register trade feature\n TradeInjector.register(this.injector, this.networkClient);\n\n // TODO: Register other features\n // ... etc\n }\n\n /**\n * Cleanup resources\n */\n private cleanup(): void {\n this.injector.clear();\n ApiConfig.getInstance().clearApiKey();\n this.logger.info('StadataJS cleaned up');\n }\n}\n","import { DataLanguage, ClassificationType, ClassificationLevel, DomainType } from '../shared/enums';\nimport { CancelToken } from '../core/utils';\n\n/**\n * Generic JSON type\n */\nexport type JSON = Record<string, unknown>;\n\n/**\n * Base parameters for list requests\n */\nexport interface BaseListParams {\n /**\n * Domain code\n */\n domain?: string;\n\n /**\n * Language\n */\n lang?: DataLanguage;\n\n /**\n * Page number (1-based)\n */\n page?: number;\n\n /**\n * Number of items per page\n */\n perPage?: number;\n\n /**\n * Cancel token for request cancellation\n */\n cancelToken?: CancelToken;\n}\n\n/**\n * Parameters for domain list\n */\nexport interface DomainListParams extends Omit<BaseListParams, 'domain'> {\n /**\n * Domain type (required)\n */\n type: DomainType;\n\n /**\n * Province code (required when type is REGENCY_BY_PROVINCE)\n */\n provinceCode?: string;\n\n /**\n * Keyword search\n */\n keyword?: string;\n}\n\n/**\n * Parameters for publication list\n */\nexport interface PublicationListParams extends BaseListParams {\n /**\n * Keyword search\n */\n keyword?: string;\n\n /**\n * Month filter\n */\n month?: number;\n\n /**\n * Year filter\n */\n year?: number;\n}\n\n/**\n * Parameters for infographic list\n */\nexport interface InfographicListParams extends BaseListParams {\n /**\n * Keyword search\n */\n keyword?: string;\n}\n\n/**\n * Parameters for static table list\n */\nexport interface StaticTableListParams extends BaseListParams {\n /**\n * Keyword search\n */\n keyword?: string;\n\n /**\n * Month filter\n */\n month?: number;\n\n /**\n * Year filter\n */\n year?: number;\n}\n\n/**\n * Parameters for news list\n */\nexport interface NewsListParams extends BaseListParams {\n /**\n * Keyword search\n */\n keyword?: string;\n\n /**\n * Month filter\n */\n month?: number;\n\n /**\n * Year filter\n */\n year?: number;\n\n /**\n * News category ID\n */\n newsCategoryId?: string;\n}\n\n/**\n * Parameters for news category list\n */\nexport interface NewsCategoryListParams extends BaseListParams {}\n\n/**\n * Parameters for press release list\n */\nexport interface PressReleaseListParams extends BaseListParams {\n /**\n * Keyword search\n */\n keyword?: string;\n\n /**\n * Month filter\n */\n month?: number;\n\n /**\n * Year filter\n */\n year?: number;\n}\n\n/**\n * Parameters for subject list\n */\nexport interface SubjectListParams extends BaseListParams {}\n\n/**\n * Parameters for subject category list\n */\nexport interface SubjectCategoryListParams extends BaseListParams {}\n\n/**\n * Parameters for strategic indicator list\n */\nexport interface StrategicIndicatorListParams extends BaseListParams {}\n\n/**\n * Parameters for variable list\n */\nexport interface VariableListParams extends BaseListParams {\n /**\n * Subject ID\n */\n subjectId?: number;\n\n /**\n * Show deleted items\n */\n showDeleted?: boolean;\n}\n\n/**\n * Parameters for vertical variable list\n */\nexport interface VerticalVariableListParams extends BaseListParams {\n /**\n * Variable ID (optional)\n */\n variableId?: number;\n}\n\n/**\n * Parameters for unit list\n */\nexport interface UnitListParams extends BaseListParams {}\n\n/**\n * Parameters for period list\n */\nexport interface PeriodListParams extends BaseListParams {\n /**\n * Variable ID (optional)\n */\n variableId?: number;\n}\n\n/**\n * Parameters for derived period list\n */\nexport interface DerivedPeriodListParams extends BaseListParams {\n /**\n * Variable ID (optional)\n */\n variableId?: number;\n}\n\n/**\n * Parameters for derived variable list\n */\nexport interface DerivedVariableListParams extends BaseListParams {\n /**\n * Variable ID (optional)\n */\n variableId?: number;\n}\n\n/**\n * Parameters for dynamic table\n */\nexport interface DynamicTableParams extends BaseListParams {\n /**\n * Table ID\n */\n tableId: string;\n\n /**\n * Variable ID\n */\n variableId: number;\n\n /**\n * Period ID\n */\n periodId?: number;\n\n /**\n * Derived variable ID\n */\n derivedVariableId?: number;\n\n /**\n * Derived period ID\n */\n derivedPeriodId?: number;\n}\n\n/**\n * Parameters for statistic classification list\n */\nexport interface StatisticClassificationListParams extends BaseListParams {\n /**\n * Classification type (defaults to KBLI_2020)\n */\n type?: ClassificationType;\n\n /**\n * Classification level (optional filter)\n */\n level?: ClassificationLevel;\n\n /**\n * Keyword search\n */\n keyword?: string;\n}\n\n/**\n * Parameters for census list\n */\nexport interface CensusListParams {\n /**\n * Type of census data to retrieve\n */\n type?: 'events' | 'topics' | 'areas' | 'datasets' | 'data';\n\n /**\n * Census ID (required for topics, areas, datasets, data)\n */\n censusId?: string;\n\n /**\n * Topic ID (required for datasets)\n */\n topicId?: number;\n\n /**\n * Census Area ID (required for data)\n */\n censusAreaId?: string;\n\n /**\n * Dataset ID (required for data)\n */\n datasetId?: string;\n\n /**\n * Cancel token for request cancellation\n */\n cancelToken?: CancelToken;\n}\n\n/**\n * Parameters for view requests\n */\nexport interface ViewParams {\n /**\n * Item ID\n */\n id: number | string;\n\n /**\n * Domain code\n */\n domain: string;\n\n /**\n * Language\n */\n lang?: DataLanguage;\n\n /**\n * Cancel token for request cancellation\n */\n cancelToken?: CancelToken;\n}\n\n/**\n * Trade source enum\n */\nexport enum TradeSource {\n Export = 1,\n Import = 2,\n}\n\n/**\n * Trade period enum\n */\nexport enum TradePeriod {\n Monthly = 1,\n Annually = 2,\n}\n\n/**\n * HS Code type enum\n */\nexport enum HSCodeType {\n TwoDigit = 1,\n Full = 2,\n}\n\n/**\n * Parameters for trade data\n */\nexport interface TradeParams {\n /**\n * Source of the data (1: Export, 2: Import)\n */\n source: TradeSource;\n\n /**\n * Period of the data (1: Monthly, 2: Annually)\n */\n period: TradePeriod;\n\n /**\n * HS Code of the data (use ; for multiple HS Code)\n */\n hsCode: string;\n\n /**\n * Type of HS Code (1: Two digit, 2: Full HS Code)\n */\n hsType: HSCodeType;\n\n /**\n * Year of data\n */\n year: string;\n\n /**\n * Cancel token for request cancellation\n */\n cancelToken?: CancelToken;\n}\n\n/**\n * Request data type\n */\nexport type RequestData = Record<string, string | number | boolean | undefined>;\n\n/**\n * Response data type\n */\nexport type ResponseData<T> = {\n data: T[];\n 'data-availability': string;\n pagination?: {\n page: number;\n per_page: number;\n total: number;\n pages: number;\n count: number;\n };\n};\n"]}
|