From 1ba1d78ae523ffedf9d40704b300ee68ae4aeb3f Mon Sep 17 00:00:00 2001 From: hltav Date: Wed, 22 Apr 2026 16:30:11 -0300 Subject: [PATCH 1/5] =?UTF-8?q?WIP:=20altera=C3=A7=C3=B5es=20locais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cspell/custom-dictionary-workspace.txt | 39 + .hintrc | 8 + .../sobjects/standardObjects/Account.cls | 196 + .../standardObjects/AccountHistory.cls | 25 + .../tools/sobjects/standardObjects/Asset.cls | 138 + .../sobjects/standardObjects/Attachment.cls | 35 + .sfdx/tools/sobjects/standardObjects/Case.cls | 111 + .../sobjects/standardObjects/Contact.cls | 167 + .../sobjects/standardObjects/Contract.cls | 96 + .../tools/sobjects/standardObjects/Domain.cls | 29 + .sfdx/tools/sobjects/standardObjects/Lead.cls | 128 + .sfdx/tools/sobjects/standardObjects/Note.cls | 32 + .../sobjects/standardObjects/Opportunity.cls | 113 + .../tools/sobjects/standardObjects/Order.cls | 127 + .../sobjects/standardObjects/Pricebook2.cls | 47 + .../standardObjects/PricebookEntry.cls | 47 + .../sobjects/standardObjects/Product2.cls | 91 + .../sobjects/standardObjects/RecordType.cls | 35 + .../tools/sobjects/standardObjects/Report.cls | 47 + .sfdx/tools/sobjects/standardObjects/Task.cls | 79 + .sfdx/tools/sobjects/standardObjects/User.cls | 2318 ++ .../soqlMetadata/standardObjects/Account.json | 2952 ++ .../standardObjects/AccountHistory.json | 875 + .../soqlMetadata/standardObjects/Asset.json | 1699 + .../standardObjects/Attachment.json | 362 + .../soqlMetadata/standardObjects/Case.json | 1371 + .../soqlMetadata/standardObjects/Contact.json | 2309 ++ .../standardObjects/Contract.json | 1304 + .../soqlMetadata/standardObjects/Domain.json | 293 + .../soqlMetadata/standardObjects/Lead.json | 1977 + .../soqlMetadata/standardObjects/Note.json | 303 + .../standardObjects/Opportunity.json | 1470 + .../soqlMetadata/standardObjects/Order.json | 1646 + .../standardObjects/Pricebook2.json | 482 + .../standardObjects/PricebookEntry.json | 433 + .../standardObjects/Product2.json | 1039 + .../standardObjects/RecordType.json | 2576 ++ .../soqlMetadata/standardObjects/Report.json | 486 + .../soqlMetadata/standardObjects/Task.json | 4296 +++ .../soqlMetadata/standardObjects/User.json | 30415 ++++++++++++++++ .sfdx/tools/soqlMetadata/typeNames.json | 78 + .sfdx/typings/lwc/sobjects/Account.d.ts | 264 + .../typings/lwc/sobjects/AccountHistory.d.ts | 44 + .sfdx/typings/lwc/sobjects/Asset.d.ts | 240 + .sfdx/typings/lwc/sobjects/Attachment.d.ts | 76 + .sfdx/typings/lwc/sobjects/Case.d.ts | 172 + .sfdx/typings/lwc/sobjects/Contact.d.ts | 264 + .sfdx/typings/lwc/sobjects/Contract.d.ts | 188 + .sfdx/typings/lwc/sobjects/Domain.d.ts | 52 + .sfdx/typings/lwc/sobjects/Lead.d.ts | 252 + .sfdx/typings/lwc/sobjects/Note.d.ts | 64 + .sfdx/typings/lwc/sobjects/Opportunity.d.ts | 200 + .sfdx/typings/lwc/sobjects/Order.d.ts | 260 + .sfdx/typings/lwc/sobjects/Pricebook2.d.ts | 64 + .../typings/lwc/sobjects/PricebookEntry.d.ts | 76 + .sfdx/typings/lwc/sobjects/Product2.d.ts | 96 + .sfdx/typings/lwc/sobjects/RecordType.d.ts | 64 + .sfdx/typings/lwc/sobjects/Report.d.ts | 80 + .sfdx/typings/lwc/sobjects/Task.d.ts | 184 + .sfdx/typings/lwc/sobjects/User.d.ts | 752 + backend/.env.example | 7 + backend/drizzle.config.js | 20 + .../drizzle/0000_talented_obadiah_stane.sql | 15 + backend/drizzle/0001_organic_groot.sql | 13 + backend/drizzle/0002_woozy_tigra.sql | 35 + backend/drizzle/meta/0000_snapshot.json | 127 + backend/drizzle/meta/0001_snapshot.json | 226 + backend/drizzle/meta/0002_snapshot.json | 449 + backend/drizzle/meta/_journal.json | 27 + backend/package.json | 8 +- backend/src/db/client.ts | 13 + backend/src/db/environment.json | 179 +- backend/src/db/keywordsStore.js | 83 - backend/src/db/keywordsStore.ts | 113 + backend/src/db/schema/accounts.ts | 84 + backend/src/db/schema/index.ts | 10 + backend/src/db/schema/savedJobs.ts | 39 + backend/src/db/schema/userPreferences.ts | 35 + backend/src/db/schema/users.ts | 39 + backend/src/db/types/types.ts | 21 + backend/src/modules/auth/auth.service.ts | 61 + .../modules/auth/providers/auth.provider.ts | 25 + backend/src/modules/auth/providers/github.ts | 57 + backend/src/modules/auth/providers/google.ts | 80 + .../src/modules/auth/providers/linkedin.ts | 78 + backend/src/modules/types/auth.types.ts | 26 + backend/src/modules/types/user.types.ts | 19 + backend/src/modules/users/createAccount.ts | 33 + backend/src/modules/users/createUser.ts | 44 + backend/src/modules/users/findOrCreateUser.ts | 56 + backend/src/modules/users/findUsers.ts | 30 + backend/src/modules/users/user.service.ts | 36 + backend/src/utils/generateUsername.ts | 45 + backend/tsconfig.json | 59 + package-lock.json | 4640 ++- package.json | 14 +- 96 files changed, 68781 insertions(+), 1731 deletions(-) create mode 100644 .hintrc create mode 100644 .sfdx/tools/sobjects/standardObjects/Account.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/AccountHistory.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/Asset.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/Attachment.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/Case.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/Contact.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/Contract.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/Domain.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/Lead.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/Note.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/Opportunity.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/Order.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/Pricebook2.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/PricebookEntry.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/Product2.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/RecordType.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/Report.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/Task.cls create mode 100644 .sfdx/tools/sobjects/standardObjects/User.cls create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Account.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/AccountHistory.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Asset.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Attachment.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Case.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Contact.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Contract.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Domain.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Lead.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Note.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Opportunity.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Order.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Pricebook2.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/PricebookEntry.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Product2.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/RecordType.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Report.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/Task.json create mode 100644 .sfdx/tools/soqlMetadata/standardObjects/User.json create mode 100644 .sfdx/tools/soqlMetadata/typeNames.json create mode 100644 .sfdx/typings/lwc/sobjects/Account.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/AccountHistory.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/Asset.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/Attachment.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/Case.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/Contact.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/Contract.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/Domain.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/Lead.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/Note.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/Opportunity.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/Order.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/Pricebook2.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/PricebookEntry.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/Product2.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/RecordType.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/Report.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/Task.d.ts create mode 100644 .sfdx/typings/lwc/sobjects/User.d.ts create mode 100644 backend/drizzle.config.js create mode 100644 backend/drizzle/0000_talented_obadiah_stane.sql create mode 100644 backend/drizzle/0001_organic_groot.sql create mode 100644 backend/drizzle/0002_woozy_tigra.sql create mode 100644 backend/drizzle/meta/0000_snapshot.json create mode 100644 backend/drizzle/meta/0001_snapshot.json create mode 100644 backend/drizzle/meta/0002_snapshot.json create mode 100644 backend/drizzle/meta/_journal.json create mode 100644 backend/src/db/client.ts delete mode 100644 backend/src/db/keywordsStore.js create mode 100644 backend/src/db/keywordsStore.ts create mode 100644 backend/src/db/schema/accounts.ts create mode 100644 backend/src/db/schema/index.ts create mode 100644 backend/src/db/schema/savedJobs.ts create mode 100644 backend/src/db/schema/userPreferences.ts create mode 100644 backend/src/db/schema/users.ts create mode 100644 backend/src/db/types/types.ts create mode 100644 backend/src/modules/auth/auth.service.ts create mode 100644 backend/src/modules/auth/providers/auth.provider.ts create mode 100644 backend/src/modules/auth/providers/github.ts create mode 100644 backend/src/modules/auth/providers/google.ts create mode 100644 backend/src/modules/auth/providers/linkedin.ts create mode 100644 backend/src/modules/types/auth.types.ts create mode 100644 backend/src/modules/types/user.types.ts create mode 100644 backend/src/modules/users/createAccount.ts create mode 100644 backend/src/modules/users/createUser.ts create mode 100644 backend/src/modules/users/findOrCreateUser.ts create mode 100644 backend/src/modules/users/findUsers.ts create mode 100644 backend/src/modules/users/user.service.ts create mode 100644 backend/src/utils/generateUsername.ts create mode 100644 backend/tsconfig.json diff --git a/.cspell/custom-dictionary-workspace.txt b/.cspell/custom-dictionary-workspace.txt index 16188a1..4bbcad6 100644 --- a/.cspell/custom-dictionary-workspace.txt +++ b/.cspell/custom-dictionary-workspace.txt @@ -1,26 +1,34 @@ Abaixo abre Abrir +absoluto aceita +acentos adzuna Adzuna ainda +aleatório além algumas alternativa ambiente andamento +Anotações aplica asar ativas atuais automático +baseado benetesla blockdaemon brex Buscando +candidatura canva captura +caracteres +carrega chainalysis chainlink chamada @@ -33,19 +41,24 @@ conectado conexao conexão configurado +conflito conhecidas contém +Controle corretamente correto criação +criou deduplica deduplicação deduplicar defval deleta +depois detecção diferenciar diferentes +direto disponível doordash duplicadas @@ -55,12 +68,15 @@ encontra encontrada encontradas encontrados +encontrar +espaços específica esperada Estranha estranho executa existem +existente expirou exporta exportacao @@ -80,15 +96,18 @@ formato garantindo hotjar huggingface +Identificador ignora incompleto indisponivel +indisponível inexistente informada informado Iniciando início instacart +inteligente interrompe Inválida isso @@ -97,6 +116,7 @@ KHTML klarna lança lançam +legado linhas Localização lote @@ -104,6 +124,8 @@ maior maiúsculas mantém marca +melhorar +MELHORIA memoria memória mesma @@ -117,11 +139,13 @@ múltiplas múltiplos Nenhum normaliza +Notificações nsis nunca opcionais operações organização +outra paginação palavra palavras @@ -134,7 +158,9 @@ permitindo planetscale populado positivos +possível preenchidos +Preferências presencial primeira primeiro @@ -142,6 +168,7 @@ processa processando processar Publicacao +público Quebrada reais reaproveita @@ -149,9 +176,11 @@ recente reconecta recupera recuperado +recuperar refatorado rejeição rejeita +removendo resiliência Resultado resultados @@ -163,33 +192,43 @@ salario salário scaleai segunda +seguro +silencioso simplificado sobrescrever solicitado +sufixo supabase +Suporte talvez +tenta tentativa teste textuais themuse +tipado titulo tiver trata tratamento +travar typeform unicas únicas +único unstub usam útil vaga validar validos +vamos vazia vazio vazios verdade vierem +vindo visualizar wealthfront weightsbiases diff --git a/.hintrc b/.hintrc new file mode 100644 index 0000000..1f14328 --- /dev/null +++ b/.hintrc @@ -0,0 +1,8 @@ +{ + "extends": [ + "development" + ], + "hints": { + "typescript-config/consistent-casing": "off" + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Account.cls b/.sfdx/tools/sobjects/standardObjects/Account.cls new file mode 100644 index 0000000..8b0e3e4 --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Account.cls @@ -0,0 +1,196 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Account { + global Id Id; + global Boolean IsDeleted; + global Account MasterRecord; + global Id MasterRecordId; + global String Name; + global String Type; + global Account Parent; + global Id ParentId; + global String BillingStreet; + global String BillingCity; + global String BillingState; + global String BillingPostalCode; + global String BillingCountry; + global Double BillingLatitude; + global Double BillingLongitude; + global String BillingGeocodeAccuracy; + global Address BillingAddress; + global String ShippingStreet; + global String ShippingCity; + global String ShippingState; + global String ShippingPostalCode; + global String ShippingCountry; + global Double ShippingLatitude; + global Double ShippingLongitude; + global String ShippingGeocodeAccuracy; + global Address ShippingAddress; + global String Phone; + global String Fax; + global String AccountNumber; + global String Website; + global String PhotoUrl; + global String Sic; + global String Industry; + global Decimal AnnualRevenue; + global Integer NumberOfEmployees; + global String Ownership; + global String TickerSymbol; + global String Description; + global String Rating; + global String Site; + global User Owner; + global Id OwnerId; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global Date LastActivityDate; + global Datetime LastViewedDate; + global Datetime LastReferencedDate; + global String Jigsaw; + global String JigsawCompanyId; + global String CleanStatus; + global String AccountSource; + global String DunsNumber; + global String Tradestyle; + global String NaicsCode; + global String NaicsDesc; + global String YearStarted; + global String SicDesc; + global DandBCompany DandbCompany; + global Id DandbCompanyId; + global OperatingHours OperatingHours; + global Id OperatingHoursId; + global List ChildAccounts; + global List AccountCleanInfos; + global List AccountContactRoles; + global List Feeds; + global List Histories; + global List AccountPartnersFrom; + global List AccountPartnersTo; + global List Shares; + global List ActivityHistories; + global List AlternativePaymentMethods; + global List Assets; + global List ProvidedAssets; + global List ServicedAssets; + global List AssociatedLocations; + global List AttachedContentDocuments; + global List Attachments; + global List AuthorizationFormConsents; + global List RelatedAuthorizationFormConsents; + global List CardPaymentMethods; + global List Cases; + global List RecordAssociatedGroups; + global List CombinedAttachments; + global List CommSubscriptionConsents; + global List Contacts; + global List ContactPointAddresses; + global List ContactPointEmails; + global List ContactPointPhones; + global List ContactRequests; + global List ContentDocumentLinks; + global List Contracts; + global List CreditMemos; + global List DigitalWallets; + global List DuplicateRecordItems; + global List Emails; + global List Entitlements; + global List FeedSubscriptionsForEntity; + global List Events; + global List Expenses; + global List FinanceBalanceSnapshots; + global List FinanceTransactions; + global List Invoices; + global List MaintenancePlans; + global List MessagingEndUsers; + global List MessagingSessions; + global List Notes; + global List NotesAndAttachments; + global List OpenActivities; + global List Opportunities; + global List OpportunityPartnersTo; + global List Orders; + global List PartnersFrom; + global List PartnersTo; + global List Payments; + global List PaymentAuthAdjustments; + global List PaymentAuthorizations; + global List PaymentLinesInvoice; + global List ProcessInstances; + global List ProcessSteps; + global List ProductRequests; + global List ProductRequestLineItems; + global List RecordActions; + global List RecordActionHistories; + global List Refunds; + global List RefundLinePayments; + global List ResourcePreferences; + global List ReturnOrders; + global List ScorecardAssociations; + global List ServiceAppointmentAccount; + global List ServiceAppointments; + global List ServiceContracts; + global List ServiceResources; + global List Swarms; + global List SwarmMembers; + global List Tasks; + global List TopicAssignments; + global List Users; + global List WorkOrders; + global List WorkPlanSelectionRules; + global List SobjectLookupValue; + global List Target; + global List Parent; + global List Account; + global List AssetProvidedBy; + global List AssetServicedBy; + global List ConsentGiver; + global List RelatedRecord; + global List LeadOrContact; + global List Account; + global List ConsentGiver; + global List Account; + global List Parent; + global List RelatedRecord; + global List LinkedEntity; + global List FirstPublishLocation; + global List Account; + global List RelatedTo; + global List Account; + global List What; + global List Relation; + global List Account; + global List Parent; + global List Account; + global List ContextRecord; + global List RelatedRecord; + global List ConvertedAccount; + global List Account; + global List RelatedTo; + global List Account; + global List RelatedRecord; + global List Account; + global List ParentRecord; + global List Account; + global List What; + global List Account; + global List PortalAccount; + global List Account; + + global Account () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/AccountHistory.cls b/.sfdx/tools/sobjects/standardObjects/AccountHistory.cls new file mode 100644 index 0000000..c5539ed --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/AccountHistory.cls @@ -0,0 +1,25 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class AccountHistory { + global Id Id; + global Boolean IsDeleted; + global Account Account; + global Id AccountId; + global User CreatedBy; + global Id CreatedById; + global Datetime CreatedDate; + global String Field; + global String DataType; + global Object OldValue; + global Object NewValue; + + global AccountHistory () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Asset.cls b/.sfdx/tools/sobjects/standardObjects/Asset.cls new file mode 100644 index 0000000..4942adc --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Asset.cls @@ -0,0 +1,138 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Asset { + global Id Id; + global Contact Contact; + global Id ContactId; + global Account Account; + global Id AccountId; + global Asset Parent; + global Id ParentId; + global Asset RootAsset; + global Id RootAssetId; + global Product2 Product2; + global Id Product2Id; + global String ProductCode; + global Boolean IsCompetitorProduct; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global Boolean IsDeleted; + global String Name; + global String SerialNumber; + global Date InstallDate; + global Date PurchaseDate; + global Date UsageEndDate; + global Datetime LifecycleStartDate; + global Datetime LifecycleEndDate; + global String Status; + global Decimal Price; + global Double Quantity; + global String Description; + global User Owner; + global Id OwnerId; + global Location Location; + global Id LocationId; + global Account AssetProvidedBy; + global Id AssetProvidedById; + global Account AssetServicedBy; + global Id AssetServicedById; + global Boolean IsInternal; + global Integer AssetLevel; + global String StockKeepingUnit; + global Boolean HasLifecycleManagement; + global Decimal CurrentMrr; + global Datetime CurrentLifecycleEndDate; + global Double CurrentQuantity; + global Decimal CurrentAmount; + global Decimal TotalLifecycleAmount; + global String Street; + global String City; + global String State; + global String PostalCode; + global String Country; + global Double Latitude; + global Double Longitude; + global String GeocodeAccuracy; + global Address Address; + global Datetime LastViewedDate; + global Datetime LastReferencedDate; + global List ActivityHistories; + global List ChildAssets; + global List AssetActions; + global List AssetAttributes; + global List AssetDowntimePeriods; + global List Feeds; + global List Histories; + global List PrimaryAssets; + global List RelatedAssets; + global List Shares; + global List AssetStatePeriods; + global List WarrantyAssets; + global List AttachedContentDocuments; + global List Attachments; + global List Cases; + global List CombinedAttachments; + global List ContentDocumentLinks; + global List ContractLineItems; + global List Emails; + global List Entitlements; + global List FeedSubscriptionsForEntity; + global List Events; + global List MaintenanceAssets; + global List Notes; + global List NotesAndAttachments; + global List OpenActivities; + global List ProcessInstances; + global List ProcessSteps; + global List ProductServiceCampaignItems; + global List RecordActions; + global List RecordActionHistories; + global List RecordsetFltrCritMonitors; + global List ResourcePreferences; + global List ReturnOrderLineItems; + global List SerializedProducts; + global List ServiceAppointments; + global List Tasks; + global List TopicAssignments; + global List WorkOrders; + global List WorkOrderLineItems; + global List WorkPlanSelectionRules; + global List SobjectLookupValue; + global List Target; + global List RootAsset; + global List Asset; + global List Parent; + global List RootAsset; + global List Asset; + global List LinkedEntity; + global List FirstPublishLocation; + global List Asset; + global List RelatedTo; + global List Asset; + global List What; + global List Relation; + global List Parent; + global List ContextRecord; + global List RelatedRecord; + global List Asset; + global List RelatedTo; + global List Asset; + global List ParentRecord; + global List What; + global List Asset; + + global Asset () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Attachment.cls b/.sfdx/tools/sobjects/standardObjects/Attachment.cls new file mode 100644 index 0000000..5d1468a --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Attachment.cls @@ -0,0 +1,35 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Attachment { + global Id Id; + global Boolean IsDeleted; + global SObject Parent; + global Id ParentId; + global String Name; + global Boolean IsPrivate; + global String ContentType; + global Integer BodyLength; + global Blob Body; + global SObject Owner; + global Id OwnerId; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global String Description; + global List ContextRecord; + global List RelatedRecord; + + global Attachment () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Case.cls b/.sfdx/tools/sobjects/standardObjects/Case.cls new file mode 100644 index 0000000..c24c8b9 --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Case.cls @@ -0,0 +1,111 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Case { + global Id Id; + global Boolean IsDeleted; + global Case MasterRecord; + global Id MasterRecordId; + global String CaseNumber; + global Contact Contact; + global Id ContactId; + global Account Account; + global Id AccountId; + global Asset Asset; + global Id AssetId; + global Case Parent; + global Id ParentId; + global String SuppliedName; + global String SuppliedEmail; + global String SuppliedPhone; + global String SuppliedCompany; + global String Type; + global String Status; + global String Reason; + global String Origin; + global String Subject; + global String Priority; + global String Description; + global Boolean IsClosed; + global Datetime ClosedDate; + global Boolean IsEscalated; + global SObject Owner; + global Id OwnerId; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global String ContactPhone; + global String ContactMobile; + global String ContactEmail; + global String ContactFax; + global String Comments; + global Datetime LastViewedDate; + global Datetime LastReferencedDate; + global List ActivityHistories; + global List AttachedContentDocuments; + global List Attachments; + global List Cases; + global List CaseComments; + global List CaseContactRoles; + global List Feeds; + global List Histories; + global List CaseMilestones; + global List Shares; + global List CaseSolutions; + global List TeamMembers; + global List TeamTemplateRecords; + global List RecordAssociatedGroups; + global List CombinedAttachments; + global List ContactRequests; + global List ContentDocumentLinks; + global List EmailMessages; + global List Emails; + global List FeedSubscriptionsForEntity; + global List Events; + global List MessagingSessions; + global List OpenActivities; + global List ProcessExceptions; + global List ProcessInstances; + global List ProcessSteps; + global List ProductRequests; + global List ProductRequestLineItems; + global List RecordActions; + global List RecordActionHistories; + global List ReturnOrders; + global List ServiceAppointments; + global List Swarms; + global List SwarmMembers; + global List Tasks; + global List TopicAssignments; + global List WorkOrders; + global List SobjectLookupValue; + global List Target; + global List Parent; + global List RelatedRecord; + global List LinkedEntity; + global List FirstPublishLocation; + global List Parent; + global List RelatedTo; + global List What; + global List Relation; + global List Parent; + global List ContextRecord; + global List RelatedRecord; + global List Case; + global List ParentRecord; + global List What; + global List Case; + + global Case () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Contact.cls b/.sfdx/tools/sobjects/standardObjects/Contact.cls new file mode 100644 index 0000000..5d8964f --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Contact.cls @@ -0,0 +1,167 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Contact { + global Id Id; + global Boolean IsDeleted; + global Contact MasterRecord; + global Id MasterRecordId; + global Account Account; + global Id AccountId; + global String LastName; + global String FirstName; + global String Salutation; + global String Name; + global String OtherStreet; + global String OtherCity; + global String OtherState; + global String OtherPostalCode; + global String OtherCountry; + global Double OtherLatitude; + global Double OtherLongitude; + global String OtherGeocodeAccuracy; + global Address OtherAddress; + global String MailingStreet; + global String MailingCity; + global String MailingState; + global String MailingPostalCode; + global String MailingCountry; + global Double MailingLatitude; + global Double MailingLongitude; + global String MailingGeocodeAccuracy; + global Address MailingAddress; + global String Phone; + global String Fax; + global String MobilePhone; + global String HomePhone; + global String OtherPhone; + global String AssistantPhone; + global Contact ReportsTo; + global Id ReportsToId; + global String Email; + global String Title; + global String Department; + global String AssistantName; + global String LeadSource; + global Date Birthdate; + global String Description; + global User Owner; + global Id OwnerId; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global Date LastActivityDate; + global Datetime LastCURequestDate; + global Datetime LastCUUpdateDate; + global Datetime LastViewedDate; + global Datetime LastReferencedDate; + global String EmailBouncedReason; + global Datetime EmailBouncedDate; + global Boolean IsEmailBounced; + global String PhotoUrl; + global String Jigsaw; + global String JigsawContactId; + global String CleanStatus; + global Individual Individual; + global Id IndividualId; + global List AcceptedEventRelations; + global List AccountContactRoles; + global List ActivityHistories; + global List Assets; + global List AttachedContentDocuments; + global List Attachments; + global List AuthorizationFormConsents; + global List CampaignMembers; + global List Cases; + global List CaseContactRoles; + global List RecordAssociatedGroups; + global List CombinedAttachments; + global List CommSubscriptionConsents; + global List ContactCleanInfos; + global List Feeds; + global List Histories; + global List ContactRequests; + global List Shares; + global List ContentDocumentLinks; + global List ContractsSigned; + global List ContractContactRoles; + global List ConversationParticipants; + global List CreditMemos; + global List DeclinedEventRelations; + global List DuplicateRecordItems; + global List EmailMessageRelations; + global List EmailStatuses; + global List EntitlementContacts; + global List FeedSubscriptionsForEntity; + global List Events; + global List EventRelations; + global List Invoices; + global List ListEmailIndividualRecipients; + global List MaintenancePlans; + global List MessagingEndUsers; + global List MessagingSessions; + global List Notes; + global List NotesAndAttachments; + global List OpenActivities; + global List Opportunities; + global List OpportunityContactRoles; + global List OutgoingEmailRelations; + global List ProcessInstances; + global List ProcessSteps; + global List RecordActions; + global List RecordActionHistories; + global List ReturnOrders; + global List ServiceAppointments; + global List ServiceContracts; + global List Tasks; + global List TopicAssignments; + global List UndecidedEventRelations; + global List Users; + global List PersonRecord; + global List WorkOrders; + global List SobjectLookupValue; + global List Target; + global List Contact; + global List ConsentGiver; + global List LeadOrContact; + global List Contact; + global List Member; + global List ConsentGiver; + global List ReportsTo; + global List RelatedRecord; + global List LinkedEntity; + global List FirstPublishLocation; + global List CustomerSigned; + global List Who; + global List Relation; + global List Parent; + global List ContextRecord; + global List RelatedRecord; + global List ConvertedContact; + global List Contact; + global List SFDCId; + global List Contact; + global List BillToContact; + global List CustomerAuthorizedBy; + global List ShipToContact; + global List BillToContact; + global List CustomerAuthorizedBy; + global List ShipToContact; + global List Who; + global List Contact; + global List Who; + global List Contact; + + global Contact () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Contract.cls b/.sfdx/tools/sobjects/standardObjects/Contract.cls new file mode 100644 index 0000000..b1cab24 --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Contract.cls @@ -0,0 +1,96 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Contract { + global Id Id; + global Account Account; + global Id AccountId; + global Pricebook2 Pricebook2; + global Id Pricebook2Id; + global String OwnerExpirationNotice; + global Date StartDate; + global Date EndDate; + global String BillingStreet; + global String BillingCity; + global String BillingState; + global String BillingPostalCode; + global String BillingCountry; + global Double BillingLatitude; + global Double BillingLongitude; + global String BillingGeocodeAccuracy; + global Address BillingAddress; + global Integer ContractTerm; + global User Owner; + global Id OwnerId; + global String Status; + global User CompanySigned; + global Id CompanySignedId; + global Date CompanySignedDate; + global Contact CustomerSigned; + global Id CustomerSignedId; + global String CustomerSignedTitle; + global Date CustomerSignedDate; + global String SpecialTerms; + global User ActivatedBy; + global Id ActivatedById; + global Datetime ActivatedDate; + global String StatusCode; + global String Description; + global Boolean IsDeleted; + global String ContractNumber; + global Datetime LastApprovedDate; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global Date LastActivityDate; + global Datetime LastViewedDate; + global Datetime LastReferencedDate; + global List ActivityHistories; + global List AttachedContentDocuments; + global List Attachments; + global List RecordAssociatedGroups; + global List CombinedAttachments; + global List ContentDocumentLinks; + global List ContractContactRoles; + global List Feeds; + global List Histories; + global List Emails; + global List FeedSubscriptionsForEntity; + global List Events; + global List Notes; + global List NotesAndAttachments; + global List OpenActivities; + global List Orders; + global List ProcessInstances; + global List ProcessSteps; + global List RecordActions; + global List RecordActionHistories; + global List Tasks; + global List TopicAssignments; + global List SobjectLookupValue; + global List Target; + global List LinkedEntity; + global List FirstPublishLocation; + global List RelatedTo; + global List What; + global List Relation; + global List Parent; + global List ContextRecord; + global List RelatedRecord; + global List Contract; + global List RelatedTo; + global List What; + + global Contract () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Domain.cls b/.sfdx/tools/sobjects/standardObjects/Domain.cls new file mode 100644 index 0000000..db068f7 --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Domain.cls @@ -0,0 +1,29 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Domain { + global Id Id; + global String DomainType; + global String Domain; + global Boolean OptionsHstsPreload; + global String CnameTarget; + global String HttpsOption; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global List DomainSites; + global List Domain; + + global Domain () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Lead.cls b/.sfdx/tools/sobjects/standardObjects/Lead.cls new file mode 100644 index 0000000..212e293 --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Lead.cls @@ -0,0 +1,128 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Lead { + global Id Id; + global Boolean IsDeleted; + global Lead MasterRecord; + global Id MasterRecordId; + global String LastName; + global String FirstName; + global String Salutation; + global String Name; + global String Title; + global String Company; + global String Street; + global String City; + global String State; + global String PostalCode; + global String Country; + global Double Latitude; + global Double Longitude; + global String GeocodeAccuracy; + global Address Address; + global String Phone; + global String MobilePhone; + global String Fax; + global String Email; + global String Website; + global String PhotoUrl; + global String Description; + global String LeadSource; + global String Status; + global String Industry; + global String Rating; + global Decimal AnnualRevenue; + global Integer NumberOfEmployees; + global SObject Owner; + global Id OwnerId; + global Boolean IsConverted; + global Date ConvertedDate; + global Account ConvertedAccount; + global Id ConvertedAccountId; + global Contact ConvertedContact; + global Id ConvertedContactId; + global Opportunity ConvertedOpportunity; + global Id ConvertedOpportunityId; + global Boolean IsUnreadByOwner; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global Date LastActivityDate; + global Datetime LastViewedDate; + global Datetime LastReferencedDate; + global String Jigsaw; + global String JigsawContactId; + global String CleanStatus; + global String CompanyDunsNumber; + global DandBCompany DandbCompany; + global Id DandbCompanyId; + global String EmailBouncedReason; + global Datetime EmailBouncedDate; + global Individual Individual; + global Id IndividualId; + global List AcceptedEventRelations; + global List ActivityHistories; + global List AttachedContentDocuments; + global List Attachments; + global List CampaignMembers; + global List RecordAssociatedGroups; + global List CombinedAttachments; + global List ContactRequests; + global List ContentDocumentLinks; + global List DeclinedEventRelations; + global List DuplicateRecordItems; + global List EmailMessageRelations; + global List EmailStatuses; + global List FeedSubscriptionsForEntity; + global List Events; + global List EventRelations; + global List LeadCleanInfos; + global List Feeds; + global List Histories; + global List Shares; + global List ListEmailIndividualRecipients; + global List MessagingEndUsers; + global List MessagingSessions; + global List Notes; + global List NotesAndAttachments; + global List OpenActivities; + global List OutgoingEmailRelations; + global List ProcessInstances; + global List ProcessSteps; + global List RecordActions; + global List RecordActionHistories; + global List ServiceAppointments; + global List Tasks; + global List TopicAssignments; + global List UndecidedEventRelations; + global List PersonRecord; + global List SobjectLookupValue; + global List Target; + global List LeadOrContact; + global List Lead; + global List RelatedRecord; + global List LinkedEntity; + global List FirstPublishLocation; + global List Who; + global List Relation; + global List Parent; + global List ContextRecord; + global List RelatedRecord; + global List Who; + global List ParentRecord; + global List Who; + + global Lead () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Note.cls b/.sfdx/tools/sobjects/standardObjects/Note.cls new file mode 100644 index 0000000..6a9ebda --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Note.cls @@ -0,0 +1,32 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Note { + global Id Id; + global Boolean IsDeleted; + global SObject Parent; + global Id ParentId; + global String Title; + global Boolean IsPrivate; + global String Body; + global User Owner; + global Id OwnerId; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global List ContextRecord; + global List RelatedRecord; + + global Note () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Opportunity.cls b/.sfdx/tools/sobjects/standardObjects/Opportunity.cls new file mode 100644 index 0000000..648e34e --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Opportunity.cls @@ -0,0 +1,113 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Opportunity { + global Id Id; + global Boolean IsDeleted; + global Account Account; + global Id AccountId; + global Boolean IsPrivate; + global String Name; + global String Description; + global String StageName; + global Decimal Amount; + global Double Probability; + global Decimal ExpectedRevenue; + global Double TotalOpportunityQuantity; + global Date CloseDate; + global String Type; + global String NextStep; + global String LeadSource; + global Boolean IsClosed; + global Boolean IsWon; + global String ForecastCategory; + global String ForecastCategoryName; + global Campaign Campaign; + global Id CampaignId; + global Boolean HasOpportunityLineItem; + global Pricebook2 Pricebook2; + global Id Pricebook2Id; + global User Owner; + global Id OwnerId; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global Date LastActivityDate; + global Integer PushCount; + global Datetime LastStageChangeDate; + global Integer FiscalQuarter; + global Integer FiscalYear; + global String Fiscal; + global Contact Contact; + global Id ContactId; + global Datetime LastViewedDate; + global Datetime LastReferencedDate; + global Boolean HasOpenActivity; + global Boolean HasOverdueTask; + global OpportunityHistory LastAmountChangedHistory; + global Id LastAmountChangedHistoryId; + global OpportunityHistory LastCloseDateChangedHistory; + global Id LastCloseDateChangedHistoryId; + global List AccountPartners; + global List ActivityHistories; + global List AttachedContentDocuments; + global List Attachments; + global List RecordAssociatedGroups; + global List CombinedAttachments; + global List ContactRequests; + global List ContentDocumentLinks; + global List Emails; + global List FeedSubscriptionsForEntity; + global List Events; + global List MessagingSessions; + global List Notes; + global List NotesAndAttachments; + global List OpenActivities; + global List OpportunityCompetitors; + global List OpportunityContactRoles; + global List Feeds; + global List Histories; + global List OpportunityHistories; + global List OpportunityLineItems; + global List OpportunityPartnersFrom; + global List Shares; + global List Partners; + global List ProcessInstances; + global List ProcessSteps; + global List RecordActions; + global List RecordActionHistories; + global List ServiceAppointments; + global List Swarms; + global List SwarmMembers; + global List Tasks; + global List TopicAssignments; + global List SobjectLookupValue; + global List Target; + global List RelatedRecord; + global List LinkedEntity; + global List FirstPublishLocation; + global List RelatedTo; + global List What; + global List Relation; + global List Parent; + global List ContextRecord; + global List RelatedRecord; + global List ConvertedOpportunity; + global List Opportunity; + global List RelatedTo; + global List ParentRecord; + global List What; + + global Opportunity () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Order.cls b/.sfdx/tools/sobjects/standardObjects/Order.cls new file mode 100644 index 0000000..2597afa --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Order.cls @@ -0,0 +1,127 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Order { + global Id Id; + global SObject Owner; + global Id OwnerId; + global Contract Contract; + global Id ContractId; + global Account Account; + global Id AccountId; + global Pricebook2 Pricebook2; + global Id Pricebook2Id; + global Order OriginalOrder; + global Id OriginalOrderId; + global Date EffectiveDate; + global Date EndDate; + global Boolean IsReductionOrder; + global String Status; + global String Description; + global Contact CustomerAuthorizedBy; + global Id CustomerAuthorizedById; + global Date CustomerAuthorizedDate; + global User CompanyAuthorizedBy; + global Id CompanyAuthorizedById; + global Date CompanyAuthorizedDate; + global String Type; + global String BillingStreet; + global String BillingCity; + global String BillingState; + global String BillingPostalCode; + global String BillingCountry; + global Double BillingLatitude; + global Double BillingLongitude; + global String BillingGeocodeAccuracy; + global Address BillingAddress; + global String ShippingStreet; + global String ShippingCity; + global String ShippingState; + global String ShippingPostalCode; + global String ShippingCountry; + global Double ShippingLatitude; + global Double ShippingLongitude; + global String ShippingGeocodeAccuracy; + global Address ShippingAddress; + global String Name; + global Date PoDate; + global String PoNumber; + global String OrderReferenceNumber; + global Contact BillToContact; + global Id BillToContactId; + global Contact ShipToContact; + global Id ShipToContactId; + global Datetime ActivatedDate; + global User ActivatedBy; + global Id ActivatedById; + global String StatusCode; + global String OrderNumber; + global Decimal TotalAmount; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Boolean IsDeleted; + global Datetime SystemModstamp; + global Datetime LastViewedDate; + global Datetime LastReferencedDate; + global List ActivityHistories; + global List AppUsageAssignments; + global List AttachedContentDocuments; + global List Attachments; + global List CombinedAttachments; + global List ContentDocumentLinks; + global List CreditMemos; + global List DigitalSignatures; + global List Emails; + global List FeedSubscriptionsForEntity; + global List Events; + global List Invoices; + global List Notes; + global List NotesAndAttachments; + global List OpenActivities; + global List Orders; + global List Feeds; + global List Histories; + global List OrderItems; + global List Shares; + global List PaymentGroups; + global List ProcessExceptions; + global List ProcessInstances; + global List ProcessSteps; + global List RecordActions; + global List RecordActionHistories; + global List ReturnOrders; + global List Tasks; + global List TopicAssignments; + global List WorkOrderLineItems; + global List SobjectLookupValue; + global List Target; + global List LinkedEntity; + global List FirstPublishLocation; + global List Parent; + global List RelatedTo; + global List What; + global List Relation; + global List Parent; + global List ContextRecord; + global List RelatedRecord; + global List OriginalOrder; + global List Order; + global List RelatedTo; + global List AttachedTo; + global List Order; + global List What; + global List Order; + + global Order () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Pricebook2.cls b/.sfdx/tools/sobjects/standardObjects/Pricebook2.cls new file mode 100644 index 0000000..cf21cec --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Pricebook2.cls @@ -0,0 +1,47 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Pricebook2 { + global Id Id; + global Boolean IsDeleted; + global String Name; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global Datetime LastViewedDate; + global Datetime LastReferencedDate; + global Boolean IsActive; + global Boolean IsArchived; + global String Description; + global Boolean IsStandard; + global List AssetWarrantyPricebooks; + global List Contracts; + global List Opportunities; + global List Orders; + global List Histories; + global List PricebookEntries; + global List RecordActions; + global List RecordActionHistories; + global List ServiceContracts; + global List Pricebook2; + global List WorkOrders; + global List SobjectLookupValue; + global List Target; + global List Pricebook2; + global List ContextRecord; + global List RelatedRecord; + global List Pricebook2; + + global Pricebook2 () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/PricebookEntry.cls b/.sfdx/tools/sobjects/standardObjects/PricebookEntry.cls new file mode 100644 index 0000000..d4217bf --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/PricebookEntry.cls @@ -0,0 +1,47 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class PricebookEntry { + global Id Id; + global String Name; + global Pricebook2 Pricebook2; + global Id Pricebook2Id; + global Product2 Product2; + global Id Product2Id; + global Decimal UnitPrice; + global Boolean IsActive; + global Boolean UseStandardPrice; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global String ProductCode; + global Boolean IsDeleted; + global Boolean IsArchived; + global List ContractLineItems; + global List OpportunityLineItems; + global List OrderItems; + global List Histories; + global List ProductsConsumed; + global List RecordActions; + global List RecordActionHistories; + global List WorkOrderLineItems; + global List SobjectLookupValue; + global List Target; + global List PricebookEntry; + global List ContextRecord; + global List RelatedRecord; + global List PricebookEntry; + + global PricebookEntry () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Product2.cls b/.sfdx/tools/sobjects/standardObjects/Product2.cls new file mode 100644 index 0000000..8cd4743 --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Product2.cls @@ -0,0 +1,91 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Product2 { + global Id Id; + global String Name; + global String ProductCode; + global String Description; + global Boolean IsActive; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global String Family; + global Boolean IsSerialized; + global ExternalDataSource ExternalDataSource; + global Id ExternalDataSourceId; + global String ExternalId; + global String DisplayUrl; + global String QuantityUnitOfMeasure; + global Boolean IsDeleted; + global Boolean IsArchived; + global Datetime LastViewedDate; + global Datetime LastReferencedDate; + global String StockKeepingUnit; + global List ActivityHistories; + global List Assets; + global List AttachedContentDocuments; + global List Attachments; + global List CombinedAttachments; + global List ContentDocumentLinks; + global List ContractLineItems; + global List CreditMemoLines; + global List Emails; + global List FeedSubscriptionsForEntity; + global List Events; + global List InvoiceLines; + global List Notes; + global List NotesAndAttachments; + global List OpenActivities; + global List PricebookEntries; + global List ProcessInstances; + global List ProcessSteps; + global List Feeds; + global List Histories; + global List ProductsConsumed; + global List ProductConsumptionSchedules; + global List ProductItems; + global List ProductRequestLineItems; + global List ProductsRequired; + global List ProductServiceCampaignProducts; + global List ProductServiceCampaignItems; + global List ProductTransfers; + global List ProductWarrantyTermProducts; + global List RecordActions; + global List RecordActionHistories; + global List ReturnOrderLineItems; + global List SerializedProducts; + global List ShipmentItems; + global List Tasks; + global List WorkOrderLineItems; + global List WorkPlanSelectionRules; + global List SobjectLookupValue; + global List Target; + global List Product2; + global List LinkedEntity; + global List FirstPublishLocation; + global List RelatedTo; + global List What; + global List Relation; + global List Parent; + global List ContextRecord; + global List RelatedRecord; + global List Product2; + global List RelatedTo; + global List Product2; + global List What; + global List Product2; + + global Product2 () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/RecordType.cls b/.sfdx/tools/sobjects/standardObjects/RecordType.cls new file mode 100644 index 0000000..a5003b7 --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/RecordType.cls @@ -0,0 +1,35 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class RecordType { + global Id Id; + global String Name; + global String DeveloperName; + global String NamespacePrefix; + global String Description; + global BusinessProcess BusinessProcess; + global Id BusinessProcessId; + global String SobjectType; + global Boolean IsActive; + global User CreatedBy; + global Id CreatedById; + global Datetime CreatedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime LastModifiedDate; + global Datetime SystemModstamp; + global List CampaignMemberRecordType; + global List DefaultRecordType; + global List RecordType; + global List TargetRecordType; + global List RecordType; + + global RecordType () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Report.cls b/.sfdx/tools/sobjects/standardObjects/Report.cls new file mode 100644 index 0000000..ddead3e --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Report.cls @@ -0,0 +1,47 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Report { + global Id Id; + global SObject Owner; + global Id OwnerId; + global String FolderName; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Boolean IsDeleted; + global String Name; + global String Description; + global String DeveloperName; + global String NamespacePrefix; + global Datetime LastRunDate; + global Datetime SystemModstamp; + global String Format; + global Datetime LastViewedDate; + global Datetime LastReferencedDate; + global List AttachedContentDocuments; + global List CombinedAttachments; + global List ContentDocumentLinks; + global List FeedSubscriptionsForEntity; + global List Feeds; + global List ScorecardMetrics; + global List LinkedEntity; + global List FirstPublishLocation; + global List CustomReport; + global List Parent; + global List ContextRecord; + global List RelatedRecord; + global List Report; + + global Report () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/Task.cls b/.sfdx/tools/sobjects/standardObjects/Task.cls new file mode 100644 index 0000000..99e3097 --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/Task.cls @@ -0,0 +1,79 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class Task { + global Id Id; + global SObject Who; + global Id WhoId; + global SObject What; + global Id WhatId; + global String Subject; + global Date ActivityDate; + global String Status; + global String Priority; + global Boolean IsHighPriority; + global SObject Owner; + global Id OwnerId; + global String Description; + global Boolean IsDeleted; + global Account Account; + global Id AccountId; + global Boolean IsClosed; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global Boolean IsArchived; + global Integer CallDurationInSeconds; + global String CallType; + global String CallDisposition; + global String CallObject; + global Datetime ReminderDateTime; + global Boolean IsReminderSet; + global Task RecurrenceActivity; + global Id RecurrenceActivityId; + global Boolean IsRecurrence; + global Date RecurrenceStartDateOnly; + global Date RecurrenceEndDateOnly; + global String RecurrenceTimeZoneSidKey; + global String RecurrenceType; + global Integer RecurrenceInterval; + global Integer RecurrenceDayOfWeekMask; + global Integer RecurrenceDayOfMonth; + global String RecurrenceInstance; + global String RecurrenceMonthOfYear; + global String RecurrenceRegeneratedType; + global String TaskSubtype; + global Datetime CompletedDateTime; + global List ActivityFieldHistories; + global List AttachedContentDocuments; + global List Attachments; + global List CombinedAttachments; + global List ContentDocumentLinks; + global List FeedSubscriptionsForEntity; + global List RecurringTasks; + global List Feeds; + global List TopicAssignments; + global List SobjectLookupValue; + global List Target; + global List LinkedEntity; + global List FirstPublishLocation; + global List Activity; + global List Task; + global List Parent; + global List ContextRecord; + global List RelatedRecord; + global List RecurrenceActivity; + + global Task () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/sobjects/standardObjects/User.cls b/.sfdx/tools/sobjects/standardObjects/User.cls new file mode 100644 index 0000000..2babf86 --- /dev/null +++ b/.sfdx/tools/sobjects/standardObjects/User.cls @@ -0,0 +1,2318 @@ +// This file is generated as an Apex representation of the +// corresponding sObject and its fields. +// This read-only file is used by the Apex Language Server to +// provide code smartness, and is deleted each time you +// refresh your sObject definitions. +// To edit your sObjects and their fields, edit the corresponding +// .object-meta.xml and .field-meta.xml files. + +global class User { + global Id Id; + global String Username; + global String LastName; + global String FirstName; + global String Name; + global String CompanyName; + global String Division; + global String Department; + global String Title; + global String Street; + global String City; + global String State; + global String PostalCode; + global String Country; + global Double Latitude; + global Double Longitude; + global String GeocodeAccuracy; + global Address Address; + global String Email; + global Boolean EmailPreferencesAutoBcc; + global Boolean EmailPreferencesAutoBccStayInTouch; + global Boolean EmailPreferencesStayInTouchReminder; + global String SenderEmail; + global String SenderName; + global String Signature; + global String StayInTouchSubject; + global String StayInTouchSignature; + global String StayInTouchNote; + global String Phone; + global String Fax; + global String MobilePhone; + global String Alias; + global String CommunityNickname; + global String BadgeText; + global Boolean IsActive; + global String TimeZoneSidKey; + global UserRole UserRole; + global Id UserRoleId; + global String LocaleSidKey; + global Boolean ReceivesInfoEmails; + global Boolean ReceivesAdminInfoEmails; + global String EmailEncodingKey; + global Profile Profile; + global Id ProfileId; + global String UserType; + global String LanguageLocaleKey; + global String EmployeeNumber; + global SObject DelegatedApprover; + global Id DelegatedApproverId; + global User Manager; + global Id ManagerId; + global Datetime LastLoginDate; + global Datetime LastPasswordChangeDate; + global Datetime CreatedDate; + global User CreatedBy; + global Id CreatedById; + global Datetime LastModifiedDate; + global User LastModifiedBy; + global Id LastModifiedById; + global Datetime SystemModstamp; + global Integer NumberOfFailedLogins; + global Datetime OfflineTrialExpirationDate; + global Datetime OfflinePdaTrialExpirationDate; + global Boolean UserPermissionsMarketingUser; + global Boolean UserPermissionsOfflineUser; + global Boolean UserPermissionsCallCenterAutoLogin; + global Boolean UserPermissionsSFContentUser; + global Boolean UserPermissionsKnowledgeUser; + global Boolean UserPermissionsInteractionUser; + global Boolean UserPermissionsSupportUser; + global Boolean UserPermissionsJigsawProspectingUser; + global Boolean UserPermissionsSiteforceContributorUser; + global Boolean UserPermissionsSiteforcePublisherUser; + global Boolean UserPermissionsWorkDotComUserFeature; + global Boolean ForecastEnabled; + global Boolean UserPreferencesActivityRemindersPopup; + global Boolean UserPreferencesEventRemindersCheckboxDefault; + global Boolean UserPreferencesTaskRemindersCheckboxDefault; + global Boolean UserPreferencesReminderSoundOff; + global Boolean UserPreferencesDisableAllFeedsEmail; + global Boolean UserPreferencesDisableFollowersEmail; + global Boolean UserPreferencesDisableProfilePostEmail; + global Boolean UserPreferencesDisableChangeCommentEmail; + global Boolean UserPreferencesDisableLaterCommentEmail; + global Boolean UserPreferencesDisProfPostCommentEmail; + global Boolean UserPreferencesContentNoEmail; + global Boolean UserPreferencesContentEmailAsAndWhen; + global Boolean UserPreferencesApexPagesDeveloperMode; + global Boolean UserPreferencesReceiveNoNotificationsAsApprover; + global Boolean UserPreferencesReceiveNotificationsAsDelegatedApprover; + global Boolean UserPreferencesHideCSNGetChatterMobileTask; + global Boolean UserPreferencesDisableMentionsPostEmail; + global Boolean UserPreferencesDisMentionsCommentEmail; + global Boolean UserPreferencesHideCSNDesktopTask; + global Boolean UserPreferencesHideChatterOnboardingSplash; + global Boolean UserPreferencesHideSecondChatterOnboardingSplash; + global Boolean UserPreferencesDisCommentAfterLikeEmail; + global Boolean UserPreferencesDisableLikeEmail; + global Boolean UserPreferencesSortFeedByComment; + global Boolean UserPreferencesDisableMessageEmail; + global Boolean UserPreferencesJigsawListUser; + global Boolean UserPreferencesDisableBookmarkEmail; + global Boolean UserPreferencesDisableSharePostEmail; + global Boolean UserPreferencesEnableAutoSubForFeeds; + global Boolean UserPreferencesDisableFileShareNotificationsForApi; + global Boolean UserPreferencesShowTitleToExternalUsers; + global Boolean UserPreferencesShowManagerToExternalUsers; + global Boolean UserPreferencesShowEmailToExternalUsers; + global Boolean UserPreferencesShowWorkPhoneToExternalUsers; + global Boolean UserPreferencesShowMobilePhoneToExternalUsers; + global Boolean UserPreferencesShowFaxToExternalUsers; + global Boolean UserPreferencesShowStreetAddressToExternalUsers; + global Boolean UserPreferencesShowCityToExternalUsers; + global Boolean UserPreferencesShowStateToExternalUsers; + global Boolean UserPreferencesShowPostalCodeToExternalUsers; + global Boolean UserPreferencesShowCountryToExternalUsers; + global Boolean UserPreferencesShowProfilePicToGuestUsers; + global Boolean UserPreferencesShowTitleToGuestUsers; + global Boolean UserPreferencesShowCityToGuestUsers; + global Boolean UserPreferencesShowStateToGuestUsers; + global Boolean UserPreferencesShowPostalCodeToGuestUsers; + global Boolean UserPreferencesShowCountryToGuestUsers; + global Boolean UserPreferencesDisableFeedbackEmail; + global Boolean UserPreferencesDisableWorkEmail; + global Boolean UserPreferencesShowForecastingChangeSignals; + global Boolean UserPreferencesHideS1BrowserUI; + global Boolean UserPreferencesDisableEndorsementEmail; + global Boolean UserPreferencesPathAssistantCollapsed; + global Boolean UserPreferencesCacheDiagnostics; + global Boolean UserPreferencesShowEmailToGuestUsers; + global Boolean UserPreferencesShowManagerToGuestUsers; + global Boolean UserPreferencesShowWorkPhoneToGuestUsers; + global Boolean UserPreferencesShowMobilePhoneToGuestUsers; + global Boolean UserPreferencesShowFaxToGuestUsers; + global Boolean UserPreferencesShowStreetAddressToGuestUsers; + global Boolean UserPreferencesLightningExperiencePreferred; + global Boolean UserPreferencesPreviewLightning; + global Boolean UserPreferencesHideEndUserOnboardingAssistantModal; + global Boolean UserPreferencesHideLightningMigrationModal; + global Boolean UserPreferencesHideSfxWelcomeMat; + global Boolean UserPreferencesHideBiggerPhotoCallout; + global Boolean UserPreferencesGlobalNavBarWTShown; + global Boolean UserPreferencesGlobalNavGridMenuWTShown; + global Boolean UserPreferencesCreateLEXAppsWTShown; + global Boolean UserPreferencesFavoritesWTShown; + global Boolean UserPreferencesRecordHomeSectionCollapseWTShown; + global Boolean UserPreferencesRecordHomeReservedWTShown; + global Boolean UserPreferencesFavoritesShowTopFavorites; + global Boolean UserPreferencesExcludeMailAppAttachments; + global Boolean UserPreferencesSuppressTaskSFXReminders; + global Boolean UserPreferencesSuppressEventSFXReminders; + global Boolean UserPreferencesPreviewCustomTheme; + global Boolean UserPreferencesHasCelebrationBadge; + global Boolean UserPreferencesUserDebugModePref; + global Boolean UserPreferencesSRHOverrideActivities; + global Boolean UserPreferencesNewLightningReportRunPageEnabled; + global Boolean UserPreferencesReverseOpenActivitiesView; + global Boolean UserPreferencesShowTerritoryTimeZoneShifts; + global Boolean UserPreferencesHasSentWarningEmail; + global Boolean UserPreferencesHasSentWarningEmail238; + global Boolean UserPreferencesHasSentWarningEmail240; + global Boolean UserPreferencesNativeEmailClient; + global Boolean UserPreferencesSendListEmailThroughExternalService; + global Contact Contact; + global Id ContactId; + global Account Account; + global Id AccountId; + global CallCenter CallCenter; + global Id CallCenterId; + global String Extension; + global String FederationIdentifier; + global String AboutMe; + global String FullPhotoUrl; + global String SmallPhotoUrl; + global Boolean IsExtIndicatorVisible; + global String OutOfOfficeMessage; + global String MediumPhotoUrl; + global String DigestFrequency; + global String DefaultGroupNotificationFrequency; + global Integer JigsawImportLimitOverride; + global Datetime LastViewedDate; + global Datetime LastReferencedDate; + global String BannerPhotoUrl; + global String SmallBannerPhotoUrl; + global String MediumBannerPhotoUrl; + global Boolean IsProfilePhotoActive; + global Individual Individual; + global Id IndividualId; + global List AcceptedEventRelations; + global List AccountCleanInfoReviewers; + global List AttachedContentDocuments; + global List AuthorizationFormConsents; + global List GroupMemberships; + global List GroupMembershipRequests; + global List CombinedAttachments; + global List CommSubscriptionConsents; + global List ContactCleanInfoReviewers; + global List ContactRequests; + global List ContentDocumentLinks; + global List ContractsSigned; + global List ConversationEntries; + global List ConversationParticipants; + global List DeclinedEventRelations; + global List EmailMessageRelations; + global List FeedSubscriptionsForEntity; + global List FeedSubscriptions; + global List EventRelations; + global List ExternalDataUserAuths; + global List InstalledMobileApps; + global List LeadCleanInfoReviewers; + global List OutgoingEmailRelations; + global List OwnedContentDocuments; + global List PermissionSetAssignments; + global List PermissionSetLicenseAssignments; + global List ReceivedByProductTransfers; + global List UserProfileSkillUserEndorsements; + global List UserProfileSkillChildren; + global List RecordActions; + global List RecordActionHistories; + global List ServiceResources; + global List SessionPermSetActivations; + global List DeliveredToShipments; + global List UserSites; + global List Swarms; + global List SwarmMembers; + global List UndecidedEventRelations; + global List DelegatedUsers; + global List ManagedUsers; + global List PersonRecord; + global List UserEntityAccessRights; + global List Feeds; + global List UserFieldAccessRights; + global List UserPreferences; + global List Shares; + global List Badges; + global List GivenThanks; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List ChangedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List
CreatedBy; + global List
LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List LogUser; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List InsertedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List ExecutionUser; + global List Users; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List ConsentGiver; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List Publisher; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List LeadOrContactOwner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Member; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Member; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Parent; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Users; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List Inviter; + global List LastModifiedBy; + global List SharedEntity; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List ConsentGiver; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List ArchivedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List ArchivedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LinkedEntity; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List EntityIdentifier; + global List Users; + global List User; + global List SubscribedToUser; + global List SubscriberUser; + global List ContentModifiedBy; + global List CreatedBy; + global List FirstPublishLocation; + global List LastModifiedBy; + global List Owner; + global List ContentModifiedBy; + global List CreatedBy; + global List FirstPublishLocation; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List Member; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List ActivatedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List ActivatedBy; + global List CompanySigned; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List Folder; + global List LastModifiedBy; + global List RunningUser; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List DeletedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Author; + global List CreatedBy; + global List Folder; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List RunAsUser; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List Folder; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List Folder; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Relation; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List InsertedBy; + global List LastEditBy; + global List Parent; + global List CreatedBy; + global List InsertedBy; + global List LastEditBy; + global List Parent; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List InsertedBy; + global List BusinessOwner; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List InterviewStartedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List Assignee; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List RelatedRecord; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List Related; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List Users; + global List User; + global List CreatedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List User; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List TargetUser; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List ExecuteApexHandlerAs; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List ActivatedBy; + global List CompanyAuthorizedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List ActivatedBy; + global List CompanyAuthorizedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List InvokedByUser; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastActor; + global List LastModifiedBy; + global List SubmittedBy; + global List Actor; + global List CreatedBy; + global List OriginalActor; + global List CreatedBy; + global List LastActor; + global List LastModifiedBy; + global List Actor; + global List CreatedBy; + global List OriginalActor; + global List Actor; + global List CreatedBy; + global List OriginalActor; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List ReceivedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List User; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List PublishedByUser; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List User; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List User; + global List CreatedBy; + global List InsertedBy; + global List Owner; + global List User; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List ReturnedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List ReturnedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List ExecutionUser; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List RelatedRecord; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List User; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List DeliveredTo; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List GuestRecordDefaultOwner; + global List GuestUser; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Subject; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List User; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List InsertedBy; + global List User; + global List CreatedBy; + global List ExecutionUser; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List DelegatedApprover; + global List LastModifiedBy; + global List Manager; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List SalesforceUser; + global List CreatedBy; + global List LastModifiedBy; + global List SalesforceUser; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List Manager; + global List Owner; + global List SalesforceUser; + global List LastModifiedBy; + global List UserOrGroup; + global List User; + global List ForecastUser; + global List LastModifiedBy; + global List PortalAccountOwner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List User; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List Giver; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List Owner; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List CreatedBy; + global List InsertedBy; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + global List CreatedBy; + global List LastModifiedBy; + global List UserOrGroup; + + global User () + { + } +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Account.json b/.sfdx/tools/soqlMetadata/standardObjects/Account.json new file mode 100644 index 0000000..8dad044 --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Account.json @@ -0,0 +1,2952 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Master Record ID", + "name": "MasterRecordId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Account" + ], + "relationshipName": "MasterRecord", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "switchablepersonname", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account Name", + "name": "Name", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account Type", + "name": "Type", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Prospect", + "validFor": null, + "value": "Prospect" + }, + { + "active": true, + "defaultValue": false, + "label": "Customer - Direct", + "validFor": null, + "value": "Customer - Direct" + }, + { + "active": true, + "defaultValue": false, + "label": "Customer - Channel", + "validFor": null, + "value": "Customer - Channel" + }, + { + "active": true, + "defaultValue": false, + "label": "Channel Partner / Reseller", + "validFor": null, + "value": "Channel Partner / Reseller" + }, + { + "active": true, + "defaultValue": false, + "label": "Installation Partner", + "validFor": null, + "value": "Installation Partner" + }, + { + "active": true, + "defaultValue": false, + "label": "Technology Partner", + "validFor": null, + "value": "Technology Partner" + }, + { + "active": true, + "defaultValue": false, + "label": "Other", + "validFor": null, + "value": "Other" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Parent Account ID", + "name": "ParentId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Account" + ], + "relationshipName": "Parent", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing Street", + "name": "BillingStreet", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing City", + "name": "BillingCity", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing State/Province", + "name": "BillingState", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing Zip/Postal Code", + "name": "BillingPostalCode", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing Country", + "name": "BillingCountry", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Billing Latitude", + "name": "BillingLatitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Billing Longitude", + "name": "BillingLongitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing Geocode Accuracy", + "name": "BillingGeocodeAccuracy", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Address", + "validFor": null, + "value": "Address" + }, + { + "active": true, + "defaultValue": false, + "label": "NearAddress", + "validFor": null, + "value": "NearAddress" + }, + { + "active": true, + "defaultValue": false, + "label": "Block", + "validFor": null, + "value": "Block" + }, + { + "active": true, + "defaultValue": false, + "label": "Street", + "validFor": null, + "value": "Street" + }, + { + "active": true, + "defaultValue": false, + "label": "ExtendedZip", + "validFor": null, + "value": "ExtendedZip" + }, + { + "active": true, + "defaultValue": false, + "label": "Zip", + "validFor": null, + "value": "Zip" + }, + { + "active": true, + "defaultValue": false, + "label": "Neighborhood", + "validFor": null, + "value": "Neighborhood" + }, + { + "active": true, + "defaultValue": false, + "label": "City", + "validFor": null, + "value": "City" + }, + { + "active": true, + "defaultValue": false, + "label": "County", + "validFor": null, + "value": "County" + }, + { + "active": true, + "defaultValue": false, + "label": "State", + "validFor": null, + "value": "State" + }, + { + "active": true, + "defaultValue": false, + "label": "Unknown", + "validFor": null, + "value": "Unknown" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Billing Address", + "name": "BillingAddress", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "address" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Shipping Street", + "name": "ShippingStreet", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Shipping City", + "name": "ShippingCity", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Shipping State/Province", + "name": "ShippingState", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Shipping Zip/Postal Code", + "name": "ShippingPostalCode", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Shipping Country", + "name": "ShippingCountry", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Shipping Latitude", + "name": "ShippingLatitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Shipping Longitude", + "name": "ShippingLongitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Shipping Geocode Accuracy", + "name": "ShippingGeocodeAccuracy", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Address", + "validFor": null, + "value": "Address" + }, + { + "active": true, + "defaultValue": false, + "label": "NearAddress", + "validFor": null, + "value": "NearAddress" + }, + { + "active": true, + "defaultValue": false, + "label": "Block", + "validFor": null, + "value": "Block" + }, + { + "active": true, + "defaultValue": false, + "label": "Street", + "validFor": null, + "value": "Street" + }, + { + "active": true, + "defaultValue": false, + "label": "ExtendedZip", + "validFor": null, + "value": "ExtendedZip" + }, + { + "active": true, + "defaultValue": false, + "label": "Zip", + "validFor": null, + "value": "Zip" + }, + { + "active": true, + "defaultValue": false, + "label": "Neighborhood", + "validFor": null, + "value": "Neighborhood" + }, + { + "active": true, + "defaultValue": false, + "label": "City", + "validFor": null, + "value": "City" + }, + { + "active": true, + "defaultValue": false, + "label": "County", + "validFor": null, + "value": "County" + }, + { + "active": true, + "defaultValue": false, + "label": "State", + "validFor": null, + "value": "State" + }, + { + "active": true, + "defaultValue": false, + "label": "Unknown", + "validFor": null, + "value": "Unknown" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Shipping Address", + "name": "ShippingAddress", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "address" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account Phone", + "name": "Phone", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account Fax", + "name": "Fax", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account Number", + "name": "AccountNumber", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Website", + "name": "Website", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "url" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "imageurl", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Photo URL", + "name": "PhotoUrl", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "url" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "SIC Code", + "name": "Sic", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Industry", + "name": "Industry", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Agriculture", + "validFor": null, + "value": "Agriculture" + }, + { + "active": true, + "defaultValue": false, + "label": "Apparel", + "validFor": null, + "value": "Apparel" + }, + { + "active": true, + "defaultValue": false, + "label": "Banking", + "validFor": null, + "value": "Banking" + }, + { + "active": true, + "defaultValue": false, + "label": "Biotechnology", + "validFor": null, + "value": "Biotechnology" + }, + { + "active": true, + "defaultValue": false, + "label": "Chemicals", + "validFor": null, + "value": "Chemicals" + }, + { + "active": true, + "defaultValue": false, + "label": "Communications", + "validFor": null, + "value": "Communications" + }, + { + "active": true, + "defaultValue": false, + "label": "Construction", + "validFor": null, + "value": "Construction" + }, + { + "active": true, + "defaultValue": false, + "label": "Consulting", + "validFor": null, + "value": "Consulting" + }, + { + "active": true, + "defaultValue": false, + "label": "Education", + "validFor": null, + "value": "Education" + }, + { + "active": true, + "defaultValue": false, + "label": "Electronics", + "validFor": null, + "value": "Electronics" + }, + { + "active": true, + "defaultValue": false, + "label": "Energy", + "validFor": null, + "value": "Energy" + }, + { + "active": true, + "defaultValue": false, + "label": "Engineering", + "validFor": null, + "value": "Engineering" + }, + { + "active": true, + "defaultValue": false, + "label": "Entertainment", + "validFor": null, + "value": "Entertainment" + }, + { + "active": true, + "defaultValue": false, + "label": "Environmental", + "validFor": null, + "value": "Environmental" + }, + { + "active": true, + "defaultValue": false, + "label": "Finance", + "validFor": null, + "value": "Finance" + }, + { + "active": true, + "defaultValue": false, + "label": "Food & Beverage", + "validFor": null, + "value": "Food & Beverage" + }, + { + "active": true, + "defaultValue": false, + "label": "Government", + "validFor": null, + "value": "Government" + }, + { + "active": true, + "defaultValue": false, + "label": "Healthcare", + "validFor": null, + "value": "Healthcare" + }, + { + "active": true, + "defaultValue": false, + "label": "Hospitality", + "validFor": null, + "value": "Hospitality" + }, + { + "active": true, + "defaultValue": false, + "label": "Insurance", + "validFor": null, + "value": "Insurance" + }, + { + "active": true, + "defaultValue": false, + "label": "Machinery", + "validFor": null, + "value": "Machinery" + }, + { + "active": true, + "defaultValue": false, + "label": "Manufacturing", + "validFor": null, + "value": "Manufacturing" + }, + { + "active": true, + "defaultValue": false, + "label": "Media", + "validFor": null, + "value": "Media" + }, + { + "active": true, + "defaultValue": false, + "label": "Not For Profit", + "validFor": null, + "value": "Not For Profit" + }, + { + "active": true, + "defaultValue": false, + "label": "Recreation", + "validFor": null, + "value": "Recreation" + }, + { + "active": true, + "defaultValue": false, + "label": "Retail", + "validFor": null, + "value": "Retail" + }, + { + "active": true, + "defaultValue": false, + "label": "Shipping", + "validFor": null, + "value": "Shipping" + }, + { + "active": true, + "defaultValue": false, + "label": "Technology", + "validFor": null, + "value": "Technology" + }, + { + "active": true, + "defaultValue": false, + "label": "Telecommunications", + "validFor": null, + "value": "Telecommunications" + }, + { + "active": true, + "defaultValue": false, + "label": "Transportation", + "validFor": null, + "value": "Transportation" + }, + { + "active": true, + "defaultValue": false, + "label": "Utilities", + "validFor": null, + "value": "Utilities" + }, + { + "active": true, + "defaultValue": false, + "label": "Other", + "validFor": null, + "value": "Other" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Annual Revenue", + "name": "AnnualRevenue", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "currency" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Employees", + "name": "NumberOfEmployees", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "int" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Ownership", + "name": "Ownership", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Public", + "validFor": null, + "value": "Public" + }, + { + "active": true, + "defaultValue": false, + "label": "Private", + "validFor": null, + "value": "Private" + }, + { + "active": true, + "defaultValue": false, + "label": "Subsidiary", + "validFor": null, + "value": "Subsidiary" + }, + { + "active": true, + "defaultValue": false, + "label": "Other", + "validFor": null, + "value": "Other" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Ticker Symbol", + "name": "TickerSymbol", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": false, + "groupable": false, + "inlineHelpText": null, + "label": "Account Description", + "name": "Description", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account Rating", + "name": "Rating", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Hot", + "validFor": null, + "value": "Hot" + }, + { + "active": true, + "defaultValue": false, + "label": "Warm", + "validFor": null, + "value": "Warm" + }, + { + "active": true, + "defaultValue": false, + "label": "Cold", + "validFor": null, + "value": "Cold" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account Site", + "name": "Site", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Owner ID", + "name": "OwnerId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "Owner", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Activity", + "name": "LastActivityDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Viewed Date", + "name": "LastViewedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Referenced Date", + "name": "LastReferencedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Data.com Key", + "name": "Jigsaw", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Jigsaw Company ID", + "name": "JigsawCompanyId", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": "JigsawCompany", + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Clean Status", + "name": "CleanStatus", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "In Sync", + "validFor": null, + "value": "Matched" + }, + { + "active": true, + "defaultValue": false, + "label": "Different", + "validFor": null, + "value": "Different" + }, + { + "active": true, + "defaultValue": false, + "label": "Reviewed", + "validFor": null, + "value": "Acknowledged" + }, + { + "active": true, + "defaultValue": false, + "label": "Not Found", + "validFor": null, + "value": "NotFound" + }, + { + "active": true, + "defaultValue": false, + "label": "Inactive", + "validFor": null, + "value": "Inactive" + }, + { + "active": true, + "defaultValue": false, + "label": "Not Compared", + "validFor": null, + "value": "Pending" + }, + { + "active": true, + "defaultValue": false, + "label": "Select Match", + "validFor": null, + "value": "SelectMatch" + }, + { + "active": true, + "defaultValue": false, + "label": "Skipped", + "validFor": null, + "value": "Skipped" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account Source", + "name": "AccountSource", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Web", + "validFor": null, + "value": "Web" + }, + { + "active": true, + "defaultValue": false, + "label": "Phone Inquiry", + "validFor": null, + "value": "Phone Inquiry" + }, + { + "active": true, + "defaultValue": false, + "label": "Partner Referral", + "validFor": null, + "value": "Partner Referral" + }, + { + "active": true, + "defaultValue": false, + "label": "Purchased List", + "validFor": null, + "value": "Purchased List" + }, + { + "active": true, + "defaultValue": false, + "label": "Other", + "validFor": null, + "value": "Other" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "D-U-N-S Number", + "name": "DunsNumber", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Tradestyle", + "name": "Tradestyle", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "NAICS Code", + "name": "NaicsCode", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "NAICS Description", + "name": "NaicsDesc", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Year Started", + "name": "YearStarted", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "SIC Description", + "name": "SicDesc", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "D&B Company ID", + "name": "DandbCompanyId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "DandBCompany" + ], + "relationshipName": "DandbCompany", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Operating Hour ID", + "name": "OperatingHoursId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "OperatingHours" + ], + "relationshipName": "OperatingHours", + "sortable": true, + "type": "reference" + } + ], + "label": "Account", + "childRelationships": [ + { + "cascadeDelete": true, + "childSObject": "AIInsightValue", + "deprecatedAndHidden": false, + "field": "SobjectLookupValueId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AIRecordInsight", + "deprecatedAndHidden": false, + "field": "TargetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Account", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ChildAccounts", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountChangeEvent", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AccountCleanInfo", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AccountCleanInfos", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AccountContactRole", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AccountContactRoles", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountContactRoleChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AccountFeed", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Feeds", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AccountHistory", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Histories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AccountPartner", + "deprecatedAndHidden": false, + "field": "AccountFromId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AccountPartnersFrom", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AccountPartner", + "deprecatedAndHidden": false, + "field": "AccountToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AccountPartnersTo", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AccountShare", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Shares", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ActivityHistory", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ActivityHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AlternativePaymentMethod", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AlternativePaymentMethods", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Asset", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Assets", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Asset", + "deprecatedAndHidden": false, + "field": "AssetProvidedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProvidedAssets", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Asset", + "deprecatedAndHidden": false, + "field": "AssetServicedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ServicedAssets", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetChangeEvent", + "deprecatedAndHidden": false, + "field": "AssetProvidedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetChangeEvent", + "deprecatedAndHidden": false, + "field": "AssetServicedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AssociatedLocation", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AssociatedLocations", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AttachedContentDocument", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AttachedContentDocuments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Attachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Attachments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsent", + "deprecatedAndHidden": false, + "field": "ConsentGiverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AuthorizationFormConsents", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsent", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RelatedAuthorizationFormConsents", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "ConsentGiverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignMember", + "deprecatedAndHidden": false, + "field": "LeadOrContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CardPaymentMethod", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CardPaymentMethods", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Case", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Cases", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "CaseChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CollaborationGroupRecord", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordAssociatedGroups", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CombinedAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CombinedAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsent", + "deprecatedAndHidden": false, + "field": "ConsentGiverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CommSubscriptionConsents", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "ConsentGiverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Contact", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Contacts", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContactPointAddress", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContactPointAddresses", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointAddressChangeEvent", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContactPointEmail", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContactPointEmails", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointEmailChangeEvent", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContactPointPhone", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContactPointPhones", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointPhoneChangeEvent", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactRequest", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContactRequests", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDistribution", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDocumentLink", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContentDocumentLinks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentLinkChangeEvent", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Contract", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Contracts", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "ContractChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CreditMemo", + "deprecatedAndHidden": false, + "field": "BillingAccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CreditMemos", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DigitalWallet", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "DigitalWallets", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "DuplicateRecordItem", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "DuplicateRecordItems", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessage", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Emails", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessageChangeEvent", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Entitlement", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Entitlements", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "EntitlementChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitySubscription", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FeedSubscriptionsForEntity", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Event", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Event", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Events", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventChangeEvent", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelationChangeEvent", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Expense", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Expenses", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceBalanceSnapshot", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FinanceBalanceSnapshots", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceBalanceSnapshotChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceTransaction", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FinanceTransactions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceTransactionChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationWorkItem", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Invoice", + "deprecatedAndHidden": false, + "field": "BillingAccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Invoices", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Lead", + "deprecatedAndHidden": false, + "field": "ConvertedAccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadChangeEvent", + "deprecatedAndHidden": false, + "field": "ConvertedAccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenancePlan", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "MaintenancePlans", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenancePlanChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingEndUser", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "MessagingEndUsers", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingSession", + "deprecatedAndHidden": false, + "field": "EndUserAccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "MessagingSessions", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Note", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Notes", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "NoteAndAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "NotesAndAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpenActivity", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpenActivities", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Opportunity", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Opportunities", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpportunityPartner", + "deprecatedAndHidden": false, + "field": "AccountToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpportunityPartnersTo", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Order", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Orders", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "OrderChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OutgoingEmail", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Partner", + "deprecatedAndHidden": false, + "field": "AccountFromId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "PartnersFrom", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Partner", + "deprecatedAndHidden": false, + "field": "AccountToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "PartnersTo", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Payment", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Payments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentAuthAdjustment", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "PaymentAuthAdjustments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentAuthorization", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "PaymentAuthorizations", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentLineInvoice", + "deprecatedAndHidden": false, + "field": "AssociatedAccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "PaymentLinesInvoice", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentMethod", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstance", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessInstances", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceHistory", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessSteps", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequest", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductRequests", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestLineItem", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductRequestLineItems", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "RecordAction", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActionHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Refund", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Refunds", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RefundLinePayment", + "deprecatedAndHidden": false, + "field": "AssociatedAccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RefundLinePayments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ResourcePreference", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ResourcePreferences", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourcePreferenceChangeEvent", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrder", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ReturnOrders", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ScorecardAssociation", + "deprecatedAndHidden": false, + "field": "TargetEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ScorecardAssociations", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointment", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ServiceAppointmentAccount", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ServiceAppointment", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ServiceAppointments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentChangeEvent", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContract", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ServiceContracts", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContractChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResource", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ServiceResources", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Swarm", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Swarms", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "SwarmMember", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "SwarmMembers", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Task", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Task", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Tasks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskChangeEvent", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "TopicAssignment", + "deprecatedAndHidden": false, + "field": "EntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "TopicAssignments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "User", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Users", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserRole", + "deprecatedAndHidden": false, + "field": "PortalAccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrder", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "WorkOrders", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "WorkPlanSelectionRule", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "WorkPlanSelectionRules", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRuleChangeEvent", + "deprecatedAndHidden": false, + "field": "AccountId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + } + ], + "custom": false, + "name": "Account", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/AccountHistory.json b/.sfdx/tools/soqlMetadata/standardObjects/AccountHistory.json new file mode 100644 index 0000000..8a50bf8 --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/AccountHistory.json @@ -0,0 +1,875 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account History ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account ID", + "name": "AccountId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "Account" + ], + "relationshipName": "Account", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Changed Field", + "name": "Field", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Account Merged", + "validFor": null, + "value": "accountMerged" + }, + { + "active": true, + "defaultValue": false, + "label": "Account Name", + "validFor": null, + "value": "Name" + }, + { + "active": true, + "defaultValue": false, + "label": "Account Name", + "validFor": null, + "value": "TextName" + }, + { + "active": true, + "defaultValue": false, + "label": "Account Number", + "validFor": null, + "value": "AccountNumber" + }, + { + "active": true, + "defaultValue": false, + "label": "Account Owner", + "validFor": null, + "value": "Owner" + }, + { + "active": true, + "defaultValue": false, + "label": "Account Site", + "validFor": null, + "value": "Site" + }, + { + "active": true, + "defaultValue": false, + "label": "Account Source", + "validFor": null, + "value": "AccountSource" + }, + { + "active": true, + "defaultValue": false, + "label": "Annual Revenue", + "validFor": null, + "value": "AnnualRevenue" + }, + { + "active": true, + "defaultValue": false, + "label": "Billing Address", + "validFor": null, + "value": "BillingAddress" + }, + { + "active": true, + "defaultValue": false, + "label": "Billing City", + "validFor": null, + "value": "BillingCity" + }, + { + "active": true, + "defaultValue": false, + "label": "Billing Country", + "validFor": null, + "value": "BillingCountry" + }, + { + "active": true, + "defaultValue": false, + "label": "Billing Geocode Accuracy", + "validFor": null, + "value": "BillingGeocodeAccuracy" + }, + { + "active": true, + "defaultValue": false, + "label": "Billing Latitude", + "validFor": null, + "value": "BillingLatitude" + }, + { + "active": true, + "defaultValue": false, + "label": "Billing Longitude", + "validFor": null, + "value": "BillingLongitude" + }, + { + "active": true, + "defaultValue": false, + "label": "Billing State/Province", + "validFor": null, + "value": "BillingState" + }, + { + "active": true, + "defaultValue": false, + "label": "Billing Street", + "validFor": null, + "value": "BillingStreet" + }, + { + "active": true, + "defaultValue": false, + "label": "Billing Zip/Postal Code", + "validFor": null, + "value": "BillingPostalCode" + }, + { + "active": true, + "defaultValue": false, + "label": "Clean Status", + "validFor": null, + "value": "CleanStatus" + }, + { + "active": true, + "defaultValue": false, + "label": "Created.", + "validFor": null, + "value": "created" + }, + { + "active": true, + "defaultValue": false, + "label": "Created by lead convert", + "validFor": null, + "value": "accountCreatedFromLead" + }, + { + "active": true, + "defaultValue": false, + "label": "D&B Company", + "validFor": null, + "value": "DandbCompany" + }, + { + "active": true, + "defaultValue": false, + "label": "Data.com Key", + "validFor": null, + "value": "Jigsaw" + }, + { + "active": true, + "defaultValue": false, + "label": "Description", + "validFor": null, + "value": "Description" + }, + { + "active": true, + "defaultValue": false, + "label": "D-U-N-S Number", + "validFor": null, + "value": "DunsNumber" + }, + { + "active": true, + "defaultValue": false, + "label": "Employees", + "validFor": null, + "value": "NumberOfEmployees" + }, + { + "active": true, + "defaultValue": false, + "label": "Fax", + "validFor": null, + "value": "Fax" + }, + { + "active": true, + "defaultValue": false, + "label": "Feed event", + "validFor": null, + "value": "feedEvent" + }, + { + "active": true, + "defaultValue": false, + "label": "Individual Merged", + "validFor": null, + "value": "individualMerged" + }, + { + "active": true, + "defaultValue": false, + "label": "Industry", + "validFor": null, + "value": "Industry" + }, + { + "active": true, + "defaultValue": false, + "label": "Lead converted to Account", + "validFor": null, + "value": "accountUpdatedByLead" + }, + { + "active": true, + "defaultValue": false, + "label": "Lead converted to Person Account", + "validFor": null, + "value": "personAccountUpdatedByLead" + }, + { + "active": true, + "defaultValue": false, + "label": "NAICS Code", + "validFor": null, + "value": "NaicsCode" + }, + { + "active": true, + "defaultValue": false, + "label": "NAICS Description", + "validFor": null, + "value": "NaicsDesc" + }, + { + "active": true, + "defaultValue": false, + "label": "Operating Hours", + "validFor": null, + "value": "OperatingHours" + }, + { + "active": true, + "defaultValue": false, + "label": "Owner (Accepted)", + "validFor": null, + "value": "ownerAccepted" + }, + { + "active": true, + "defaultValue": false, + "label": "Owner (Assignment)", + "validFor": null, + "value": "ownerAssignment" + }, + { + "active": true, + "defaultValue": false, + "label": "Ownership", + "validFor": null, + "value": "Ownership" + }, + { + "active": true, + "defaultValue": false, + "label": "Parent Account", + "validFor": null, + "value": "Parent" + }, + { + "active": true, + "defaultValue": false, + "label": "Phone", + "validFor": null, + "value": "Phone" + }, + { + "active": true, + "defaultValue": false, + "label": "Rating", + "validFor": null, + "value": "Rating" + }, + { + "active": true, + "defaultValue": false, + "label": "Record locked.", + "validFor": null, + "value": "locked" + }, + { + "active": true, + "defaultValue": false, + "label": "Record unlocked.", + "validFor": null, + "value": "unlocked" + }, + { + "active": true, + "defaultValue": false, + "label": "Shipping Address", + "validFor": null, + "value": "ShippingAddress" + }, + { + "active": true, + "defaultValue": false, + "label": "Shipping City", + "validFor": null, + "value": "ShippingCity" + }, + { + "active": true, + "defaultValue": false, + "label": "Shipping Country", + "validFor": null, + "value": "ShippingCountry" + }, + { + "active": true, + "defaultValue": false, + "label": "Shipping Geocode Accuracy", + "validFor": null, + "value": "ShippingGeocodeAccuracy" + }, + { + "active": true, + "defaultValue": false, + "label": "Shipping Latitude", + "validFor": null, + "value": "ShippingLatitude" + }, + { + "active": true, + "defaultValue": false, + "label": "Shipping Longitude", + "validFor": null, + "value": "ShippingLongitude" + }, + { + "active": true, + "defaultValue": false, + "label": "Shipping State/Province", + "validFor": null, + "value": "ShippingState" + }, + { + "active": true, + "defaultValue": false, + "label": "Shipping Street", + "validFor": null, + "value": "ShippingStreet" + }, + { + "active": true, + "defaultValue": false, + "label": "Shipping Zip/Postal Code", + "validFor": null, + "value": "ShippingPostalCode" + }, + { + "active": true, + "defaultValue": false, + "label": "SIC Code", + "validFor": null, + "value": "Sic" + }, + { + "active": true, + "defaultValue": false, + "label": "SIC Description", + "validFor": null, + "value": "SicDesc" + }, + { + "active": true, + "defaultValue": false, + "label": "Ticker Symbol", + "validFor": null, + "value": "TickerSymbol" + }, + { + "active": true, + "defaultValue": false, + "label": "Tradestyle", + "validFor": null, + "value": "Tradestyle" + }, + { + "active": true, + "defaultValue": false, + "label": "Type", + "validFor": null, + "value": "Type" + }, + { + "active": true, + "defaultValue": false, + "label": "Website", + "validFor": null, + "value": "Website" + }, + { + "active": true, + "defaultValue": false, + "label": "Year Started", + "validFor": null, + "value": "YearStarted" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Datatype", + "name": "DataType", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Address" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AnyType" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AutoNumber" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Base64" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "BitVector" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Boolean" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Content" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Currency" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "DataCategoryGroupReference" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "DateOnly" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "DateTime" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Division" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Double" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "DynamicEnum" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Email" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "EncryptedBase64" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "EncryptedText" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "EntityId" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "EnumOrId" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ExternalId" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Fax" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "File" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "HtmlMultiLineText" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "HtmlStringPlusClob" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "InetAddress" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Json" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Location" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MultiEnum" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MultiLineText" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Namespace" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Percent" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "PersonName" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Phone" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Raw" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "RecordType" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SfdcEncryptedText" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SimpleNamespace" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "StringPlusClob" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Switchable_PersonName" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Text" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TimeOnly" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Url" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "YearQuarter" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": false, + "groupable": false, + "inlineHelpText": null, + "label": "Old Value", + "name": "OldValue", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "anyType" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": false, + "groupable": false, + "inlineHelpText": null, + "label": "New Value", + "name": "NewValue", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "anyType" + } + ], + "label": "Account History", + "childRelationships": [], + "custom": false, + "name": "AccountHistory", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Asset.json b/.sfdx/tools/soqlMetadata/standardObjects/Asset.json new file mode 100644 index 0000000..3ea4948 --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Asset.json @@ -0,0 +1,1699 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Asset ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Contact ID", + "name": "ContactId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Contact" + ], + "relationshipName": "Contact", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account ID", + "name": "AccountId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Account" + ], + "relationshipName": "Account", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Parent Asset ID", + "name": "ParentId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Asset" + ], + "relationshipName": "Parent", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Root Asset ID", + "name": "RootAssetId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Asset" + ], + "relationshipName": "RootAsset", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Product ID", + "name": "Product2Id", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Product2" + ], + "relationshipName": "Product2", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Product Code", + "name": "ProductCode", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Competitor Asset", + "name": "IsCompetitorProduct", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Asset Name", + "name": "Name", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Serial Number", + "name": "SerialNumber", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Install Date", + "name": "InstallDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Purchase Date", + "name": "PurchaseDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Usage End Date", + "name": "UsageEndDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Lifecycle Start Date", + "name": "LifecycleStartDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Lifecycle End Date", + "name": "LifecycleEndDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Status", + "name": "Status", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Shipped", + "validFor": null, + "value": "Shipped" + }, + { + "active": true, + "defaultValue": false, + "label": "Installed", + "validFor": null, + "value": "Installed" + }, + { + "active": true, + "defaultValue": false, + "label": "Registered", + "validFor": null, + "value": "Registered" + }, + { + "active": true, + "defaultValue": false, + "label": "Obsolete", + "validFor": null, + "value": "Obsolete" + }, + { + "active": true, + "defaultValue": false, + "label": "Purchased", + "validFor": null, + "value": "Purchased" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Price", + "name": "Price", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "currency" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Quantity", + "name": "Quantity", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": false, + "groupable": false, + "inlineHelpText": null, + "label": "Description", + "name": "Description", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Owner ID", + "name": "OwnerId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "Owner", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Location ID", + "name": "LocationId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Location" + ], + "relationshipName": "Location", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Asset Provided By ID", + "name": "AssetProvidedById", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Account" + ], + "relationshipName": "AssetProvidedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Asset Serviced By ID", + "name": "AssetServicedById", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Account" + ], + "relationshipName": "AssetServicedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Internal Asset", + "name": "IsInternal", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Asset Level", + "name": "AssetLevel", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "int" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Product SKU", + "name": "StockKeepingUnit", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Lifecycle-managed asset", + "name": "HasLifecycleManagement", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Current Monthly Recurring Revenue", + "name": "CurrentMrr", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "currency" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Current Lifecycle End Date", + "name": "CurrentLifecycleEndDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Current Quantity", + "name": "CurrentQuantity", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Current Amount", + "name": "CurrentAmount", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "currency" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Total Lifecycle Amount", + "name": "TotalLifecycleAmount", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "currency" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Street", + "name": "Street", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "City", + "name": "City", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "State", + "name": "State", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Postal Code", + "name": "PostalCode", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Country", + "name": "Country", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Latitude", + "name": "Latitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Longitude", + "name": "Longitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Geocode Accuracy", + "name": "GeocodeAccuracy", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Address", + "validFor": null, + "value": "Address" + }, + { + "active": true, + "defaultValue": false, + "label": "NearAddress", + "validFor": null, + "value": "NearAddress" + }, + { + "active": true, + "defaultValue": false, + "label": "Block", + "validFor": null, + "value": "Block" + }, + { + "active": true, + "defaultValue": false, + "label": "Street", + "validFor": null, + "value": "Street" + }, + { + "active": true, + "defaultValue": false, + "label": "ExtendedZip", + "validFor": null, + "value": "ExtendedZip" + }, + { + "active": true, + "defaultValue": false, + "label": "Zip", + "validFor": null, + "value": "Zip" + }, + { + "active": true, + "defaultValue": false, + "label": "Neighborhood", + "validFor": null, + "value": "Neighborhood" + }, + { + "active": true, + "defaultValue": false, + "label": "City", + "validFor": null, + "value": "City" + }, + { + "active": true, + "defaultValue": false, + "label": "County", + "validFor": null, + "value": "County" + }, + { + "active": true, + "defaultValue": false, + "label": "State", + "validFor": null, + "value": "State" + }, + { + "active": true, + "defaultValue": false, + "label": "Unknown", + "validFor": null, + "value": "Unknown" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Address", + "name": "Address", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "address" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Viewed Date", + "name": "LastViewedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Referenced Date", + "name": "LastReferencedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + } + ], + "label": "Asset", + "childRelationships": [ + { + "cascadeDelete": true, + "childSObject": "AIInsightValue", + "deprecatedAndHidden": false, + "field": "SobjectLookupValueId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AIRecordInsight", + "deprecatedAndHidden": false, + "field": "TargetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ActivityHistory", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ActivityHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Asset", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ChildAssets", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Asset", + "deprecatedAndHidden": false, + "field": "RootAssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AssetAction", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AssetActions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetAttribute", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AssetAttributes", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetAttributeChangeEvent", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetChangeEvent", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetChangeEvent", + "deprecatedAndHidden": false, + "field": "RootAssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AssetDowntimePeriod", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AssetDowntimePeriods", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AssetFeed", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Feeds", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AssetHistory", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Histories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AssetRelationship", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "PrimaryAssets", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetRelationship", + "deprecatedAndHidden": false, + "field": "RelatedAssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RelatedAssets", + "restrictedDelete": true + }, + { + "cascadeDelete": true, + "childSObject": "AssetShare", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Shares", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AssetStatePeriod", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AssetStatePeriods", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetTokenEvent", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AssetWarranty", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "WarrantyAssets", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetWarrantyChangeEvent", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AttachedContentDocument", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AttachedContentDocuments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Attachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Attachments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Case", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Cases", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "CaseChangeEvent", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CombinedAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CombinedAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDocumentLink", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContentDocumentLinks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentLinkChangeEvent", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineItem", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContractLineItems", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessage", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Emails", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessageChangeEvent", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Entitlement", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Entitlements", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntitlementChangeEvent", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitySubscription", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FeedSubscriptionsForEntity", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Event", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Events", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventChangeEvent", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelationChangeEvent", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationWorkItem", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "MaintenanceAsset", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "MaintenanceAssets", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceAssetChangeEvent", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Note", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Notes", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "NoteAndAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "NotesAndAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpenActivity", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpenActivities", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OutgoingEmail", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstance", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessInstances", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceHistory", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessSteps", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignItem", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductServiceCampaignItems", + "restrictedDelete": true + }, + { + "cascadeDelete": true, + "childSObject": "RecordAction", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActionHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "RecordsetFltrCritMonitor", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordsetFltrCritMonitors", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFltrCritMonitorChangeEvent", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ResourcePreference", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ResourcePreferences", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderLineItem", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ReturnOrderLineItems", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SerializedProduct", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "SerializedProducts", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ServiceAppointment", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ServiceAppointments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentChangeEvent", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Task", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Tasks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskChangeEvent", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "TopicAssignment", + "deprecatedAndHidden": false, + "field": "EntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "TopicAssignments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrder", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "WorkOrders", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItem", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "WorkOrderLineItems", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRule", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "WorkPlanSelectionRules", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRuleChangeEvent", + "deprecatedAndHidden": false, + "field": "AssetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + } + ], + "custom": false, + "name": "Asset", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Attachment.json b/.sfdx/tools/soqlMetadata/standardObjects/Attachment.json new file mode 100644 index 0000000..57315d1 --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Attachment.json @@ -0,0 +1,362 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Attachment ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Parent ID", + "name": "ParentId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "Account", + "ApptBundleAggrDurDnscale", + "ApptBundleAggrPolicy", + "ApptBundleConfig", + "ApptBundlePolicy", + "ApptBundlePolicySvcTerr", + "ApptBundlePropagatePolicy", + "ApptBundleRestrictPolicy", + "ApptBundleSortPolicy", + "Asset", + "AssetDowntimePeriod", + "AssetWarranty", + "AttributeDefinition", + "Broker__c", + "Campaign", + "Case", + "CommSubscription", + "CommSubscriptionChannelType", + "CommSubscriptionConsent", + "CommSubscriptionTiming", + "Contact", + "Contract", + "ContractLineItem", + "ContractLineOutcome", + "CreditMemo", + "EmailMessage", + "EmailTemplate", + "EngagementChannelType", + "Entitlement", + "Event", + "Image", + "Invoice", + "JobProfile", + "Lead", + "LegalEntity", + "Location", + "MaintenancePlan", + "Opportunity", + "Order", + "Product2", + "ProductConsumed", + "ProductItem", + "ProductRequest", + "ProductRequestLineItem", + "ProductRequired", + "ProductServiceCampaign", + "ProductServiceCampaignItem", + "ProductTransfer", + "ProductWarrantyTerm", + "Property__c", + "ReturnOrder", + "ReturnOrderLineItem", + "SerializedProduct", + "SerializedProductTransaction", + "ServiceAppointment", + "ServiceContract", + "ServiceResource", + "Shift", + "Solution", + "Task", + "TravelMode", + "WarrantyTerm", + "WorkOrder", + "WorkOrderLineItem", + "WorkPlan", + "WorkPlanSelectionRule", + "WorkPlanTemplate", + "WorkStep", + "WorkStepTemplate" + ], + "relationshipName": "Parent", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "File Name", + "name": "Name", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Private", + "name": "IsPrivate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Content Type", + "name": "ContentType", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Body Length", + "name": "BodyLength", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "int" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": false, + "groupable": false, + "inlineHelpText": null, + "label": "Body", + "name": "Body", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "base64" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Owner ID", + "name": "OwnerId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "Calendar", + "User" + ], + "relationshipName": "Owner", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Description", + "name": "Description", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + } + ], + "label": "Attachment", + "childRelationships": [ + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + } + ], + "custom": false, + "name": "Attachment", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Case.json b/.sfdx/tools/soqlMetadata/standardObjects/Case.json new file mode 100644 index 0000000..e98ceb8 --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Case.json @@ -0,0 +1,1371 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Case ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Master Record ID", + "name": "MasterRecordId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Case" + ], + "relationshipName": "MasterRecord", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Case Number", + "name": "CaseNumber", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Contact ID", + "name": "ContactId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Contact" + ], + "relationshipName": "Contact", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account ID", + "name": "AccountId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Account" + ], + "relationshipName": "Account", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Asset ID", + "name": "AssetId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Asset" + ], + "relationshipName": "Asset", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Parent Case ID", + "name": "ParentId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Case" + ], + "relationshipName": "Parent", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Name", + "name": "SuppliedName", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Email Address", + "name": "SuppliedEmail", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "email" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Phone", + "name": "SuppliedPhone", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Company", + "name": "SuppliedCompany", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Case Type", + "name": "Type", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Mechanical", + "validFor": null, + "value": "Mechanical" + }, + { + "active": true, + "defaultValue": false, + "label": "Electrical", + "validFor": null, + "value": "Electrical" + }, + { + "active": true, + "defaultValue": false, + "label": "Electronic", + "validFor": null, + "value": "Electronic" + }, + { + "active": true, + "defaultValue": false, + "label": "Structural", + "validFor": null, + "value": "Structural" + }, + { + "active": true, + "defaultValue": false, + "label": "Other", + "validFor": null, + "value": "Other" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": "New", + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Status", + "name": "Status", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": true, + "label": "New", + "validFor": null, + "value": "New" + }, + { + "active": true, + "defaultValue": false, + "label": "Working", + "validFor": null, + "value": "Working" + }, + { + "active": true, + "defaultValue": false, + "label": "Escalated", + "validFor": null, + "value": "Escalated" + }, + { + "active": true, + "defaultValue": false, + "label": "Closed", + "validFor": null, + "value": "Closed" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Case Reason", + "name": "Reason", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Installation", + "validFor": null, + "value": "Installation" + }, + { + "active": true, + "defaultValue": false, + "label": "Equipment Complexity", + "validFor": null, + "value": "Equipment Complexity" + }, + { + "active": true, + "defaultValue": false, + "label": "Performance", + "validFor": null, + "value": "Performance" + }, + { + "active": true, + "defaultValue": false, + "label": "Breakdown", + "validFor": null, + "value": "Breakdown" + }, + { + "active": true, + "defaultValue": false, + "label": "Equipment Design", + "validFor": null, + "value": "Equipment Design" + }, + { + "active": true, + "defaultValue": false, + "label": "Feedback", + "validFor": null, + "value": "Feedback" + }, + { + "active": true, + "defaultValue": false, + "label": "Other", + "validFor": null, + "value": "Other" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Case Origin", + "name": "Origin", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Phone", + "validFor": null, + "value": "Phone" + }, + { + "active": true, + "defaultValue": false, + "label": "Email", + "validFor": null, + "value": "Email" + }, + { + "active": true, + "defaultValue": false, + "label": "Web", + "validFor": null, + "value": "Web" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Subject", + "name": "Subject", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": "Medium", + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Priority", + "name": "Priority", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "High", + "validFor": null, + "value": "High" + }, + { + "active": true, + "defaultValue": true, + "label": "Medium", + "validFor": null, + "value": "Medium" + }, + { + "active": true, + "defaultValue": false, + "label": "Low", + "validFor": null, + "value": "Low" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": false, + "groupable": false, + "inlineHelpText": null, + "label": "Description", + "name": "Description", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "textarea" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Closed", + "name": "IsClosed", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Closed Date", + "name": "ClosedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Escalated", + "name": "IsEscalated", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Owner ID", + "name": "OwnerId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "Group", + "User" + ], + "relationshipName": "Owner", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Contact Phone", + "name": "ContactPhone", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Contact Mobile", + "name": "ContactMobile", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Contact Email", + "name": "ContactEmail", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "email" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Contact Fax", + "name": "ContactFax", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": false, + "groupable": false, + "inlineHelpText": null, + "label": "Internal Comments", + "name": "Comments", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Viewed Date", + "name": "LastViewedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Referenced Date", + "name": "LastReferencedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + } + ], + "label": "Case", + "childRelationships": [ + { + "cascadeDelete": true, + "childSObject": "AIInsightValue", + "deprecatedAndHidden": false, + "field": "SobjectLookupValueId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AIRecordInsight", + "deprecatedAndHidden": false, + "field": "TargetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ActivityHistory", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ActivityHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AttachedContentDocument", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AttachedContentDocuments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Attachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Attachments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Case", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Cases", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseChangeEvent", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseComment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CaseComments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseContactRole", + "deprecatedAndHidden": false, + "field": "CasesId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CaseContactRoles", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseFeed", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Feeds", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseHistory", + "deprecatedAndHidden": false, + "field": "CaseId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Histories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseMilestone", + "deprecatedAndHidden": false, + "field": "CaseId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CaseMilestones", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseShare", + "deprecatedAndHidden": false, + "field": "CaseId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Shares", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseSolution", + "deprecatedAndHidden": false, + "field": "CaseId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CaseSolutions", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseTeamMember", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "TeamMembers", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseTeamTemplateRecord", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "TeamTemplateRecords", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CollaborationGroupRecord", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordAssociatedGroups", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CombinedAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CombinedAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactRequest", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContactRequests", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDistribution", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDocumentLink", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContentDocumentLinks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentLinkChangeEvent", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EmailMessage", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "EmailMessages", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessage", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Emails", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessageChangeEvent", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessageChangeEvent", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitySubscription", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FeedSubscriptionsForEntity", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Event", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Events", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventChangeEvent", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelationChangeEvent", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationWorkItem", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingSession", + "deprecatedAndHidden": false, + "field": "CaseId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "MessagingSessions", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpenActivity", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpenActivities", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessException", + "deprecatedAndHidden": false, + "field": "CaseId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessExceptions", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstance", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessInstances", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceHistory", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessSteps", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequest", + "deprecatedAndHidden": false, + "field": "CaseId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductRequests", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestChangeEvent", + "deprecatedAndHidden": false, + "field": "CaseId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestLineItem", + "deprecatedAndHidden": false, + "field": "CaseId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductRequestLineItems", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "CaseId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "RecordAction", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActionHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrder", + "deprecatedAndHidden": false, + "field": "CaseId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ReturnOrders", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "CaseId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ServiceAppointment", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ServiceAppointments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentChangeEvent", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Swarm", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Swarms", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "SwarmMember", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "SwarmMembers", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Task", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Tasks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskChangeEvent", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "TopicAssignment", + "deprecatedAndHidden": false, + "field": "EntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "TopicAssignments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrder", + "deprecatedAndHidden": false, + "field": "CaseId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "WorkOrders", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "CaseId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + } + ], + "custom": false, + "name": "Case", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Contact.json b/.sfdx/tools/soqlMetadata/standardObjects/Contact.json new file mode 100644 index 0000000..8743d9b --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Contact.json @@ -0,0 +1,2309 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Contact ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Master Record ID", + "name": "MasterRecordId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Contact" + ], + "relationshipName": "MasterRecord", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account ID", + "name": "AccountId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Account" + ], + "relationshipName": "Account", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "personname", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Name", + "name": "LastName", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "personname", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "First Name", + "name": "FirstName", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "personname", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Salutation", + "name": "Salutation", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Mr.", + "validFor": null, + "value": "Mr." + }, + { + "active": true, + "defaultValue": false, + "label": "Ms.", + "validFor": null, + "value": "Ms." + }, + { + "active": true, + "defaultValue": false, + "label": "Mrs.", + "validFor": null, + "value": "Mrs." + }, + { + "active": true, + "defaultValue": false, + "label": "Dr.", + "validFor": null, + "value": "Dr." + }, + { + "active": true, + "defaultValue": false, + "label": "Prof.", + "validFor": null, + "value": "Prof." + }, + { + "active": true, + "defaultValue": false, + "label": "Mx.", + "validFor": null, + "value": "Mx." + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "personname", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Full Name", + "name": "Name", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Other Street", + "name": "OtherStreet", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Other City", + "name": "OtherCity", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Other State/Province", + "name": "OtherState", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Other Zip/Postal Code", + "name": "OtherPostalCode", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Other Country", + "name": "OtherCountry", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Other Latitude", + "name": "OtherLatitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Other Longitude", + "name": "OtherLongitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Other Geocode Accuracy", + "name": "OtherGeocodeAccuracy", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Address", + "validFor": null, + "value": "Address" + }, + { + "active": true, + "defaultValue": false, + "label": "NearAddress", + "validFor": null, + "value": "NearAddress" + }, + { + "active": true, + "defaultValue": false, + "label": "Block", + "validFor": null, + "value": "Block" + }, + { + "active": true, + "defaultValue": false, + "label": "Street", + "validFor": null, + "value": "Street" + }, + { + "active": true, + "defaultValue": false, + "label": "ExtendedZip", + "validFor": null, + "value": "ExtendedZip" + }, + { + "active": true, + "defaultValue": false, + "label": "Zip", + "validFor": null, + "value": "Zip" + }, + { + "active": true, + "defaultValue": false, + "label": "Neighborhood", + "validFor": null, + "value": "Neighborhood" + }, + { + "active": true, + "defaultValue": false, + "label": "City", + "validFor": null, + "value": "City" + }, + { + "active": true, + "defaultValue": false, + "label": "County", + "validFor": null, + "value": "County" + }, + { + "active": true, + "defaultValue": false, + "label": "State", + "validFor": null, + "value": "State" + }, + { + "active": true, + "defaultValue": false, + "label": "Unknown", + "validFor": null, + "value": "Unknown" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Other Address", + "name": "OtherAddress", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "address" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Mailing Street", + "name": "MailingStreet", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Mailing City", + "name": "MailingCity", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Mailing State/Province", + "name": "MailingState", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Mailing Zip/Postal Code", + "name": "MailingPostalCode", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Mailing Country", + "name": "MailingCountry", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Mailing Latitude", + "name": "MailingLatitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Mailing Longitude", + "name": "MailingLongitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Mailing Geocode Accuracy", + "name": "MailingGeocodeAccuracy", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Address", + "validFor": null, + "value": "Address" + }, + { + "active": true, + "defaultValue": false, + "label": "NearAddress", + "validFor": null, + "value": "NearAddress" + }, + { + "active": true, + "defaultValue": false, + "label": "Block", + "validFor": null, + "value": "Block" + }, + { + "active": true, + "defaultValue": false, + "label": "Street", + "validFor": null, + "value": "Street" + }, + { + "active": true, + "defaultValue": false, + "label": "ExtendedZip", + "validFor": null, + "value": "ExtendedZip" + }, + { + "active": true, + "defaultValue": false, + "label": "Zip", + "validFor": null, + "value": "Zip" + }, + { + "active": true, + "defaultValue": false, + "label": "Neighborhood", + "validFor": null, + "value": "Neighborhood" + }, + { + "active": true, + "defaultValue": false, + "label": "City", + "validFor": null, + "value": "City" + }, + { + "active": true, + "defaultValue": false, + "label": "County", + "validFor": null, + "value": "County" + }, + { + "active": true, + "defaultValue": false, + "label": "State", + "validFor": null, + "value": "State" + }, + { + "active": true, + "defaultValue": false, + "label": "Unknown", + "validFor": null, + "value": "Unknown" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Mailing Address", + "name": "MailingAddress", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "address" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Business Phone", + "name": "Phone", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Business Fax", + "name": "Fax", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Mobile Phone", + "name": "MobilePhone", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Home Phone", + "name": "HomePhone", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Other Phone", + "name": "OtherPhone", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Asst. Phone", + "name": "AssistantPhone", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Reports To ID", + "name": "ReportsToId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Contact" + ], + "relationshipName": "ReportsTo", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Email", + "name": "Email", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "email" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Title", + "name": "Title", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Department", + "name": "Department", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Assistant's Name", + "name": "AssistantName", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Lead Source", + "name": "LeadSource", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Web", + "validFor": null, + "value": "Web" + }, + { + "active": true, + "defaultValue": false, + "label": "Phone Inquiry", + "validFor": null, + "value": "Phone Inquiry" + }, + { + "active": true, + "defaultValue": false, + "label": "Partner Referral", + "validFor": null, + "value": "Partner Referral" + }, + { + "active": true, + "defaultValue": false, + "label": "Purchased List", + "validFor": null, + "value": "Purchased List" + }, + { + "active": true, + "defaultValue": false, + "label": "Other", + "validFor": null, + "value": "Other" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Birthdate", + "name": "Birthdate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": false, + "groupable": false, + "inlineHelpText": null, + "label": "Contact Description", + "name": "Description", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Owner ID", + "name": "OwnerId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "Owner", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Activity", + "name": "LastActivityDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Stay-in-Touch Request Date", + "name": "LastCURequestDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Stay-in-Touch Save Date", + "name": "LastCUUpdateDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Viewed Date", + "name": "LastViewedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Referenced Date", + "name": "LastReferencedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Email Bounced Reason", + "name": "EmailBouncedReason", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Email Bounced Date", + "name": "EmailBouncedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Is Email Bounced", + "name": "IsEmailBounced", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "imageurl", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Photo URL", + "name": "PhotoUrl", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "url" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Data.com Key", + "name": "Jigsaw", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Jigsaw Contact ID", + "name": "JigsawContactId", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": "JigsawContact", + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Clean Status", + "name": "CleanStatus", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "In Sync", + "validFor": null, + "value": "Matched" + }, + { + "active": true, + "defaultValue": false, + "label": "Different", + "validFor": null, + "value": "Different" + }, + { + "active": true, + "defaultValue": false, + "label": "Reviewed", + "validFor": null, + "value": "Acknowledged" + }, + { + "active": true, + "defaultValue": false, + "label": "Not Found", + "validFor": null, + "value": "NotFound" + }, + { + "active": true, + "defaultValue": false, + "label": "Inactive", + "validFor": null, + "value": "Inactive" + }, + { + "active": true, + "defaultValue": false, + "label": "Not Compared", + "validFor": null, + "value": "Pending" + }, + { + "active": true, + "defaultValue": false, + "label": "Select Match", + "validFor": null, + "value": "SelectMatch" + }, + { + "active": true, + "defaultValue": false, + "label": "Skipped", + "validFor": null, + "value": "Skipped" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Individual ID", + "name": "IndividualId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Individual" + ], + "relationshipName": "Individual", + "sortable": true, + "type": "reference" + } + ], + "label": "Contact", + "childRelationships": [ + { + "cascadeDelete": true, + "childSObject": "AIInsightValue", + "deprecatedAndHidden": false, + "field": "SobjectLookupValueId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AIRecordInsight", + "deprecatedAndHidden": false, + "field": "TargetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AcceptedEventRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AcceptedEventRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AccountContactRole", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AccountContactRoles", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountContactRoleChangeEvent", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ActivityHistory", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ActivityHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Asset", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Assets", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetChangeEvent", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AttachedContentDocument", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AttachedContentDocuments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Attachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Attachments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsent", + "deprecatedAndHidden": false, + "field": "ConsentGiverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AuthorizationFormConsents", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "ConsentGiverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CampaignMember", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CampaignMembers", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignMember", + "deprecatedAndHidden": false, + "field": "LeadOrContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignMemberChangeEvent", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Case", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Cases", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "CaseChangeEvent", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseContactRole", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CaseContactRoles", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseTeamMember", + "deprecatedAndHidden": false, + "field": "MemberId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseTeamTemplateMember", + "deprecatedAndHidden": false, + "field": "MemberId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CollaborationGroupRecord", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordAssociatedGroups", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CombinedAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CombinedAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsent", + "deprecatedAndHidden": false, + "field": "ConsentGiverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CommSubscriptionConsents", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "ConsentGiverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Contact", + "deprecatedAndHidden": false, + "field": "ReportsToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactChangeEvent", + "deprecatedAndHidden": false, + "field": "ReportsToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContactCleanInfo", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContactCleanInfos", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContactFeed", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Feeds", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContactHistory", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Histories", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactRequest", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContactRequests", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContactShare", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Shares", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDistribution", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDocumentLink", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContentDocumentLinks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentLinkChangeEvent", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Contract", + "deprecatedAndHidden": false, + "field": "CustomerSignedId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContractsSigned", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "ContractChangeEvent", + "deprecatedAndHidden": false, + "field": "CustomerSignedId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContractContactRole", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContractContactRoles", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConversationParticipant", + "deprecatedAndHidden": false, + "field": "ParticipantEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ConversationParticipants", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemo", + "deprecatedAndHidden": false, + "field": "BillToContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CreditMemos", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DeclinedEventRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "DeclinedEventRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "DuplicateRecordItem", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "DuplicateRecordItems", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EmailMessageRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "EmailMessageRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EmailStatus", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "EmailStatuses", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitlementContact", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "EntitlementContacts", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitySubscription", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FeedSubscriptionsForEntity", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Event", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Events", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventChangeEvent", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EventRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "EventRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelationChangeEvent", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationWorkItem", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Invoice", + "deprecatedAndHidden": false, + "field": "BillToContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Invoices", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Lead", + "deprecatedAndHidden": false, + "field": "ConvertedContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadChangeEvent", + "deprecatedAndHidden": false, + "field": "ConvertedContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ListEmailIndividualRecipient", + "deprecatedAndHidden": false, + "field": "RecipientId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ListEmailIndividualRecipients", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenancePlan", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "MaintenancePlans", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenancePlanChangeEvent", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "MatchingInformation", + "deprecatedAndHidden": false, + "field": "SFDCIdId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingEndUser", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "MessagingEndUsers", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingSession", + "deprecatedAndHidden": false, + "field": "EndUserContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "MessagingSessions", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Note", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Notes", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "NoteAndAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "NotesAndAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpenActivity", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpenActivities", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Opportunity", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Opportunities", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityChangeEvent", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpportunityContactRole", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpportunityContactRoles", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityContactRoleChangeEvent", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Order", + "deprecatedAndHidden": false, + "field": "BillToContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "Order", + "deprecatedAndHidden": false, + "field": "CustomerAuthorizedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "Order", + "deprecatedAndHidden": false, + "field": "ShipToContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "OrderChangeEvent", + "deprecatedAndHidden": false, + "field": "BillToContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderChangeEvent", + "deprecatedAndHidden": false, + "field": "CustomerAuthorizedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderChangeEvent", + "deprecatedAndHidden": false, + "field": "ShipToContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OutgoingEmail", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OutgoingEmailRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OutgoingEmailRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstance", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessInstances", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceHistory", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessSteps", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "RecordAction", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActionHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrder", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ReturnOrders", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointment", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ServiceAppointments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentChangeEvent", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContract", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ServiceContracts", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContractChangeEvent", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Task", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Tasks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskChangeEvent", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "TopicAssignment", + "deprecatedAndHidden": false, + "field": "EntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "TopicAssignments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UndecidedEventRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "UndecidedEventRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "User", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Users", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "UserChangeEvent", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "UserEmailPreferredPerson", + "deprecatedAndHidden": false, + "field": "PersonRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "PersonRecord", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrder", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "WorkOrders", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "ContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + } + ], + "custom": false, + "name": "Contact", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Contract.json b/.sfdx/tools/soqlMetadata/standardObjects/Contract.json new file mode 100644 index 0000000..72f0b60 --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Contract.json @@ -0,0 +1,1304 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Contract ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account ID", + "name": "AccountId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "Account" + ], + "relationshipName": "Account", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Price Book ID", + "name": "Pricebook2Id", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Pricebook2" + ], + "relationshipName": "Pricebook2", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Owner Expiration Notice", + "name": "OwnerExpirationNotice", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "15 Days", + "validFor": null, + "value": "15" + }, + { + "active": true, + "defaultValue": false, + "label": "30 Days", + "validFor": null, + "value": "30" + }, + { + "active": true, + "defaultValue": false, + "label": "45 Days", + "validFor": null, + "value": "45" + }, + { + "active": true, + "defaultValue": false, + "label": "60 Days", + "validFor": null, + "value": "60" + }, + { + "active": true, + "defaultValue": false, + "label": "90 Days", + "validFor": null, + "value": "90" + }, + { + "active": true, + "defaultValue": false, + "label": "120 Days", + "validFor": null, + "value": "120" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Contract Start Date", + "name": "StartDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Contract End Date", + "name": "EndDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing Street", + "name": "BillingStreet", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing City", + "name": "BillingCity", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing State/Province", + "name": "BillingState", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing Zip/Postal Code", + "name": "BillingPostalCode", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing Country", + "name": "BillingCountry", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Billing Latitude", + "name": "BillingLatitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Billing Longitude", + "name": "BillingLongitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing Geocode Accuracy", + "name": "BillingGeocodeAccuracy", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Address", + "validFor": null, + "value": "Address" + }, + { + "active": true, + "defaultValue": false, + "label": "NearAddress", + "validFor": null, + "value": "NearAddress" + }, + { + "active": true, + "defaultValue": false, + "label": "Block", + "validFor": null, + "value": "Block" + }, + { + "active": true, + "defaultValue": false, + "label": "Street", + "validFor": null, + "value": "Street" + }, + { + "active": true, + "defaultValue": false, + "label": "ExtendedZip", + "validFor": null, + "value": "ExtendedZip" + }, + { + "active": true, + "defaultValue": false, + "label": "Zip", + "validFor": null, + "value": "Zip" + }, + { + "active": true, + "defaultValue": false, + "label": "Neighborhood", + "validFor": null, + "value": "Neighborhood" + }, + { + "active": true, + "defaultValue": false, + "label": "City", + "validFor": null, + "value": "City" + }, + { + "active": true, + "defaultValue": false, + "label": "County", + "validFor": null, + "value": "County" + }, + { + "active": true, + "defaultValue": false, + "label": "State", + "validFor": null, + "value": "State" + }, + { + "active": true, + "defaultValue": false, + "label": "Unknown", + "validFor": null, + "value": "Unknown" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Billing Address", + "name": "BillingAddress", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "address" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Contract Term", + "name": "ContractTerm", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "int" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Owner ID", + "name": "OwnerId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "Owner", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Status", + "name": "Status", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "In Approval Process", + "validFor": null, + "value": "In Approval Process" + }, + { + "active": true, + "defaultValue": false, + "label": "Activated", + "validFor": null, + "value": "Activated" + }, + { + "active": true, + "defaultValue": false, + "label": "Draft", + "validFor": null, + "value": "Draft" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Company Signed By ID", + "name": "CompanySignedId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CompanySigned", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Company Signed Date", + "name": "CompanySignedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Customer Signed By ID", + "name": "CustomerSignedId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Contact" + ], + "relationshipName": "CustomerSigned", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Customer Signed Title", + "name": "CustomerSignedTitle", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Customer Signed Date", + "name": "CustomerSignedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Special Terms", + "name": "SpecialTerms", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Activated By ID", + "name": "ActivatedById", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "ActivatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Activated Date", + "name": "ActivatedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Status Category", + "name": "StatusCode", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Draft", + "validFor": null, + "value": "Draft" + }, + { + "active": true, + "defaultValue": false, + "label": "In Approval Process", + "validFor": null, + "value": "InApproval" + }, + { + "active": true, + "defaultValue": false, + "label": "Activated", + "validFor": null, + "value": "Activated" + }, + { + "active": true, + "defaultValue": false, + "label": "Terminated", + "validFor": null, + "value": "Terminated" + }, + { + "active": true, + "defaultValue": false, + "label": "Expired", + "validFor": null, + "value": "Expired" + }, + { + "active": true, + "defaultValue": false, + "label": "Rejected", + "validFor": null, + "value": "Rejected" + }, + { + "active": true, + "defaultValue": false, + "label": "Negotiating", + "validFor": null, + "value": "Negotiating" + }, + { + "active": true, + "defaultValue": false, + "label": "Awaiting Signature", + "validFor": null, + "value": "AwaitingSignature" + }, + { + "active": true, + "defaultValue": false, + "label": "Signature Declined", + "validFor": null, + "value": "SignatureDeclined" + }, + { + "active": true, + "defaultValue": false, + "label": "Signed", + "validFor": null, + "value": "Signed" + }, + { + "active": true, + "defaultValue": false, + "label": "Canceled", + "validFor": null, + "value": "Cancelled" + }, + { + "active": true, + "defaultValue": false, + "label": "Contract Expired", + "validFor": null, + "value": "Expired2" + }, + { + "active": true, + "defaultValue": false, + "label": "Contract Terminated", + "validFor": null, + "value": "Terminated2" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": false, + "groupable": false, + "inlineHelpText": null, + "label": "Description", + "name": "Description", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "textarea" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Contract Number", + "name": "ContractNumber", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Approved Date", + "name": "LastApprovedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Activity", + "name": "LastActivityDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Viewed Date", + "name": "LastViewedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Referenced Date", + "name": "LastReferencedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + } + ], + "label": "Contract", + "childRelationships": [ + { + "cascadeDelete": true, + "childSObject": "AIInsightValue", + "deprecatedAndHidden": false, + "field": "SobjectLookupValueId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AIRecordInsight", + "deprecatedAndHidden": false, + "field": "TargetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ActivityHistory", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ActivityHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AttachedContentDocument", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AttachedContentDocuments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Attachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Attachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CollaborationGroupRecord", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordAssociatedGroups", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CombinedAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CombinedAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDocumentLink", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContentDocumentLinks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentLinkChangeEvent", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContractContactRole", + "deprecatedAndHidden": false, + "field": "ContractId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContractContactRoles", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContractFeed", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Feeds", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContractHistory", + "deprecatedAndHidden": false, + "field": "ContractId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Histories", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessage", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Emails", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessageChangeEvent", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitySubscription", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FeedSubscriptionsForEntity", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Event", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Events", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventChangeEvent", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelationChangeEvent", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationWorkItem", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Note", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Notes", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "NoteAndAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "NotesAndAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpenActivity", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpenActivities", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Order", + "deprecatedAndHidden": false, + "field": "ContractId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Orders", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderChangeEvent", + "deprecatedAndHidden": false, + "field": "ContractId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OutgoingEmail", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstance", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessInstances", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceHistory", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessSteps", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "RecordAction", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActionHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Task", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Tasks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskChangeEvent", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "TopicAssignment", + "deprecatedAndHidden": false, + "field": "EntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "TopicAssignments", + "restrictedDelete": false + } + ], + "custom": false, + "name": "Contract", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Domain.json b/.sfdx/tools/soqlMetadata/standardObjects/Domain.json new file mode 100644 index 0000000..61dcd4e --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Domain.json @@ -0,0 +1,293 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Domain ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Domain Type", + "name": "DomainType", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Domain Name System (DNS)", + "validFor": null, + "value": "DNS" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Domain Name", + "name": "Domain", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Allow Strict Transport Security preloading", + "name": "OptionsHstsPreload", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "CNAME Target", + "name": "CnameTarget", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Current HTTPS Option", + "name": "HttpsOption", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Content Delivery Network (CDN) partner of Salesforce", + "validFor": null, + "value": "CdnPartner" + }, + { + "active": true, + "defaultValue": false, + "label": "Salesforce Cloud", + "validFor": null, + "value": "SitesRuntime" + }, + { + "active": true, + "defaultValue": false, + "label": "Domain is served by an external host", + "validFor": null, + "value": "ExternalHttps" + }, + { + "active": true, + "defaultValue": false, + "label": "No HTTPS (Temporary)", + "validFor": null, + "value": "NoHttps" + }, + { + "active": true, + "defaultValue": false, + "label": "Experience Cloud Sites Force.com Domain", + "validFor": null, + "value": "Community" + }, + { + "active": true, + "defaultValue": false, + "label": "Experience Cloud Sites Domain", + "validFor": null, + "value": "CommunityAlt" + }, + { + "active": true, + "defaultValue": false, + "label": "Salesforce Sites Domain", + "validFor": null, + "value": "SitesAlt" + }, + { + "active": true, + "defaultValue": false, + "label": "Salesforce Sites Force.com Domain", + "validFor": null, + "value": "Sites" + }, + { + "active": true, + "defaultValue": false, + "label": "My Domain", + "validFor": null, + "value": "OrgDomain" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + } + ], + "label": "Domain", + "childRelationships": [ + { + "cascadeDelete": true, + "childSObject": "DomainSite", + "deprecatedAndHidden": false, + "field": "DomainId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "DomainSites", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ManagedContentChannel", + "deprecatedAndHidden": false, + "field": "Domain", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": true + } + ], + "custom": false, + "name": "Domain", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Lead.json b/.sfdx/tools/soqlMetadata/standardObjects/Lead.json new file mode 100644 index 0000000..4bc1ef3 --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Lead.json @@ -0,0 +1,1977 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Lead ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Master Record ID", + "name": "MasterRecordId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Lead" + ], + "relationshipName": "MasterRecord", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "personname", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Name", + "name": "LastName", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "personname", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "First Name", + "name": "FirstName", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "personname", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Salutation", + "name": "Salutation", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Mr.", + "validFor": null, + "value": "Mr." + }, + { + "active": true, + "defaultValue": false, + "label": "Ms.", + "validFor": null, + "value": "Ms." + }, + { + "active": true, + "defaultValue": false, + "label": "Mrs.", + "validFor": null, + "value": "Mrs." + }, + { + "active": true, + "defaultValue": false, + "label": "Dr.", + "validFor": null, + "value": "Dr." + }, + { + "active": true, + "defaultValue": false, + "label": "Prof.", + "validFor": null, + "value": "Prof." + }, + { + "active": true, + "defaultValue": false, + "label": "Mx.", + "validFor": null, + "value": "Mx." + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "personname", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Full Name", + "name": "Name", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Title", + "name": "Title", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Company", + "name": "Company", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Street", + "name": "Street", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "City", + "name": "City", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "State/Province", + "name": "State", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Zip/Postal Code", + "name": "PostalCode", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Country", + "name": "Country", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Latitude", + "name": "Latitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Longitude", + "name": "Longitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Geocode Accuracy", + "name": "GeocodeAccuracy", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Address", + "validFor": null, + "value": "Address" + }, + { + "active": true, + "defaultValue": false, + "label": "NearAddress", + "validFor": null, + "value": "NearAddress" + }, + { + "active": true, + "defaultValue": false, + "label": "Block", + "validFor": null, + "value": "Block" + }, + { + "active": true, + "defaultValue": false, + "label": "Street", + "validFor": null, + "value": "Street" + }, + { + "active": true, + "defaultValue": false, + "label": "ExtendedZip", + "validFor": null, + "value": "ExtendedZip" + }, + { + "active": true, + "defaultValue": false, + "label": "Zip", + "validFor": null, + "value": "Zip" + }, + { + "active": true, + "defaultValue": false, + "label": "Neighborhood", + "validFor": null, + "value": "Neighborhood" + }, + { + "active": true, + "defaultValue": false, + "label": "City", + "validFor": null, + "value": "City" + }, + { + "active": true, + "defaultValue": false, + "label": "County", + "validFor": null, + "value": "County" + }, + { + "active": true, + "defaultValue": false, + "label": "State", + "validFor": null, + "value": "State" + }, + { + "active": true, + "defaultValue": false, + "label": "Unknown", + "validFor": null, + "value": "Unknown" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Address", + "name": "Address", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "address" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Phone", + "name": "Phone", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Mobile Phone", + "name": "MobilePhone", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Fax", + "name": "Fax", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Email", + "name": "Email", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "email" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Website", + "name": "Website", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "url" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "imageurl", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Photo URL", + "name": "PhotoUrl", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "url" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": false, + "groupable": false, + "inlineHelpText": null, + "label": "Description", + "name": "Description", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Lead Source", + "name": "LeadSource", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Web", + "validFor": null, + "value": "Web" + }, + { + "active": true, + "defaultValue": false, + "label": "Phone Inquiry", + "validFor": null, + "value": "Phone Inquiry" + }, + { + "active": true, + "defaultValue": false, + "label": "Partner Referral", + "validFor": null, + "value": "Partner Referral" + }, + { + "active": true, + "defaultValue": false, + "label": "Purchased List", + "validFor": null, + "value": "Purchased List" + }, + { + "active": true, + "defaultValue": false, + "label": "Other", + "validFor": null, + "value": "Other" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": "Open - Not Contacted", + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Status", + "name": "Status", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": true, + "label": "Open - Not Contacted", + "validFor": null, + "value": "Open - Not Contacted" + }, + { + "active": true, + "defaultValue": false, + "label": "Working - Contacted", + "validFor": null, + "value": "Working - Contacted" + }, + { + "active": true, + "defaultValue": false, + "label": "Closed - Converted", + "validFor": null, + "value": "Closed - Converted" + }, + { + "active": true, + "defaultValue": false, + "label": "Closed - Not Converted", + "validFor": null, + "value": "Closed - Not Converted" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Industry", + "name": "Industry", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Agriculture", + "validFor": null, + "value": "Agriculture" + }, + { + "active": true, + "defaultValue": false, + "label": "Apparel", + "validFor": null, + "value": "Apparel" + }, + { + "active": true, + "defaultValue": false, + "label": "Banking", + "validFor": null, + "value": "Banking" + }, + { + "active": true, + "defaultValue": false, + "label": "Biotechnology", + "validFor": null, + "value": "Biotechnology" + }, + { + "active": true, + "defaultValue": false, + "label": "Chemicals", + "validFor": null, + "value": "Chemicals" + }, + { + "active": true, + "defaultValue": false, + "label": "Communications", + "validFor": null, + "value": "Communications" + }, + { + "active": true, + "defaultValue": false, + "label": "Construction", + "validFor": null, + "value": "Construction" + }, + { + "active": true, + "defaultValue": false, + "label": "Consulting", + "validFor": null, + "value": "Consulting" + }, + { + "active": true, + "defaultValue": false, + "label": "Education", + "validFor": null, + "value": "Education" + }, + { + "active": true, + "defaultValue": false, + "label": "Electronics", + "validFor": null, + "value": "Electronics" + }, + { + "active": true, + "defaultValue": false, + "label": "Energy", + "validFor": null, + "value": "Energy" + }, + { + "active": true, + "defaultValue": false, + "label": "Engineering", + "validFor": null, + "value": "Engineering" + }, + { + "active": true, + "defaultValue": false, + "label": "Entertainment", + "validFor": null, + "value": "Entertainment" + }, + { + "active": true, + "defaultValue": false, + "label": "Environmental", + "validFor": null, + "value": "Environmental" + }, + { + "active": true, + "defaultValue": false, + "label": "Finance", + "validFor": null, + "value": "Finance" + }, + { + "active": true, + "defaultValue": false, + "label": "Food & Beverage", + "validFor": null, + "value": "Food & Beverage" + }, + { + "active": true, + "defaultValue": false, + "label": "Government", + "validFor": null, + "value": "Government" + }, + { + "active": true, + "defaultValue": false, + "label": "Healthcare", + "validFor": null, + "value": "Healthcare" + }, + { + "active": true, + "defaultValue": false, + "label": "Hospitality", + "validFor": null, + "value": "Hospitality" + }, + { + "active": true, + "defaultValue": false, + "label": "Insurance", + "validFor": null, + "value": "Insurance" + }, + { + "active": true, + "defaultValue": false, + "label": "Machinery", + "validFor": null, + "value": "Machinery" + }, + { + "active": true, + "defaultValue": false, + "label": "Manufacturing", + "validFor": null, + "value": "Manufacturing" + }, + { + "active": true, + "defaultValue": false, + "label": "Media", + "validFor": null, + "value": "Media" + }, + { + "active": true, + "defaultValue": false, + "label": "Not For Profit", + "validFor": null, + "value": "Not For Profit" + }, + { + "active": true, + "defaultValue": false, + "label": "Recreation", + "validFor": null, + "value": "Recreation" + }, + { + "active": true, + "defaultValue": false, + "label": "Retail", + "validFor": null, + "value": "Retail" + }, + { + "active": true, + "defaultValue": false, + "label": "Shipping", + "validFor": null, + "value": "Shipping" + }, + { + "active": true, + "defaultValue": false, + "label": "Technology", + "validFor": null, + "value": "Technology" + }, + { + "active": true, + "defaultValue": false, + "label": "Telecommunications", + "validFor": null, + "value": "Telecommunications" + }, + { + "active": true, + "defaultValue": false, + "label": "Transportation", + "validFor": null, + "value": "Transportation" + }, + { + "active": true, + "defaultValue": false, + "label": "Utilities", + "validFor": null, + "value": "Utilities" + }, + { + "active": true, + "defaultValue": false, + "label": "Other", + "validFor": null, + "value": "Other" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Rating", + "name": "Rating", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Hot", + "validFor": null, + "value": "Hot" + }, + { + "active": true, + "defaultValue": false, + "label": "Warm", + "validFor": null, + "value": "Warm" + }, + { + "active": true, + "defaultValue": false, + "label": "Cold", + "validFor": null, + "value": "Cold" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Annual Revenue", + "name": "AnnualRevenue", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "currency" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Employees", + "name": "NumberOfEmployees", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "int" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Owner ID", + "name": "OwnerId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "Group", + "User" + ], + "relationshipName": "Owner", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Converted", + "name": "IsConverted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Converted Date", + "name": "ConvertedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Converted Account ID", + "name": "ConvertedAccountId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Account" + ], + "relationshipName": "ConvertedAccount", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Converted Contact ID", + "name": "ConvertedContactId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Contact" + ], + "relationshipName": "ConvertedContact", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Converted Opportunity ID", + "name": "ConvertedOpportunityId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Opportunity" + ], + "relationshipName": "ConvertedOpportunity", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Unread By Owner", + "name": "IsUnreadByOwner", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Activity", + "name": "LastActivityDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Viewed Date", + "name": "LastViewedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Referenced Date", + "name": "LastReferencedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Data.com Key", + "name": "Jigsaw", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Jigsaw Contact ID", + "name": "JigsawContactId", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": "JigsawContact", + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Clean Status", + "name": "CleanStatus", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "In Sync", + "validFor": null, + "value": "Matched" + }, + { + "active": true, + "defaultValue": false, + "label": "Different", + "validFor": null, + "value": "Different" + }, + { + "active": true, + "defaultValue": false, + "label": "Reviewed", + "validFor": null, + "value": "Acknowledged" + }, + { + "active": true, + "defaultValue": false, + "label": "Not Found", + "validFor": null, + "value": "NotFound" + }, + { + "active": true, + "defaultValue": false, + "label": "Inactive", + "validFor": null, + "value": "Inactive" + }, + { + "active": true, + "defaultValue": false, + "label": "Not Compared", + "validFor": null, + "value": "Pending" + }, + { + "active": true, + "defaultValue": false, + "label": "Select Match", + "validFor": null, + "value": "SelectMatch" + }, + { + "active": true, + "defaultValue": false, + "label": "Skipped", + "validFor": null, + "value": "Skipped" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Company D-U-N-S Number", + "name": "CompanyDunsNumber", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "D&B Company ID", + "name": "DandbCompanyId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "DandBCompany" + ], + "relationshipName": "DandbCompany", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Email Bounced Reason", + "name": "EmailBouncedReason", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Email Bounced Date", + "name": "EmailBouncedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Individual ID", + "name": "IndividualId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Individual" + ], + "relationshipName": "Individual", + "sortable": true, + "type": "reference" + } + ], + "label": "Lead", + "childRelationships": [ + { + "cascadeDelete": true, + "childSObject": "AIInsightValue", + "deprecatedAndHidden": false, + "field": "SobjectLookupValueId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AIRecordInsight", + "deprecatedAndHidden": false, + "field": "TargetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AcceptedEventRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AcceptedEventRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ActivityHistory", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ActivityHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AttachedContentDocument", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AttachedContentDocuments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Attachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Attachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CampaignMember", + "deprecatedAndHidden": false, + "field": "LeadId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CampaignMembers", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignMember", + "deprecatedAndHidden": false, + "field": "LeadOrContactId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignMemberChangeEvent", + "deprecatedAndHidden": false, + "field": "LeadId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CollaborationGroupRecord", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordAssociatedGroups", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CombinedAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CombinedAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactRequest", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContactRequests", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDistribution", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDocumentLink", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContentDocumentLinks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentLinkChangeEvent", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DeclinedEventRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "DeclinedEventRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "DuplicateRecordItem", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "DuplicateRecordItems", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EmailMessageRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "EmailMessageRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EmailStatus", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "EmailStatuses", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitySubscription", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FeedSubscriptionsForEntity", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Event", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Events", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventChangeEvent", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EventRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "EventRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelationChangeEvent", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationWorkItem", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "LeadCleanInfo", + "deprecatedAndHidden": false, + "field": "LeadId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "LeadCleanInfos", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "LeadFeed", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Feeds", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "LeadHistory", + "deprecatedAndHidden": false, + "field": "LeadId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Histories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "LeadShare", + "deprecatedAndHidden": false, + "field": "LeadId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Shares", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ListEmailIndividualRecipient", + "deprecatedAndHidden": false, + "field": "RecipientId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ListEmailIndividualRecipients", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingEndUser", + "deprecatedAndHidden": false, + "field": "LeadId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "MessagingEndUsers", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingSession", + "deprecatedAndHidden": false, + "field": "LeadId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "MessagingSessions", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Note", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Notes", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "NoteAndAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "NotesAndAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpenActivity", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpenActivities", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OutgoingEmail", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OutgoingEmailRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OutgoingEmailRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstance", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessInstances", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceHistory", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessSteps", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "RecordAction", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActionHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ServiceAppointment", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ServiceAppointments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentChangeEvent", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Task", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Tasks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskChangeEvent", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "TopicAssignment", + "deprecatedAndHidden": false, + "field": "EntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "TopicAssignments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UndecidedEventRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "UndecidedEventRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "UserEmailPreferredPerson", + "deprecatedAndHidden": false, + "field": "PersonRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "PersonRecord", + "restrictedDelete": false + } + ], + "custom": false, + "name": "Lead", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Note.json b/.sfdx/tools/soqlMetadata/standardObjects/Note.json new file mode 100644 index 0000000..883f231 --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Note.json @@ -0,0 +1,303 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Note Id", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Parent ID", + "name": "ParentId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "Account", + "ApptBundleAggrDurDnscale", + "ApptBundleAggrPolicy", + "ApptBundleConfig", + "ApptBundlePolicy", + "ApptBundlePolicySvcTerr", + "ApptBundlePropagatePolicy", + "ApptBundleRestrictPolicy", + "ApptBundleSortPolicy", + "Asset", + "AssetDowntimePeriod", + "AssetWarranty", + "AttributeDefinition", + "Broker__c", + "CommSubscription", + "CommSubscriptionChannelType", + "CommSubscriptionConsent", + "CommSubscriptionTiming", + "Contact", + "Contract", + "ContractLineItem", + "ContractLineOutcome", + "CreditMemo", + "EngagementChannelType", + "Entitlement", + "Image", + "Invoice", + "JobProfile", + "Lead", + "LegalEntity", + "Location", + "MaintenancePlan", + "Opportunity", + "Order", + "Product2", + "ProductConsumed", + "ProductItem", + "ProductRequest", + "ProductRequestLineItem", + "ProductRequired", + "ProductServiceCampaign", + "ProductServiceCampaignItem", + "ProductTransfer", + "ProductWarrantyTerm", + "Property__c", + "ReturnOrder", + "ReturnOrderLineItem", + "SerializedProduct", + "SerializedProductTransaction", + "ServiceAppointment", + "ServiceContract", + "ServiceResource", + "Shift", + "TravelMode", + "WarrantyTerm", + "WorkOrder", + "WorkOrderLineItem", + "WorkPlan", + "WorkPlanSelectionRule", + "WorkPlanTemplate", + "WorkStep", + "WorkStepTemplate" + ], + "relationshipName": "Parent", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Title", + "name": "Title", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Private", + "name": "IsPrivate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": false, + "groupable": false, + "inlineHelpText": null, + "label": "Body", + "name": "Body", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Owner ID", + "name": "OwnerId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "Owner", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + } + ], + "label": "Note", + "childRelationships": [ + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + } + ], + "custom": false, + "name": "Note", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Opportunity.json b/.sfdx/tools/soqlMetadata/standardObjects/Opportunity.json new file mode 100644 index 0000000..daee2c2 --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Opportunity.json @@ -0,0 +1,1470 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Opportunity ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account ID", + "name": "AccountId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Account" + ], + "relationshipName": "Account", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Private", + "name": "IsPrivate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Name", + "name": "Name", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": false, + "groupable": false, + "inlineHelpText": null, + "label": "Description", + "name": "Description", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Stage", + "name": "StageName", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Prospecting", + "validFor": null, + "value": "Prospecting" + }, + { + "active": true, + "defaultValue": false, + "label": "Qualification", + "validFor": null, + "value": "Qualification" + }, + { + "active": true, + "defaultValue": false, + "label": "Needs Analysis", + "validFor": null, + "value": "Needs Analysis" + }, + { + "active": true, + "defaultValue": false, + "label": "Value Proposition", + "validFor": null, + "value": "Value Proposition" + }, + { + "active": true, + "defaultValue": false, + "label": "Id. Decision Makers", + "validFor": null, + "value": "Id. Decision Makers" + }, + { + "active": true, + "defaultValue": false, + "label": "Perception Analysis", + "validFor": null, + "value": "Perception Analysis" + }, + { + "active": true, + "defaultValue": false, + "label": "Proposal/Price Quote", + "validFor": null, + "value": "Proposal/Price Quote" + }, + { + "active": true, + "defaultValue": false, + "label": "Negotiation/Review", + "validFor": null, + "value": "Negotiation/Review" + }, + { + "active": true, + "defaultValue": false, + "label": "Closed Won", + "validFor": null, + "value": "Closed Won" + }, + { + "active": true, + "defaultValue": false, + "label": "Closed Lost", + "validFor": null, + "value": "Closed Lost" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Amount", + "name": "Amount", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "currency" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Probability (%)", + "name": "Probability", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "percent" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Expected Amount", + "name": "ExpectedRevenue", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "currency" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Quantity", + "name": "TotalOpportunityQuantity", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Close Date", + "name": "CloseDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Opportunity Type", + "name": "Type", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Existing Customer - Upgrade", + "validFor": null, + "value": "Existing Customer - Upgrade" + }, + { + "active": true, + "defaultValue": false, + "label": "Existing Customer - Replacement", + "validFor": null, + "value": "Existing Customer - Replacement" + }, + { + "active": true, + "defaultValue": false, + "label": "Existing Customer - Downgrade", + "validFor": null, + "value": "Existing Customer - Downgrade" + }, + { + "active": true, + "defaultValue": false, + "label": "New Customer", + "validFor": null, + "value": "New Customer" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Next Step", + "name": "NextStep", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Lead Source", + "name": "LeadSource", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Web", + "validFor": null, + "value": "Web" + }, + { + "active": true, + "defaultValue": false, + "label": "Phone Inquiry", + "validFor": null, + "value": "Phone Inquiry" + }, + { + "active": true, + "defaultValue": false, + "label": "Partner Referral", + "validFor": null, + "value": "Partner Referral" + }, + { + "active": true, + "defaultValue": false, + "label": "Purchased List", + "validFor": null, + "value": "Purchased List" + }, + { + "active": true, + "defaultValue": false, + "label": "Other", + "validFor": null, + "value": "Other" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Closed", + "name": "IsClosed", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Won", + "name": "IsWon", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Forecast Category", + "name": "ForecastCategory", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Omitted", + "validFor": null, + "value": "Omitted" + }, + { + "active": true, + "defaultValue": false, + "label": "Pipeline", + "validFor": null, + "value": "Pipeline" + }, + { + "active": true, + "defaultValue": false, + "label": "Best Case", + "validFor": null, + "value": "BestCase" + }, + { + "active": true, + "defaultValue": false, + "label": "Most Likely", + "validFor": null, + "value": "MostLikely" + }, + { + "active": true, + "defaultValue": false, + "label": "Commit", + "validFor": null, + "value": "Forecast" + }, + { + "active": true, + "defaultValue": false, + "label": "Closed", + "validFor": null, + "value": "Closed" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Forecast Category", + "name": "ForecastCategoryName", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Omitted", + "validFor": null, + "value": "Omitted" + }, + { + "active": true, + "defaultValue": false, + "label": "Pipeline", + "validFor": null, + "value": "Pipeline" + }, + { + "active": true, + "defaultValue": false, + "label": "Best Case", + "validFor": null, + "value": "Best Case" + }, + { + "active": true, + "defaultValue": false, + "label": "Commit", + "validFor": null, + "value": "Commit" + }, + { + "active": true, + "defaultValue": false, + "label": "Closed", + "validFor": null, + "value": "Closed" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Campaign ID", + "name": "CampaignId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Campaign" + ], + "relationshipName": "Campaign", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Has Line Item", + "name": "HasOpportunityLineItem", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Price Book ID", + "name": "Pricebook2Id", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Pricebook2" + ], + "relationshipName": "Pricebook2", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Owner ID", + "name": "OwnerId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "Owner", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Activity", + "name": "LastActivityDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Push Count", + "name": "PushCount", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "int" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Stage Change Date", + "name": "LastStageChangeDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Fiscal Quarter", + "name": "FiscalQuarter", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "int" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Fiscal Year", + "name": "FiscalYear", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "int" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Fiscal Period", + "name": "Fiscal", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Contact ID", + "name": "ContactId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Contact" + ], + "relationshipName": null, + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Viewed Date", + "name": "LastViewedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Referenced Date", + "name": "LastReferencedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": false, + "groupable": true, + "inlineHelpText": null, + "label": "Has Open Activity", + "name": "HasOpenActivity", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": false, + "groupable": true, + "inlineHelpText": null, + "label": "Has Overdue Task", + "name": "HasOverdueTask", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Opportunity History ID", + "name": "LastAmountChangedHistoryId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "OpportunityHistory" + ], + "relationshipName": "LastAmountChangedHistory", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Opportunity History ID", + "name": "LastCloseDateChangedHistoryId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "OpportunityHistory" + ], + "relationshipName": "LastCloseDateChangedHistory", + "sortable": true, + "type": "reference" + } + ], + "label": "Opportunity", + "childRelationships": [ + { + "cascadeDelete": true, + "childSObject": "AIInsightValue", + "deprecatedAndHidden": false, + "field": "SobjectLookupValueId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AIRecordInsight", + "deprecatedAndHidden": false, + "field": "TargetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AccountPartner", + "deprecatedAndHidden": false, + "field": "OpportunityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AccountPartners", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ActivityHistory", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ActivityHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AttachedContentDocument", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AttachedContentDocuments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Attachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Attachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CollaborationGroupRecord", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordAssociatedGroups", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CombinedAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CombinedAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactRequest", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContactRequests", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDistribution", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDocumentLink", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContentDocumentLinks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentLinkChangeEvent", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessage", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Emails", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessageChangeEvent", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitySubscription", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FeedSubscriptionsForEntity", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Event", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Events", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventChangeEvent", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelationChangeEvent", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationWorkItem", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Lead", + "deprecatedAndHidden": false, + "field": "ConvertedOpportunityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadChangeEvent", + "deprecatedAndHidden": false, + "field": "ConvertedOpportunityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingSession", + "deprecatedAndHidden": false, + "field": "OpportunityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "MessagingSessions", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Note", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Notes", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "NoteAndAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "NotesAndAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpenActivity", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpenActivities", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpportunityCompetitor", + "deprecatedAndHidden": false, + "field": "OpportunityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpportunityCompetitors", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpportunityContactRole", + "deprecatedAndHidden": false, + "field": "OpportunityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpportunityContactRoles", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityContactRoleChangeEvent", + "deprecatedAndHidden": false, + "field": "OpportunityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpportunityFeed", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Feeds", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpportunityFieldHistory", + "deprecatedAndHidden": false, + "field": "OpportunityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Histories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpportunityHistory", + "deprecatedAndHidden": false, + "field": "OpportunityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpportunityHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpportunityLineItem", + "deprecatedAndHidden": false, + "field": "OpportunityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpportunityLineItems", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpportunityPartner", + "deprecatedAndHidden": false, + "field": "OpportunityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpportunityPartnersFrom", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpportunityShare", + "deprecatedAndHidden": false, + "field": "OpportunityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Shares", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OutgoingEmail", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Partner", + "deprecatedAndHidden": false, + "field": "OpportunityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Partners", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstance", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessInstances", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceHistory", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessSteps", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "RecordAction", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActionHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ServiceAppointment", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ServiceAppointments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentChangeEvent", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Swarm", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Swarms", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "SwarmMember", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "SwarmMembers", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Task", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Tasks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskChangeEvent", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "TopicAssignment", + "deprecatedAndHidden": false, + "field": "EntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "TopicAssignments", + "restrictedDelete": false + } + ], + "custom": false, + "name": "Opportunity", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Order.json b/.sfdx/tools/soqlMetadata/standardObjects/Order.json new file mode 100644 index 0000000..8b97e1d --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Order.json @@ -0,0 +1,1646 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Order ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Owner ID", + "name": "OwnerId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "Group", + "User" + ], + "relationshipName": "Owner", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Contract ID", + "name": "ContractId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Contract" + ], + "relationshipName": "Contract", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account ID", + "name": "AccountId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Account" + ], + "relationshipName": "Account", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Price Book ID", + "name": "Pricebook2Id", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Pricebook2" + ], + "relationshipName": "Pricebook2", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Order ID", + "name": "OriginalOrderId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Order" + ], + "relationshipName": "OriginalOrder", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Order Start Date", + "name": "EffectiveDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Order End Date", + "name": "EndDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Reduction Order", + "name": "IsReductionOrder", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Status", + "name": "Status", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Draft", + "validFor": null, + "value": "Draft" + }, + { + "active": true, + "defaultValue": false, + "label": "Activated", + "validFor": null, + "value": "Activated" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": false, + "groupable": false, + "inlineHelpText": null, + "label": "Description", + "name": "Description", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Customer Authorized By ID", + "name": "CustomerAuthorizedById", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Contact" + ], + "relationshipName": "CustomerAuthorizedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Customer Authorized Date", + "name": "CustomerAuthorizedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Company Authorized By ID", + "name": "CompanyAuthorizedById", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CompanyAuthorizedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Company Authorized Date", + "name": "CompanyAuthorizedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Order Type", + "name": "Type", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing Street", + "name": "BillingStreet", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing City", + "name": "BillingCity", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing State/Province", + "name": "BillingState", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing Zip/Postal Code", + "name": "BillingPostalCode", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing Country", + "name": "BillingCountry", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Billing Latitude", + "name": "BillingLatitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Billing Longitude", + "name": "BillingLongitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Billing Geocode Accuracy", + "name": "BillingGeocodeAccuracy", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Address", + "validFor": null, + "value": "Address" + }, + { + "active": true, + "defaultValue": false, + "label": "NearAddress", + "validFor": null, + "value": "NearAddress" + }, + { + "active": true, + "defaultValue": false, + "label": "Block", + "validFor": null, + "value": "Block" + }, + { + "active": true, + "defaultValue": false, + "label": "Street", + "validFor": null, + "value": "Street" + }, + { + "active": true, + "defaultValue": false, + "label": "ExtendedZip", + "validFor": null, + "value": "ExtendedZip" + }, + { + "active": true, + "defaultValue": false, + "label": "Zip", + "validFor": null, + "value": "Zip" + }, + { + "active": true, + "defaultValue": false, + "label": "Neighborhood", + "validFor": null, + "value": "Neighborhood" + }, + { + "active": true, + "defaultValue": false, + "label": "City", + "validFor": null, + "value": "City" + }, + { + "active": true, + "defaultValue": false, + "label": "County", + "validFor": null, + "value": "County" + }, + { + "active": true, + "defaultValue": false, + "label": "State", + "validFor": null, + "value": "State" + }, + { + "active": true, + "defaultValue": false, + "label": "Unknown", + "validFor": null, + "value": "Unknown" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Billing Address", + "name": "BillingAddress", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "address" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Shipping Street", + "name": "ShippingStreet", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Shipping City", + "name": "ShippingCity", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Shipping State/Province", + "name": "ShippingState", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Shipping Zip/Postal Code", + "name": "ShippingPostalCode", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Shipping Country", + "name": "ShippingCountry", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Shipping Latitude", + "name": "ShippingLatitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Shipping Longitude", + "name": "ShippingLongitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Shipping Geocode Accuracy", + "name": "ShippingGeocodeAccuracy", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Address", + "validFor": null, + "value": "Address" + }, + { + "active": true, + "defaultValue": false, + "label": "NearAddress", + "validFor": null, + "value": "NearAddress" + }, + { + "active": true, + "defaultValue": false, + "label": "Block", + "validFor": null, + "value": "Block" + }, + { + "active": true, + "defaultValue": false, + "label": "Street", + "validFor": null, + "value": "Street" + }, + { + "active": true, + "defaultValue": false, + "label": "ExtendedZip", + "validFor": null, + "value": "ExtendedZip" + }, + { + "active": true, + "defaultValue": false, + "label": "Zip", + "validFor": null, + "value": "Zip" + }, + { + "active": true, + "defaultValue": false, + "label": "Neighborhood", + "validFor": null, + "value": "Neighborhood" + }, + { + "active": true, + "defaultValue": false, + "label": "City", + "validFor": null, + "value": "City" + }, + { + "active": true, + "defaultValue": false, + "label": "County", + "validFor": null, + "value": "County" + }, + { + "active": true, + "defaultValue": false, + "label": "State", + "validFor": null, + "value": "State" + }, + { + "active": true, + "defaultValue": false, + "label": "Unknown", + "validFor": null, + "value": "Unknown" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Shipping Address", + "name": "ShippingAddress", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "address" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Order Name", + "name": "Name", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "PO Date", + "name": "PoDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "PO Number", + "name": "PoNumber", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Order Reference Number", + "name": "OrderReferenceNumber", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Bill To Contact ID", + "name": "BillToContactId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Contact" + ], + "relationshipName": "BillToContact", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Ship To Contact ID", + "name": "ShipToContactId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Contact" + ], + "relationshipName": "ShipToContact", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Activated Date", + "name": "ActivatedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Activated By ID", + "name": "ActivatedById", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "ActivatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Status Category", + "name": "StatusCode", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Draft", + "validFor": null, + "value": "Draft" + }, + { + "active": true, + "defaultValue": false, + "label": "Activated", + "validFor": null, + "value": "Activated" + }, + { + "active": true, + "defaultValue": false, + "label": "Cancelled", + "validFor": null, + "value": "Canceled" + }, + { + "active": true, + "defaultValue": false, + "label": "Expired", + "validFor": null, + "value": "Expired" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Order Number", + "name": "OrderNumber", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Order Amount", + "name": "TotalAmount", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "currency" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Viewed Date", + "name": "LastViewedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Referenced Date", + "name": "LastReferencedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + } + ], + "label": "Order", + "childRelationships": [ + { + "cascadeDelete": true, + "childSObject": "AIInsightValue", + "deprecatedAndHidden": false, + "field": "SobjectLookupValueId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AIRecordInsight", + "deprecatedAndHidden": false, + "field": "TargetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ActivityHistory", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ActivityHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AppUsageAssignment", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AppUsageAssignments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AttachedContentDocument", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AttachedContentDocuments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Attachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Attachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CombinedAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CombinedAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDocumentLink", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContentDocumentLinks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentLinkChangeEvent", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemo", + "deprecatedAndHidden": false, + "field": "ReferenceEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CreditMemos", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "DigitalSignature", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "DigitalSignatures", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DigitalSignatureChangeEvent", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessage", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Emails", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessageChangeEvent", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitySubscription", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FeedSubscriptionsForEntity", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Event", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Events", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventChangeEvent", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelationChangeEvent", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationWorkItem", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Invoice", + "deprecatedAndHidden": false, + "field": "ReferenceEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Invoices", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Note", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Notes", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "NoteAndAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "NotesAndAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpenActivity", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpenActivities", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Order", + "deprecatedAndHidden": false, + "field": "OriginalOrderId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Orders", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "OrderChangeEvent", + "deprecatedAndHidden": false, + "field": "OriginalOrderId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OrderFeed", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Feeds", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OrderHistory", + "deprecatedAndHidden": false, + "field": "OrderId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Histories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OrderItem", + "deprecatedAndHidden": false, + "field": "OrderId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OrderItems", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderItemChangeEvent", + "deprecatedAndHidden": false, + "field": "OrderId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OrderShare", + "deprecatedAndHidden": false, + "field": "OrderId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Shares", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OutgoingEmail", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentGroup", + "deprecatedAndHidden": false, + "field": "SourceObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "PaymentGroups", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessException", + "deprecatedAndHidden": false, + "field": "AttachedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessExceptions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessExceptionEvent", + "deprecatedAndHidden": false, + "field": "AttachedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstance", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessInstances", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceHistory", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessSteps", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "RecordAction", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActionHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrder", + "deprecatedAndHidden": false, + "field": "OrderId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ReturnOrders", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "OrderId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Task", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Tasks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskChangeEvent", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "TopicAssignment", + "deprecatedAndHidden": false, + "field": "EntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "TopicAssignments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItem", + "deprecatedAndHidden": false, + "field": "OrderId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "WorkOrderLineItems", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "OrderId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + } + ], + "custom": false, + "name": "Order", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Pricebook2.json b/.sfdx/tools/soqlMetadata/standardObjects/Pricebook2.json new file mode 100644 index 0000000..aa6e1f5 --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Pricebook2.json @@ -0,0 +1,482 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Price Book ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Price Book Name", + "name": "Name", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Viewed Date", + "name": "LastViewedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Referenced Date", + "name": "LastReferencedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Active", + "name": "IsActive", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Archived", + "name": "IsArchived", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Description", + "name": "Description", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Is Standard Price Book", + "name": "IsStandard", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + } + ], + "label": "Price Book", + "childRelationships": [ + { + "cascadeDelete": true, + "childSObject": "AIInsightValue", + "deprecatedAndHidden": false, + "field": "SobjectLookupValueId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AIRecordInsight", + "deprecatedAndHidden": false, + "field": "TargetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetWarranty", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AssetWarrantyPricebooks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetWarrantyChangeEvent", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Contract", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Contracts", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "ContractChangeEvent", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Opportunity", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Opportunities", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityChangeEvent", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Order", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Orders", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "OrderChangeEvent", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Pricebook2History", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Histories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "PricebookEntry", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "PricebookEntries", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PricebookEntryChangeEvent", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "RecordAction", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActionHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContract", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ServiceContracts", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContractChangeEvent", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WarrantyTerm", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Pricebook2", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WarrantyTermChangeEvent", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrder", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "WorkOrders", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "Pricebook2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + } + ], + "custom": false, + "name": "Pricebook2", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/PricebookEntry.json b/.sfdx/tools/soqlMetadata/standardObjects/PricebookEntry.json new file mode 100644 index 0000000..4d80595 --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/PricebookEntry.json @@ -0,0 +1,433 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Price Book Entry ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Product Name", + "name": "Name", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Price Book ID", + "name": "Pricebook2Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "Pricebook2" + ], + "relationshipName": "Pricebook2", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Product ID", + "name": "Product2Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "Product2" + ], + "relationshipName": "Product2", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "List Price", + "name": "UnitPrice", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "currency" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Active", + "name": "IsActive", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Use Standard Price", + "name": "UseStandardPrice", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Product Code", + "name": "ProductCode", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Archived", + "name": "IsArchived", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + } + ], + "label": "Price Book Entry", + "childRelationships": [ + { + "cascadeDelete": true, + "childSObject": "AIInsightValue", + "deprecatedAndHidden": false, + "field": "SobjectLookupValueId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AIRecordInsight", + "deprecatedAndHidden": false, + "field": "TargetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineItem", + "deprecatedAndHidden": false, + "field": "PricebookEntryId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContractLineItems", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "PricebookEntryId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityLineItem", + "deprecatedAndHidden": false, + "field": "PricebookEntryId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpportunityLineItems", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "OrderItem", + "deprecatedAndHidden": false, + "field": "PricebookEntryId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OrderItems", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "OrderItemChangeEvent", + "deprecatedAndHidden": false, + "field": "PricebookEntryId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "PricebookEntryHistory", + "deprecatedAndHidden": false, + "field": "PricebookEntryId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Histories", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumed", + "deprecatedAndHidden": false, + "field": "PricebookEntryId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductsConsumed", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumedChangeEvent", + "deprecatedAndHidden": false, + "field": "PricebookEntryId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "RecordAction", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActionHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItem", + "deprecatedAndHidden": false, + "field": "PricebookEntryId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "WorkOrderLineItems", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "PricebookEntryId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + } + ], + "custom": false, + "name": "PricebookEntry", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Product2.json b/.sfdx/tools/soqlMetadata/standardObjects/Product2.json new file mode 100644 index 0000000..356a6bd --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Product2.json @@ -0,0 +1,1039 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Product ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Product Name", + "name": "Name", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Product Code", + "name": "ProductCode", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Product Description", + "name": "Description", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Active", + "name": "IsActive", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Product Family", + "name": "Family", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "None", + "validFor": null, + "value": "None" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Serialized", + "name": "IsSerialized", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "External Data Source ID", + "name": "ExternalDataSourceId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "ExternalDataSource" + ], + "relationshipName": null, + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "External ID", + "name": "ExternalId", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Display URL", + "name": "DisplayUrl", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "url" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Quantity Unit Of Measure", + "name": "QuantityUnitOfMeasure", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Each", + "validFor": null, + "value": "Each" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Archived", + "name": "IsArchived", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Viewed Date", + "name": "LastViewedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Referenced Date", + "name": "LastReferencedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Product SKU", + "name": "StockKeepingUnit", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + } + ], + "label": "Product", + "childRelationships": [ + { + "cascadeDelete": true, + "childSObject": "AIInsightValue", + "deprecatedAndHidden": false, + "field": "SobjectLookupValueId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AIRecordInsight", + "deprecatedAndHidden": false, + "field": "TargetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ActivityHistory", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ActivityHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Asset", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Assets", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "AssetChangeEvent", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AttachedContentDocument", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AttachedContentDocuments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Attachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Attachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CombinedAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CombinedAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDocumentLink", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContentDocumentLinks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentLinkChangeEvent", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineItem", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContractLineItems", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoLine", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CreditMemoLines", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessage", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Emails", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessageChangeEvent", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitySubscription", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FeedSubscriptionsForEntity", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Event", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Events", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventChangeEvent", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelationChangeEvent", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationWorkItem", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "InvoiceLine", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "InvoiceLines", + "restrictedDelete": true + }, + { + "cascadeDelete": true, + "childSObject": "Note", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Notes", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "NoteAndAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "NotesAndAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpenActivity", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OpenActivities", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityLineItem", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderItem", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "OrderItemChangeEvent", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OutgoingEmail", + "deprecatedAndHidden": false, + "field": "RelatedToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "PricebookEntry", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "PricebookEntries", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "PricebookEntryChangeEvent", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstance", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessInstances", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceHistory", + "deprecatedAndHidden": false, + "field": "TargetObjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProcessSteps", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Product2Feed", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Feeds", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Product2History", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Histories", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumed", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductsConsumed", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProductConsumptionSchedule", + "deprecatedAndHidden": false, + "field": "ProductId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductConsumptionSchedules", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductEntitlementTemplate", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProductItem", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductItems", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItemChangeEvent", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProductRequestLineItem", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductRequestLineItems", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProductRequired", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductsRequired", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequiredChangeEvent", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaign", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductServiceCampaignProducts", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignItem", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductServiceCampaignItems", + "restrictedDelete": true + }, + { + "cascadeDelete": true, + "childSObject": "ProductTransfer", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductTransfers", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransferChangeEvent", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductWarrantyTerm", + "deprecatedAndHidden": false, + "field": "CoveredProductId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ProductWarrantyTermProducts", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "RecordAction", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActionHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ReturnOrderLineItem", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ReturnOrderLineItems", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "SerializedProduct", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "SerializedProducts", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShipmentItem", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ShipmentItems", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Task", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Tasks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskChangeEvent", + "deprecatedAndHidden": false, + "field": "WhatId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItem", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "WorkOrderLineItems", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRule", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "WorkPlanSelectionRules", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRuleChangeEvent", + "deprecatedAndHidden": false, + "field": "Product2Id", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + } + ], + "custom": false, + "name": "Product2", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/RecordType.json b/.sfdx/tools/soqlMetadata/standardObjects/RecordType.json new file mode 100644 index 0000000..8ffc4bf --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/RecordType.json @@ -0,0 +1,2576 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Record Type ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Name", + "name": "Name", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Record Type Name", + "name": "DeveloperName", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Namespace Prefix", + "name": "NamespacePrefix", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Description", + "name": "Description", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Business Process ID", + "name": "BusinessProcessId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "BusinessProcess" + ], + "relationshipName": null, + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "SObject Type Name", + "name": "SobjectType", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Account" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ActionCadenceAsyncJob" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Address" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AIError" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AIInsightAction" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AIInsightFeedback" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AIInsightReason" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AIInsightReasonMLModelFactor" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AIInsightSource" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AIInsightValue" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AIMetric" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AIRecordInsight" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AIState" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AlternativePaymentMethod" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Announcement" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ApiAnomalyEventStore" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AppAnalyticsQueryRequest" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AppointmentTopicTimeSlot" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ApptBundleAggrDurDnscale" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ApptBundleAggrPolicy" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ApptBundleConfig" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ApptBundlePolicy" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ApptBundlePolicySvcTerr" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ApptBundlePropagatePolicy" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ApptBundleRestrictPolicy" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ApptBundleSortPolicy" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Asset" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AssetAction" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AssetActionSource" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AssetDowntimePeriod" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AssetRelationship" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AssetStatePeriod" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AssetWarranty" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AssistantProgress" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AssistantStepProgress" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AssociatedLocation" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AsyncOperationLog" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AttributeDefinition" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AttributePicklist" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AttributePicklistValue" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AuthorizationForm" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AuthorizationFormConsent" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AuthorizationFormDataUse" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "AuthorizationFormText" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Broker__c" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "BusinessBrand" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CalendarModel" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CalendarView" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Campaign" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CampaignMember" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CardPaymentMethod" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Case" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CollabDocumentMetric" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CollabDocumentMetricRecord" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CollaborationGroup" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CollaborationGroupRank" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CollaborationGroupRecord" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CollabTemplateMetric" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CollabTemplateMetricRecord" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CollabUserEngagementMetric" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CollabUserEngmtRecordLink" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CommerceSearchDocChangelist" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CommerceSearchIndexInfo" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CommerceSearchIndexLog" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CommerceSearchIndexPayload" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CommerceSearchResultsRule" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CommSubscription" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CommSubscriptionChannelType" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CommSubscriptionConsent" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CommSubscriptionTiming" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ComponentResponseCache" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ConsumptionRate" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ConsumptionSchedule" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Contact" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ContactPointAddress" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ContactPointConsent" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ContactPointEmail" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ContactPointPhone" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ContactPointTypeConsent" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ContactRequest" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ContentBuilderChannel" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ContentDocumentListViewMapping" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ContentFolderDistribution" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ContentVersion" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Contract" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ContractLineItem" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ContractLineOutcome" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ContractLineOutcomeData" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ConvCoachingRecommendation" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ConvMsgSessionAuthResult" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CredentialStuffingEventStore" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CreditMemo" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CreditMemoInvApplication" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "CreditMemoLine" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Customer" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "DataAssetUsageTrackingInfo" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "DataUseLegalBasis" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "DataUsePurpose" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "DigitalWallet" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "DuplicateErrorLog" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "DuplicateRecordItem" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "DuplicateRecordSet" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "EmailThreadingToken" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "EngagementChannelType" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Entitlement" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "EntitlementContact" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "EntityMilestone" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Event" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "EventRelayFeedback" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Expense" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ExpenseReport" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ExpenseReportEntry" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ExpressionFilter" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ExpressionFilterCriteria" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "FileInspectionResult" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "FileSearchActivity" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "FinanceBalanceSnapshot" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "FinanceTransaction" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "FlowExecutionEventMetric" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "FlowRecordRelation" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "FlowStageRelation" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "FlowTestResult" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Goal" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "GoalLink" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "HawkingTenantProvStatus" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Idea" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Image" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Individual" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Invoice" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "InvoiceLine" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "IotActivityLog" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "JobProfile" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Lead" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "LearningAssignment" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "LearningAssignmentProgress" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "LearningItem" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "LearningLink" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "LearningLinkProgress" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "LegalEntity" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ListEmail" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ListEmailIndividualRecipient" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ListEmailRecipientSource" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ListEmailSentResult" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Location" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "LocationGroup" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "LocationGroupAssignment" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "LogLicenseUpdates" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Macro" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MacroAction" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MacroInstruction" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MacroUsage" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MaintenanceAsset" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MaintenancePlan" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MaintenanceWorkRule" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MalformedTemplateTracker" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MessagingEndUser" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MessagingSession" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Metric" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MetricDataLink" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MlAppMigrationStatus" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MlFeatureValueMetric" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MLMigration" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MLModel" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MLModelFactor" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MLModelFactorComponent" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MLModelMetric" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "MobileHomeConfiguration" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Opportunity" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "OrchestrationContextRuntimeEvent" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Order" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "OrgDeleteRequest" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "OrgMetric" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "OrgMetricScanResult" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "OrgMetricScanSummary" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "PageContentAssignment" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "PartyConsent" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Payment" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "PaymentAuthAdjustment" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "PaymentAuthorization" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "PaymentGateway" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "PaymentGatewayLog" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "PaymentGroup" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "PaymentLineInvoice" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "PersonalizationResource" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Pricebook2" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ProcessException" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Product2" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ProductConsumed" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ProductConsumptionSchedule" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ProductItem" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ProductRequest" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ProductRequestLineItem" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ProductRequired" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ProductServiceCampaign" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ProductServiceCampaignItem" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ProductTransfer" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ProductWarrantyTerm" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ProfileSkill" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ProfileSkillEndorsement" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ProfileSkillUser" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "PromptAction" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "PromptError" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Property__c" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "QuickText" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "QuickTextUsage" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Recommendation" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "RecommendationReaction" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "RecommendationResponse" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "RecordAction" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "RecordMergeHistory" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "RecordOrigin" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "RecordsetFltrCritMonitor" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Refund" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "RefundLinePayment" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ReleaseUpdateStep" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ReleaseUpdateStepLog" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ReportAnomalyEventStore" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ReportResultBlob" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ResourceAbsence" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ReturnOrder" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ReturnOrderLineItem" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SchedulingConstraint" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Scorecard" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ScorecardAssociation" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ScorecardMetric" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SearchActivity" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SearchPromotionRule" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Seller" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SerializedProduct" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SerializedProductTransaction" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ServiceAppointment" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ServiceContract" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ServiceCrew" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ServiceCrewMember" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ServiceResource" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ServiceResourcePreference" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ServiceSetupProvisioning" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ServiceTerritory" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ServiceTerritoryLocation" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SessionHijackingEventStore" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SetupAssistantAnswer" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SetupAssistantProgress" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SetupAssistantStep" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SetupFlowProgress" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Shift" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ShiftSchedulingOperation" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ShiftTemplate" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Shipment" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "ShipmentItem" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SiteUserViewMode" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SoftwareProduct" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Solution" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "StrategyMonthlyStats" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "SyncTransactionLog" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "Task" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityAlertRuleSelectedTenant" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityApiAnomaly" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityConnectedApp" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityCredentialStuffing" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityEncryptionPolicy" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityFeature" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityHealthCheckBaselineTrend" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityHealthCheckDetail" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityHealthCheckTrend" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityLogin" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityMetricDetail" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityMetricDetailLink" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityMobilePolicyTrend" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityMonitorMetric" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityNotification" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityNotificationRule" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityPackage" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityPolicy" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityPolicyChangeLog" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityPolicyDeployment" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityPolicySelectedTenant" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityReportAnomaly" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecuritySessionHijacking" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityTenantChangeLog" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityTenantInfo" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityTransactionPolicyTrend" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityTrustedIpRangeTrend" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityUserActivity" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityUserPerm" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TenantSecurityWebsite" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TimeSheet" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TimeSheetEntry" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TransactionSecurityAction" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TransactionSecurityActionEvent" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "TravelMode" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "UnitOfMeasure" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "UserAssistantSummary" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "UserEmailPreferredPerson" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "UserMetrics" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "UserNavItem" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "UserQuestionnaireAnswer" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "UserQuestionnaireSummary" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WarrantyTerm" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WebCartDocument" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkAccess" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkBadge" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkBadgeDefinition" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkCoaching" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkFeedback" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkFeedbackQuestion" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkFeedbackQuestionSet" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkFeedbackRequest" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkFeedbackTemplate" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkOrder" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkOrderLineItem" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkPerformanceCycle" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkPlan" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkPlanSelectionRule" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkPlanTemplate" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkPlanTemplateEntry" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkReward" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkRewardFund" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkRewardFundType" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkStep" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkStepTemplate" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkThanks" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkType" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkTypeGroup" + }, + { + "active": true, + "defaultValue": false, + "label": null, + "validFor": null, + "value": "WorkTypeGroupMember" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Active", + "name": "IsActive", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + } + ], + "label": "Record Type", + "childRelationships": [ + { + "cascadeDelete": false, + "childSObject": "Campaign", + "deprecatedAndHidden": false, + "field": "CampaignMemberRecordTypeId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignChangeEvent", + "deprecatedAndHidden": false, + "field": "CampaignMemberRecordTypeId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentWorkspace", + "deprecatedAndHidden": false, + "field": "DefaultRecordTypeId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "GtwyProvPaymentMethodType", + "deprecatedAndHidden": false, + "field": "RecordTypeId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Name", + "deprecatedAndHidden": false, + "field": "RecordTypeId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PromptVersion", + "deprecatedAndHidden": false, + "field": "TargetRecordTypeId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "RecentlyViewed", + "deprecatedAndHidden": false, + "field": "RecordTypeId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + } + ], + "custom": false, + "name": "RecordType", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Report.json b/.sfdx/tools/soqlMetadata/standardObjects/Report.json new file mode 100644 index 0000000..131b3e0 --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Report.json @@ -0,0 +1,486 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Report ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Owner ID", + "name": "OwnerId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "Folder", + "Organization", + "User" + ], + "relationshipName": "Owner", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Folder Name", + "name": "FolderName", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Report Name", + "name": "Name", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Description", + "name": "Description", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Report Unique Name", + "name": "DeveloperName", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Namespace Prefix", + "name": "NamespacePrefix", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Run", + "name": "LastRunDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": "Tabular", + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Format", + "name": "Format", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Joined", + "validFor": null, + "value": "MultiBlock" + }, + { + "active": true, + "defaultValue": false, + "label": "Matrix", + "validFor": null, + "value": "Matrix" + }, + { + "active": true, + "defaultValue": false, + "label": "Summary", + "validFor": null, + "value": "Summary" + }, + { + "active": true, + "defaultValue": true, + "label": "Tabular", + "validFor": null, + "value": "Tabular" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Viewed Date", + "name": "LastViewedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Referenced Date", + "name": "LastReferencedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + } + ], + "label": "Report", + "childRelationships": [ + { + "cascadeDelete": true, + "childSObject": "AttachedContentDocument", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AttachedContentDocuments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CombinedAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CombinedAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDocumentLink", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContentDocumentLinks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentLinkChangeEvent", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DashboardComponent", + "deprecatedAndHidden": false, + "field": "CustomReportId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitySubscription", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FeedSubscriptionsForEntity", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReportEvent", + "deprecatedAndHidden": false, + "field": "ReportId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ReportFeed", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Feeds", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ScorecardMetric", + "deprecatedAndHidden": false, + "field": "ReportId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ScorecardMetrics", + "restrictedDelete": false + } + ], + "custom": false, + "name": "Report", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/Task.json b/.sfdx/tools/soqlMetadata/standardObjects/Task.json new file mode 100644 index 0000000..88f5092 --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/Task.json @@ -0,0 +1,4296 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Activity ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Name ID", + "name": "WhoId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Contact", + "Lead" + ], + "relationshipName": "Who", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Related To ID", + "name": "WhatId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Account", + "ApptBundleAggrDurDnscale", + "ApptBundleAggrPolicy", + "ApptBundleConfig", + "ApptBundlePolicy", + "ApptBundlePolicySvcTerr", + "ApptBundlePropagatePolicy", + "ApptBundleRestrictPolicy", + "ApptBundleSortPolicy", + "Asset", + "AssetRelationship", + "AssetWarranty", + "AssignedResource", + "AttributeDefinition", + "AttributePicklist", + "AttributePicklistValue", + "Campaign", + "Case", + "CommSubscriptionConsent", + "ContactRequest", + "Contract", + "ContractLineItem", + "CreditMemo", + "Entitlement", + "Expense", + "ExpenseReport", + "ExpenseReportEntry", + "Image", + "Invoice", + "LegalEntity", + "ListEmail", + "Location", + "MaintenanceAsset", + "MaintenancePlan", + "OperatingHoursHoliday", + "Opportunity", + "Order", + "PartyConsent", + "ProcessException", + "Product2", + "ProductConsumed", + "ProductItem", + "ProductRequest", + "ProductRequestLineItem", + "ProductServiceCampaign", + "ProductServiceCampaignItem", + "ProductTransfer", + "Property__c", + "ResourceAbsence", + "ReturnOrder", + "ReturnOrderLineItem", + "ServiceAppointment", + "ServiceContract", + "ServiceCrew", + "ServiceCrewMember", + "ServiceResource", + "Shift", + "ShiftPattern", + "ShiftPatternEntry", + "Shipment", + "ShipmentItem", + "Solution", + "TimeSheet", + "TimeSheetEntry", + "TravelMode", + "WarrantyTerm", + "WorkOrder", + "WorkOrderLineItem", + "WorkPlan", + "WorkPlanSelectionRule", + "WorkPlanTemplate", + "WorkPlanTemplateEntry", + "WorkStep", + "WorkStepTemplate" + ], + "relationshipName": "What", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Subject", + "name": "Subject", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Call", + "validFor": null, + "value": "Call" + }, + { + "active": true, + "defaultValue": false, + "label": "Email", + "validFor": null, + "value": "Email" + }, + { + "active": true, + "defaultValue": false, + "label": "Send Letter", + "validFor": null, + "value": "Send Letter" + }, + { + "active": true, + "defaultValue": false, + "label": "Send Quote", + "validFor": null, + "value": "Send Quote" + }, + { + "active": true, + "defaultValue": false, + "label": "Other", + "validFor": null, + "value": "Other" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "combobox" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Due Date Only", + "name": "ActivityDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": "Not Started", + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Status", + "name": "Status", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": true, + "label": "Not Started", + "validFor": null, + "value": "Not Started" + }, + { + "active": true, + "defaultValue": false, + "label": "In Progress", + "validFor": null, + "value": "In Progress" + }, + { + "active": true, + "defaultValue": false, + "label": "Completed", + "validFor": null, + "value": "Completed" + }, + { + "active": true, + "defaultValue": false, + "label": "Waiting on someone else", + "validFor": null, + "value": "Waiting on someone else" + }, + { + "active": true, + "defaultValue": false, + "label": "Deferred", + "validFor": null, + "value": "Deferred" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": "Normal", + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Priority", + "name": "Priority", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "High", + "validFor": null, + "value": "High" + }, + { + "active": true, + "defaultValue": true, + "label": "Normal", + "validFor": null, + "value": "Normal" + }, + { + "active": true, + "defaultValue": false, + "label": "Low", + "validFor": null, + "value": "Low" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "High Priority", + "name": "IsHighPriority", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Assigned To ID", + "name": "OwnerId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "Group", + "User" + ], + "relationshipName": "Owner", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": false, + "groupable": false, + "inlineHelpText": null, + "label": "Description", + "name": "Description", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "textarea" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Deleted", + "name": "IsDeleted", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account ID", + "name": "AccountId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Account" + ], + "relationshipName": "Account", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Closed", + "name": "IsClosed", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Archived", + "name": "IsArchived", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Call Duration", + "name": "CallDurationInSeconds", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "int" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Call Type", + "name": "CallType", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Internal", + "validFor": null, + "value": "Internal" + }, + { + "active": true, + "defaultValue": false, + "label": "Inbound", + "validFor": null, + "value": "Inbound" + }, + { + "active": true, + "defaultValue": false, + "label": "Outbound", + "validFor": null, + "value": "Outbound" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Call Result", + "name": "CallDisposition", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Call Object Identifier", + "name": "CallObject", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Reminder Date/Time", + "name": "ReminderDateTime", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Reminder Set", + "name": "IsReminderSet", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Recurrence Activity ID", + "name": "RecurrenceActivityId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Task" + ], + "relationshipName": null, + "sortable": true, + "type": "reference" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Create Recurring Series of Tasks", + "name": "IsRecurrence", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Recurrence Start", + "name": "RecurrenceStartDateOnly", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Recurrence End", + "name": "RecurrenceEndDateOnly", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "date" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Recurrence Time Zone", + "name": "RecurrenceTimeZoneSidKey", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "(GMT+14:00) Line Islands Time (Pacific/Kiritimati)", + "validFor": null, + "value": "Pacific/Kiritimati" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+13:45) Chatham Daylight Time (Pacific/Chatham)", + "validFor": null, + "value": "Pacific/Chatham" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+13:00) New Zealand Daylight Time (Antarctica/McMurdo)", + "validFor": null, + "value": "Antarctica/McMurdo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+13:00) Apia Standard Time (Pacific/Apia)", + "validFor": null, + "value": "Pacific/Apia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+13:00) New Zealand Daylight Time (Pacific/Auckland)", + "validFor": null, + "value": "Pacific/Auckland" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+13:00) Phoenix Islands Time (Pacific/Enderbury)", + "validFor": null, + "value": "Pacific/Enderbury" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+13:00) Tokelau Time (Pacific/Fakaofo)", + "validFor": null, + "value": "Pacific/Fakaofo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+13:00) Tonga Standard Time (Pacific/Tongatapu)", + "validFor": null, + "value": "Pacific/Tongatapu" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Anadyr Standard Time (Asia/Anadyr)", + "validFor": null, + "value": "Asia/Anadyr" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Petropavlovsk-Kamchatski Standard Time (Asia/Kamchatka)", + "validFor": null, + "value": "Asia/Kamchatka" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Fiji Standard Time (Pacific/Fiji)", + "validFor": null, + "value": "Pacific/Fiji" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Tuvalu Time (Pacific/Funafuti)", + "validFor": null, + "value": "Pacific/Funafuti" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Marshall Islands Time (Pacific/Kwajalein)", + "validFor": null, + "value": "Pacific/Kwajalein" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Marshall Islands Time (Pacific/Majuro)", + "validFor": null, + "value": "Pacific/Majuro" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Nauru Time (Pacific/Nauru)", + "validFor": null, + "value": "Pacific/Nauru" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Gilbert Islands Time (Pacific/Tarawa)", + "validFor": null, + "value": "Pacific/Tarawa" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Wake Island Time (Pacific/Wake)", + "validFor": null, + "value": "Pacific/Wake" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Wallis & Futuna Time (Pacific/Wallis)", + "validFor": null, + "value": "Pacific/Wallis" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Casey Time (Antarctica/Casey)", + "validFor": null, + "value": "Antarctica/Casey" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Magadan Standard Time (Asia/Magadan)", + "validFor": null, + "value": "Asia/Magadan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Sakhalin Standard Time (Asia/Sakhalin)", + "validFor": null, + "value": "Asia/Sakhalin" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Magadan Standard Time (Asia/Srednekolymsk)", + "validFor": null, + "value": "Asia/Srednekolymsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Bougainville Standard Time (Pacific/Bougainville)", + "validFor": null, + "value": "Pacific/Bougainville" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Vanuatu Standard Time (Pacific/Efate)", + "validFor": null, + "value": "Pacific/Efate" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Solomon Islands Time (Pacific/Guadalcanal)", + "validFor": null, + "value": "Pacific/Guadalcanal" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Kosrae Time (Pacific/Kosrae)", + "validFor": null, + "value": "Pacific/Kosrae" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Norfolk Island Standard Time (Pacific/Norfolk)", + "validFor": null, + "value": "Pacific/Norfolk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) New Caledonia Standard Time (Pacific/Noumea)", + "validFor": null, + "value": "Pacific/Noumea" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Ponape Time (Pacific/Ponape)", + "validFor": null, + "value": "Pacific/Ponape" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:30) Lord Howe Standard Time (Australia/Lord_Howe)", + "validFor": null, + "value": "Australia/Lord_Howe" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Dumont-d’Urville Time (Antarctica/DumontDUrville)", + "validFor": null, + "value": "Antarctica/DumontDUrville" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Australian Eastern Standard Time (Antarctica/Macquarie)", + "validFor": null, + "value": "Antarctica/Macquarie" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Vladivostok Standard Time (Asia/Ust-Nera)", + "validFor": null, + "value": "Asia/Ust-Nera" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Vladivostok Standard Time (Asia/Vladivostok)", + "validFor": null, + "value": "Asia/Vladivostok" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Australian Eastern Standard Time (Australia/Brisbane)", + "validFor": null, + "value": "Australia/Brisbane" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Australian Eastern Standard Time (Australia/Currie)", + "validFor": null, + "value": "Australia/Currie" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Australian Eastern Standard Time (Australia/Hobart)", + "validFor": null, + "value": "Australia/Hobart" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Australian Eastern Standard Time (Australia/Lindeman)", + "validFor": null, + "value": "Australia/Lindeman" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Australian Eastern Standard Time (Australia/Melbourne)", + "validFor": null, + "value": "Australia/Melbourne" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Australian Eastern Standard Time (Australia/Sydney)", + "validFor": null, + "value": "Australia/Sydney" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Chamorro Standard Time (Pacific/Guam)", + "validFor": null, + "value": "Pacific/Guam" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Papua New Guinea Time (Pacific/Port_Moresby)", + "validFor": null, + "value": "Pacific/Port_Moresby" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Chamorro Standard Time (Pacific/Saipan)", + "validFor": null, + "value": "Pacific/Saipan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Chuuk Time (Pacific/Truk)", + "validFor": null, + "value": "Pacific/Truk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:30) Australian Central Standard Time (Australia/Adelaide)", + "validFor": null, + "value": "Australia/Adelaide" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:30) Australian Central Standard Time (Australia/Broken_Hill)", + "validFor": null, + "value": "Australia/Broken_Hill" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:30) Australian Central Standard Time (Australia/Darwin)", + "validFor": null, + "value": "Australia/Darwin" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) Yakutsk Standard Time (Asia/Chita)", + "validFor": null, + "value": "Asia/Chita" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) East Timor Time (Asia/Dili)", + "validFor": null, + "value": "Asia/Dili" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) Eastern Indonesia Time (Asia/Jayapura)", + "validFor": null, + "value": "Asia/Jayapura" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) Yakutsk Standard Time (Asia/Khandyga)", + "validFor": null, + "value": "Asia/Khandyga" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) Korean Standard Time (Asia/Seoul)", + "validFor": null, + "value": "Asia/Seoul" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) Japan Standard Time (Asia/Tokyo)", + "validFor": null, + "value": "Asia/Tokyo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) Yakutsk Standard Time (Asia/Yakutsk)", + "validFor": null, + "value": "Asia/Yakutsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) Palau Time (Pacific/Palau)", + "validFor": null, + "value": "Pacific/Palau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:45) Australian Central Western Standard Time (Australia/Eucla)", + "validFor": null, + "value": "Australia/Eucla" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Brunei Darussalam Time (Asia/Brunei)", + "validFor": null, + "value": "Asia/Brunei" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Ulaanbaatar Standard Time (Asia/Choibalsan)", + "validFor": null, + "value": "Asia/Choibalsan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Hong Kong Standard Time (Asia/Hong_Kong)", + "validFor": null, + "value": "Asia/Hong_Kong" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Irkutsk Standard Time (Asia/Irkutsk)", + "validFor": null, + "value": "Asia/Irkutsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Malaysia Time (Asia/Kuala_Lumpur)", + "validFor": null, + "value": "Asia/Kuala_Lumpur" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Malaysia Time (Asia/Kuching)", + "validFor": null, + "value": "Asia/Kuching" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) China Standard Time (Asia/Macau)", + "validFor": null, + "value": "Asia/Macau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Central Indonesia Time (Asia/Makassar)", + "validFor": null, + "value": "Asia/Makassar" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Philippine Standard Time (Asia/Manila)", + "validFor": null, + "value": "Asia/Manila" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) China Standard Time (Asia/Shanghai)", + "validFor": null, + "value": "Asia/Shanghai" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Singapore Standard Time (Asia/Singapore)", + "validFor": null, + "value": "Asia/Singapore" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Taipei Standard Time (Asia/Taipei)", + "validFor": null, + "value": "Asia/Taipei" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Ulaanbaatar Standard Time (Asia/Ulaanbaatar)", + "validFor": null, + "value": "Asia/Ulaanbaatar" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Australian Western Standard Time (Australia/Perth)", + "validFor": null, + "value": "Australia/Perth" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Davis Time (Antarctica/Davis)", + "validFor": null, + "value": "Antarctica/Davis" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Indochina Time (Asia/Bangkok)", + "validFor": null, + "value": "Asia/Bangkok" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Moscow Standard Time + 4 (Asia/Barnaul)", + "validFor": null, + "value": "Asia/Barnaul" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Indochina Time (Asia/Ho_Chi_Minh)", + "validFor": null, + "value": "Asia/Ho_Chi_Minh" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Hovd Standard Time (Asia/Hovd)", + "validFor": null, + "value": "Asia/Hovd" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Western Indonesia Time (Asia/Jakarta)", + "validFor": null, + "value": "Asia/Jakarta" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Krasnoyarsk Standard Time (Asia/Krasnoyarsk)", + "validFor": null, + "value": "Asia/Krasnoyarsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Krasnoyarsk Standard Time (Asia/Novokuznetsk)", + "validFor": null, + "value": "Asia/Novokuznetsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Novosibirsk Standard Time (Asia/Novosibirsk)", + "validFor": null, + "value": "Asia/Novosibirsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Indochina Time (Asia/Phnom_Penh)", + "validFor": null, + "value": "Asia/Phnom_Penh" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Western Indonesia Time (Asia/Pontianak)", + "validFor": null, + "value": "Asia/Pontianak" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Moscow Standard Time + 4 (Asia/Tomsk)", + "validFor": null, + "value": "Asia/Tomsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Indochina Time (Asia/Vientiane)", + "validFor": null, + "value": "Asia/Vientiane" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Christmas Island Time (Indian/Christmas)", + "validFor": null, + "value": "Indian/Christmas" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:30) Myanmar Time (Asia/Rangoon)", + "validFor": null, + "value": "Asia/Rangoon" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:30) Cocos Islands Time (Indian/Cocos)", + "validFor": null, + "value": "Indian/Cocos" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) Vostok Time (Antarctica/Vostok)", + "validFor": null, + "value": "Antarctica/Vostok" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) East Kazakhstan Time (Asia/Almaty)", + "validFor": null, + "value": "Asia/Almaty" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) Kyrgyzstan Time (Asia/Bishkek)", + "validFor": null, + "value": "Asia/Bishkek" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) Bangladesh Standard Time (Asia/Dhaka)", + "validFor": null, + "value": "Asia/Dhaka" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) Omsk Standard Time (Asia/Omsk)", + "validFor": null, + "value": "Asia/Omsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) East Kazakhstan Time (Asia/Qostanay)", + "validFor": null, + "value": "Asia/Qostanay" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) Bhutan Time (Asia/Thimphu)", + "validFor": null, + "value": "Asia/Thimphu" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) China Standard Time (Asia/Urumqi)", + "validFor": null, + "value": "Asia/Urumqi" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) Indian Ocean Time (Indian/Chagos)", + "validFor": null, + "value": "Indian/Chagos" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:45) Nepal Time (Asia/Kathmandu)", + "validFor": null, + "value": "Asia/Kathmandu" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:30) India Standard Time (Asia/Colombo)", + "validFor": null, + "value": "Asia/Colombo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:30) India Standard Time (Asia/Kolkata)", + "validFor": null, + "value": "Asia/Kolkata" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Mawson Time (Antarctica/Mawson)", + "validFor": null, + "value": "Antarctica/Mawson" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) West Kazakhstan Time (Asia/Aqtau)", + "validFor": null, + "value": "Asia/Aqtau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) West Kazakhstan Time (Asia/Aqtobe)", + "validFor": null, + "value": "Asia/Aqtobe" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Turkmenistan Standard Time (Asia/Ashgabat)", + "validFor": null, + "value": "Asia/Ashgabat" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) West Kazakhstan Time (Asia/Atyrau)", + "validFor": null, + "value": "Asia/Atyrau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Tajikistan Time (Asia/Dushanbe)", + "validFor": null, + "value": "Asia/Dushanbe" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Pakistan Standard Time (Asia/Karachi)", + "validFor": null, + "value": "Asia/Karachi" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) West Kazakhstan Time (Asia/Oral)", + "validFor": null, + "value": "Asia/Oral" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) West Kazakhstan Time (Asia/Qyzylorda)", + "validFor": null, + "value": "Asia/Qyzylorda" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Uzbekistan Standard Time (Asia/Samarkand)", + "validFor": null, + "value": "Asia/Samarkand" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Uzbekistan Standard Time (Asia/Tashkent)", + "validFor": null, + "value": "Asia/Tashkent" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Yekaterinburg Standard Time (Asia/Yekaterinburg)", + "validFor": null, + "value": "Asia/Yekaterinburg" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) French Southern & Antarctic Time (Indian/Kerguelen)", + "validFor": null, + "value": "Indian/Kerguelen" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Maldives Time (Indian/Maldives)", + "validFor": null, + "value": "Indian/Maldives" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:30) Afghanistan Time (Asia/Kabul)", + "validFor": null, + "value": "Asia/Kabul" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Azerbaijan Standard Time (Asia/Baku)", + "validFor": null, + "value": "Asia/Baku" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Gulf Standard Time (Asia/Dubai)", + "validFor": null, + "value": "Asia/Dubai" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Gulf Standard Time (Asia/Muscat)", + "validFor": null, + "value": "Asia/Muscat" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Georgia Standard Time (Asia/Tbilisi)", + "validFor": null, + "value": "Asia/Tbilisi" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Armenia Standard Time (Asia/Yerevan)", + "validFor": null, + "value": "Asia/Yerevan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Samara Standard Time (Europe/Astrakhan)", + "validFor": null, + "value": "Europe/Astrakhan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Samara Standard Time (Europe/Samara)", + "validFor": null, + "value": "Europe/Samara" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Moscow Standard Time + 1 (Europe/Saratov)", + "validFor": null, + "value": "Europe/Saratov" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Moscow Standard Time + 1 (Europe/Ulyanovsk)", + "validFor": null, + "value": "Europe/Ulyanovsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Seychelles Time (Indian/Mahe)", + "validFor": null, + "value": "Indian/Mahe" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Mauritius Standard Time (Indian/Mauritius)", + "validFor": null, + "value": "Indian/Mauritius" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Réunion Time (Indian/Reunion)", + "validFor": null, + "value": "Indian/Reunion" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Africa/Addis_Ababa)", + "validFor": null, + "value": "Africa/Addis_Ababa" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Africa/Asmera)", + "validFor": null, + "value": "Africa/Asmera" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Standard Time (Africa/Cairo)", + "validFor": null, + "value": "Africa/Cairo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Africa/Dar_es_Salaam)", + "validFor": null, + "value": "Africa/Dar_es_Salaam" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Africa/Djibouti)", + "validFor": null, + "value": "Africa/Djibouti" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Africa/Kampala)", + "validFor": null, + "value": "Africa/Kampala" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Africa/Mogadishu)", + "validFor": null, + "value": "Africa/Mogadishu" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Africa/Nairobi)", + "validFor": null, + "value": "Africa/Nairobi" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Syowa Time (Antarctica/Syowa)", + "validFor": null, + "value": "Antarctica/Syowa" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Arabian Standard Time (Asia/Aden)", + "validFor": null, + "value": "Asia/Aden" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Standard Time (Asia/Amman)", + "validFor": null, + "value": "Asia/Amman" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Arabian Standard Time (Asia/Baghdad)", + "validFor": null, + "value": "Asia/Baghdad" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Arabian Standard Time (Asia/Bahrain)", + "validFor": null, + "value": "Asia/Bahrain" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Asia/Beirut)", + "validFor": null, + "value": "Asia/Beirut" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Asia/Famagusta)", + "validFor": null, + "value": "Asia/Famagusta" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Asia/Gaza)", + "validFor": null, + "value": "Asia/Gaza" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Asia/Hebron)", + "validFor": null, + "value": "Asia/Hebron" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Israel Daylight Time (Asia/Jerusalem)", + "validFor": null, + "value": "Asia/Jerusalem" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Arabian Standard Time (Asia/Kuwait)", + "validFor": null, + "value": "Asia/Kuwait" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Asia/Nicosia)", + "validFor": null, + "value": "Asia/Nicosia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Arabian Standard Time (Asia/Qatar)", + "validFor": null, + "value": "Asia/Qatar" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Arabian Standard Time (Asia/Riyadh)", + "validFor": null, + "value": "Asia/Riyadh" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Athens)", + "validFor": null, + "value": "Europe/Athens" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Bucharest)", + "validFor": null, + "value": "Europe/Bucharest" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Chisinau)", + "validFor": null, + "value": "Europe/Chisinau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Helsinki)", + "validFor": null, + "value": "Europe/Helsinki" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Standard Time (Europe/Istanbul)", + "validFor": null, + "value": "Europe/Istanbul" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Kyiv)", + "validFor": null, + "value": "Europe/Kiev" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Moscow Standard Time (Europe/Kirov)", + "validFor": null, + "value": "Europe/Kirov" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Mariehamn)", + "validFor": null, + "value": "Europe/Mariehamn" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Moscow Standard Time (Europe/Minsk)", + "validFor": null, + "value": "Europe/Minsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Moscow Standard Time (Europe/Moscow)", + "validFor": null, + "value": "Europe/Moscow" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Riga)", + "validFor": null, + "value": "Europe/Riga" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Sofia)", + "validFor": null, + "value": "Europe/Sofia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Tallinn)", + "validFor": null, + "value": "Europe/Tallinn" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Uzhgorod)", + "validFor": null, + "value": "Europe/Uzhgorod" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Vilnius)", + "validFor": null, + "value": "Europe/Vilnius" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Volgograd Standard Time (Europe/Volgograd)", + "validFor": null, + "value": "Europe/Volgograd" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Zaporozhye)", + "validFor": null, + "value": "Europe/Zaporozhye" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Indian/Antananarivo)", + "validFor": null, + "value": "Indian/Antananarivo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Indian/Comoro)", + "validFor": null, + "value": "Indian/Comoro" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Indian/Mayotte)", + "validFor": null, + "value": "Indian/Mayotte" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Blantyre)", + "validFor": null, + "value": "Africa/Blantyre" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Bujumbura)", + "validFor": null, + "value": "Africa/Bujumbura" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Africa/Ceuta)", + "validFor": null, + "value": "Africa/Ceuta" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Gaborone)", + "validFor": null, + "value": "Africa/Gaborone" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Harare)", + "validFor": null, + "value": "Africa/Harare" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) South Africa Standard Time (Africa/Johannesburg)", + "validFor": null, + "value": "Africa/Johannesburg" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Juba)", + "validFor": null, + "value": "Africa/Juba" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Kigali)", + "validFor": null, + "value": "Africa/Kigali" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Lubumbashi)", + "validFor": null, + "value": "Africa/Lubumbashi" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Lusaka)", + "validFor": null, + "value": "Africa/Lusaka" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Maputo)", + "validFor": null, + "value": "Africa/Maputo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) South Africa Standard Time (Africa/Maseru)", + "validFor": null, + "value": "Africa/Maseru" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) South Africa Standard Time (Africa/Mbabane)", + "validFor": null, + "value": "Africa/Mbabane" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Eastern European Standard Time (Africa/Tripoli)", + "validFor": null, + "value": "Africa/Tripoli" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Windhoek)", + "validFor": null, + "value": "Africa/Windhoek" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Antarctica/Troll)", + "validFor": null, + "value": "Antarctica/Troll" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Arctic/Longyearbyen)", + "validFor": null, + "value": "Arctic/Longyearbyen" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Amsterdam)", + "validFor": null, + "value": "Europe/Amsterdam" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Andorra)", + "validFor": null, + "value": "Europe/Andorra" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Belgrade)", + "validFor": null, + "value": "Europe/Belgrade" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Berlin)", + "validFor": null, + "value": "Europe/Berlin" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Bratislava)", + "validFor": null, + "value": "Europe/Bratislava" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Brussels)", + "validFor": null, + "value": "Europe/Brussels" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Budapest)", + "validFor": null, + "value": "Europe/Budapest" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Busingen)", + "validFor": null, + "value": "Europe/Busingen" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Copenhagen)", + "validFor": null, + "value": "Europe/Copenhagen" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Gibraltar)", + "validFor": null, + "value": "Europe/Gibraltar" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Eastern European Standard Time (Europe/Kaliningrad)", + "validFor": null, + "value": "Europe/Kaliningrad" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Ljubljana)", + "validFor": null, + "value": "Europe/Ljubljana" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Luxembourg)", + "validFor": null, + "value": "Europe/Luxembourg" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Madrid)", + "validFor": null, + "value": "Europe/Madrid" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Malta)", + "validFor": null, + "value": "Europe/Malta" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Monaco)", + "validFor": null, + "value": "Europe/Monaco" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Oslo)", + "validFor": null, + "value": "Europe/Oslo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Paris)", + "validFor": null, + "value": "Europe/Paris" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Podgorica)", + "validFor": null, + "value": "Europe/Podgorica" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Prague)", + "validFor": null, + "value": "Europe/Prague" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Rome)", + "validFor": null, + "value": "Europe/Rome" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/San_Marino)", + "validFor": null, + "value": "Europe/San_Marino" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Sarajevo)", + "validFor": null, + "value": "Europe/Sarajevo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Skopje)", + "validFor": null, + "value": "Europe/Skopje" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Stockholm)", + "validFor": null, + "value": "Europe/Stockholm" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Tirane)", + "validFor": null, + "value": "Europe/Tirane" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Vaduz)", + "validFor": null, + "value": "Europe/Vaduz" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Vatican)", + "validFor": null, + "value": "Europe/Vatican" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Vienna)", + "validFor": null, + "value": "Europe/Vienna" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Warsaw)", + "validFor": null, + "value": "Europe/Warsaw" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Zagreb)", + "validFor": null, + "value": "Europe/Zagreb" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Zurich)", + "validFor": null, + "value": "Europe/Zurich" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Central European Standard Time (Africa/Algiers)", + "validFor": null, + "value": "Africa/Algiers" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Bangui)", + "validFor": null, + "value": "Africa/Bangui" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Brazzaville)", + "validFor": null, + "value": "Africa/Brazzaville" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Western European Summer Time (Africa/Casablanca)", + "validFor": null, + "value": "Africa/Casablanca" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Douala)", + "validFor": null, + "value": "Africa/Douala" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Western European Summer Time (Africa/El_Aaiun)", + "validFor": null, + "value": "Africa/El_Aaiun" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Kinshasa)", + "validFor": null, + "value": "Africa/Kinshasa" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Lagos)", + "validFor": null, + "value": "Africa/Lagos" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Libreville)", + "validFor": null, + "value": "Africa/Libreville" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Luanda)", + "validFor": null, + "value": "Africa/Luanda" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Malabo)", + "validFor": null, + "value": "Africa/Malabo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Ndjamena)", + "validFor": null, + "value": "Africa/Ndjamena" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Niamey)", + "validFor": null, + "value": "Africa/Niamey" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Porto-Novo)", + "validFor": null, + "value": "Africa/Porto-Novo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Central European Standard Time (Africa/Tunis)", + "validFor": null, + "value": "Africa/Tunis" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Western European Summer Time (Atlantic/Canary)", + "validFor": null, + "value": "Atlantic/Canary" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Western European Summer Time (Atlantic/Faeroe)", + "validFor": null, + "value": "Atlantic/Faeroe" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Western European Summer Time (Atlantic/Madeira)", + "validFor": null, + "value": "Atlantic/Madeira" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Irish Standard Time (Europe/Dublin)", + "validFor": null, + "value": "Europe/Dublin" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) British Summer Time (Europe/Guernsey)", + "validFor": null, + "value": "Europe/Guernsey" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) British Summer Time (Europe/Isle_of_Man)", + "validFor": null, + "value": "Europe/Isle_of_Man" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) British Summer Time (Europe/Jersey)", + "validFor": null, + "value": "Europe/Jersey" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Western European Summer Time (Europe/Lisbon)", + "validFor": null, + "value": "Europe/Lisbon" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) British Summer Time (Europe/London)", + "validFor": null, + "value": "Europe/London" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Abidjan)", + "validFor": null, + "value": "Africa/Abidjan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Accra)", + "validFor": null, + "value": "Africa/Accra" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Bamako)", + "validFor": null, + "value": "Africa/Bamako" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Banjul)", + "validFor": null, + "value": "Africa/Banjul" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Bissau)", + "validFor": null, + "value": "Africa/Bissau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Conakry)", + "validFor": null, + "value": "Africa/Conakry" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Dakar)", + "validFor": null, + "value": "Africa/Dakar" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Freetown)", + "validFor": null, + "value": "Africa/Freetown" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Lome)", + "validFor": null, + "value": "Africa/Lome" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Monrovia)", + "validFor": null, + "value": "Africa/Monrovia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Nouakchott)", + "validFor": null, + "value": "Africa/Nouakchott" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Ouagadougou)", + "validFor": null, + "value": "Africa/Ouagadougou" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Sao_Tome)", + "validFor": null, + "value": "Africa/Sao_Tome" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (America/Danmarkshavn)", + "validFor": null, + "value": "America/Danmarkshavn" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) East Greenland Summer Time (America/Scoresbysund)", + "validFor": null, + "value": "America/Scoresbysund" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Azores Summer Time (Atlantic/Azores)", + "validFor": null, + "value": "Atlantic/Azores" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Atlantic/Reykjavik)", + "validFor": null, + "value": "Atlantic/Reykjavik" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Atlantic/St_Helena)", + "validFor": null, + "value": "Atlantic/St_Helena" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (GMT)", + "validFor": null, + "value": "GMT" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-01:00) Cape Verde Standard Time (Atlantic/Cape_Verde)", + "validFor": null, + "value": "Atlantic/Cape_Verde" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-02:00) West Greenland Summer Time (America/Godthab)", + "validFor": null, + "value": "America/Godthab" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-02:00) St Pierre & Miquelon Daylight Time (America/Miquelon)", + "validFor": null, + "value": "America/Miquelon" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-02:00) Fernando de Noronha Standard Time (America/Noronha)", + "validFor": null, + "value": "America/Noronha" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-02:00) South Georgia Time (Atlantic/South_Georgia)", + "validFor": null, + "value": "Atlantic/South_Georgia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-02:30) Newfoundland Daylight Time (America/St_Johns)", + "validFor": null, + "value": "America/St_Johns" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Araguaina)", + "validFor": null, + "value": "America/Araguaina" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/Buenos_Aires)", + "validFor": null, + "value": "America/Argentina/Buenos_Aires" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/La_Rioja)", + "validFor": null, + "value": "America/Argentina/La_Rioja" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/Rio_Gallegos)", + "validFor": null, + "value": "America/Argentina/Rio_Gallegos" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/Salta)", + "validFor": null, + "value": "America/Argentina/Salta" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/San_Juan)", + "validFor": null, + "value": "America/Argentina/San_Juan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/San_Luis)", + "validFor": null, + "value": "America/Argentina/San_Luis" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/Tucuman)", + "validFor": null, + "value": "America/Argentina/Tucuman" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/Ushuaia)", + "validFor": null, + "value": "America/Argentina/Ushuaia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Bahia)", + "validFor": null, + "value": "America/Bahia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Belem)", + "validFor": null, + "value": "America/Belem" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Catamarca)", + "validFor": null, + "value": "America/Catamarca" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) French Guiana Time (America/Cayenne)", + "validFor": null, + "value": "America/Cayenne" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Cordoba)", + "validFor": null, + "value": "America/Cordoba" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Fortaleza)", + "validFor": null, + "value": "America/Fortaleza" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Atlantic Daylight Time (America/Glace_Bay)", + "validFor": null, + "value": "America/Glace_Bay" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Atlantic Daylight Time (America/Goose_Bay)", + "validFor": null, + "value": "America/Goose_Bay" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Atlantic Daylight Time (America/Halifax)", + "validFor": null, + "value": "America/Halifax" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Jujuy)", + "validFor": null, + "value": "America/Jujuy" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Maceio)", + "validFor": null, + "value": "America/Maceio" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Mendoza)", + "validFor": null, + "value": "America/Mendoza" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Atlantic Daylight Time (America/Moncton)", + "validFor": null, + "value": "America/Moncton" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Uruguay Standard Time (America/Montevideo)", + "validFor": null, + "value": "America/Montevideo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Suriname Time (America/Paramaribo)", + "validFor": null, + "value": "America/Paramaribo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Chile Standard Time (America/Punta_Arenas)", + "validFor": null, + "value": "America/Punta_Arenas" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Recife)", + "validFor": null, + "value": "America/Recife" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Santarem)", + "validFor": null, + "value": "America/Santarem" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Chile Summer Time (America/Santiago)", + "validFor": null, + "value": "America/Santiago" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Sao_Paulo)", + "validFor": null, + "value": "America/Sao_Paulo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Atlantic Daylight Time (America/Thule)", + "validFor": null, + "value": "America/Thule" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Chile Standard Time (Antarctica/Palmer)", + "validFor": null, + "value": "Antarctica/Palmer" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Rothera Time (Antarctica/Rothera)", + "validFor": null, + "value": "Antarctica/Rothera" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Atlantic Daylight Time (Atlantic/Bermuda)", + "validFor": null, + "value": "Atlantic/Bermuda" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Falkland Islands Standard Time (Atlantic/Stanley)", + "validFor": null, + "value": "Atlantic/Stanley" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Anguilla)", + "validFor": null, + "value": "America/Anguilla" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Antigua)", + "validFor": null, + "value": "America/Antigua" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Aruba)", + "validFor": null, + "value": "America/Aruba" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Paraguay Standard Time (America/Asuncion)", + "validFor": null, + "value": "America/Asuncion" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Barbados)", + "validFor": null, + "value": "America/Barbados" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Blanc-Sablon)", + "validFor": null, + "value": "America/Blanc-Sablon" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Amazon Standard Time (America/Boa_Vista)", + "validFor": null, + "value": "America/Boa_Vista" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Amazon Standard Time (America/Campo_Grande)", + "validFor": null, + "value": "America/Campo_Grande" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Venezuela Time (America/Caracas)", + "validFor": null, + "value": "America/Caracas" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Amazon Standard Time (America/Cuiaba)", + "validFor": null, + "value": "America/Cuiaba" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Curacao)", + "validFor": null, + "value": "America/Curacao" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Detroit)", + "validFor": null, + "value": "America/Detroit" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Dominica)", + "validFor": null, + "value": "America/Dominica" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Grand_Turk)", + "validFor": null, + "value": "America/Grand_Turk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Grenada)", + "validFor": null, + "value": "America/Grenada" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Guadeloupe)", + "validFor": null, + "value": "America/Guadeloupe" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Guyana Time (America/Guyana)", + "validFor": null, + "value": "America/Guyana" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Indiana/Indianapolis)", + "validFor": null, + "value": "America/Indiana/Indianapolis" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Indiana/Marengo)", + "validFor": null, + "value": "America/Indiana/Marengo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Indiana/Petersburg)", + "validFor": null, + "value": "America/Indiana/Petersburg" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Indiana/Vevay)", + "validFor": null, + "value": "America/Indiana/Vevay" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Indiana/Vincennes)", + "validFor": null, + "value": "America/Indiana/Vincennes" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Indiana/Winamac)", + "validFor": null, + "value": "America/Indiana/Winamac" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Iqaluit)", + "validFor": null, + "value": "America/Iqaluit" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Kentucky/Monticello)", + "validFor": null, + "value": "America/Kentucky/Monticello" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Kralendijk)", + "validFor": null, + "value": "America/Kralendijk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Bolivia Time (America/La_Paz)", + "validFor": null, + "value": "America/La_Paz" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Louisville)", + "validFor": null, + "value": "America/Louisville" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Lower_Princes)", + "validFor": null, + "value": "America/Lower_Princes" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Amazon Standard Time (America/Manaus)", + "validFor": null, + "value": "America/Manaus" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Marigot)", + "validFor": null, + "value": "America/Marigot" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Martinique)", + "validFor": null, + "value": "America/Martinique" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Montreal)", + "validFor": null, + "value": "America/Montreal" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Montserrat)", + "validFor": null, + "value": "America/Montserrat" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Nassau)", + "validFor": null, + "value": "America/Nassau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/New_York)", + "validFor": null, + "value": "America/New_York" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Nipigon)", + "validFor": null, + "value": "America/Nipigon" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Pangnirtung)", + "validFor": null, + "value": "America/Pangnirtung" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Port-au-Prince)", + "validFor": null, + "value": "America/Port-au-Prince" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Port_of_Spain)", + "validFor": null, + "value": "America/Port_of_Spain" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Amazon Standard Time (America/Porto_Velho)", + "validFor": null, + "value": "America/Porto_Velho" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Puerto_Rico)", + "validFor": null, + "value": "America/Puerto_Rico" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Santo_Domingo)", + "validFor": null, + "value": "America/Santo_Domingo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/St_Barthelemy)", + "validFor": null, + "value": "America/St_Barthelemy" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/St_Kitts)", + "validFor": null, + "value": "America/St_Kitts" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/St_Lucia)", + "validFor": null, + "value": "America/St_Lucia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/St_Thomas)", + "validFor": null, + "value": "America/St_Thomas" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/St_Vincent)", + "validFor": null, + "value": "America/St_Vincent" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Thunder_Bay)", + "validFor": null, + "value": "America/Thunder_Bay" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Toronto)", + "validFor": null, + "value": "America/Toronto" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Tortola)", + "validFor": null, + "value": "America/Tortola" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Colombia Standard Time (America/Bogota)", + "validFor": null, + "value": "America/Bogota" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Eastern Standard Time (America/Cancun)", + "validFor": null, + "value": "America/Cancun" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Eastern Standard Time (America/Cayman)", + "validFor": null, + "value": "America/Cayman" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Chicago)", + "validFor": null, + "value": "America/Chicago" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Eastern Standard Time (America/Coral_Harbour)", + "validFor": null, + "value": "America/Coral_Harbour" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Acre Standard Time (America/Eirunepe)", + "validFor": null, + "value": "America/Eirunepe" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Ecuador Time (America/Guayaquil)", + "validFor": null, + "value": "America/Guayaquil" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Indiana/Knox)", + "validFor": null, + "value": "America/Indiana/Knox" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Indiana/Tell_City)", + "validFor": null, + "value": "America/Indiana/Tell_City" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Eastern Standard Time (America/Jamaica)", + "validFor": null, + "value": "America/Jamaica" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Peru Standard Time (America/Lima)", + "validFor": null, + "value": "America/Lima" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Matamoros)", + "validFor": null, + "value": "America/Matamoros" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Menominee)", + "validFor": null, + "value": "America/Menominee" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/North_Dakota/Beulah)", + "validFor": null, + "value": "America/North_Dakota/Beulah" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/North_Dakota/Center)", + "validFor": null, + "value": "America/North_Dakota/Center" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/North_Dakota/New_Salem)", + "validFor": null, + "value": "America/North_Dakota/New_Salem" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Mountain Daylight Time (America/Ojinaga)", + "validFor": null, + "value": "America/Ojinaga" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Eastern Standard Time (America/Panama)", + "validFor": null, + "value": "America/Panama" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Rainy_River)", + "validFor": null, + "value": "America/Rainy_River" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Rankin_Inlet)", + "validFor": null, + "value": "America/Rankin_Inlet" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Resolute)", + "validFor": null, + "value": "America/Resolute" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Acre Standard Time (America/Rio_Branco)", + "validFor": null, + "value": "America/Rio_Branco" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Winnipeg)", + "validFor": null, + "value": "America/Winnipeg" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Easter Island Summer Time (Pacific/Easter)", + "validFor": null, + "value": "Pacific/Easter" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Bahia_Banderas)", + "validFor": null, + "value": "America/Bahia_Banderas" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Belize)", + "validFor": null, + "value": "America/Belize" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Mountain Daylight Time (America/Boise)", + "validFor": null, + "value": "America/Boise" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Mountain Daylight Time (America/Cambridge_Bay)", + "validFor": null, + "value": "America/Cambridge_Bay" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Mexican Pacific Standard Time (America/Chihuahua)", + "validFor": null, + "value": "America/Chihuahua" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Costa_Rica)", + "validFor": null, + "value": "America/Costa_Rica" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Mountain Daylight Time (America/Denver)", + "validFor": null, + "value": "America/Denver" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Mountain Daylight Time (America/Edmonton)", + "validFor": null, + "value": "America/Edmonton" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/El_Salvador)", + "validFor": null, + "value": "America/El_Salvador" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Guatemala)", + "validFor": null, + "value": "America/Guatemala" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Mountain Daylight Time (America/Inuvik)", + "validFor": null, + "value": "America/Inuvik" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Managua)", + "validFor": null, + "value": "America/Managua" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Merida)", + "validFor": null, + "value": "America/Merida" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Mexico_City)", + "validFor": null, + "value": "America/Mexico_City" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Monterrey)", + "validFor": null, + "value": "America/Monterrey" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Regina)", + "validFor": null, + "value": "America/Regina" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Swift_Current)", + "validFor": null, + "value": "America/Swift_Current" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Tegucigalpa)", + "validFor": null, + "value": "America/Tegucigalpa" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Mountain Daylight Time (America/Yellowknife)", + "validFor": null, + "value": "America/Yellowknife" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Galapagos Time (Pacific/Galapagos)", + "validFor": null, + "value": "Pacific/Galapagos" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Mountain Standard Time (America/Creston)", + "validFor": null, + "value": "America/Creston" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Yukon Time (America/Dawson)", + "validFor": null, + "value": "America/Dawson" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Mountain Standard Time (America/Dawson_Creek)", + "validFor": null, + "value": "America/Dawson_Creek" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Mountain Standard Time (America/Fort_Nelson)", + "validFor": null, + "value": "America/Fort_Nelson" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Mexican Pacific Standard Time (America/Hermosillo)", + "validFor": null, + "value": "America/Hermosillo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Pacific Daylight Time (America/Los_Angeles)", + "validFor": null, + "value": "America/Los_Angeles" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Mexican Pacific Standard Time (America/Mazatlan)", + "validFor": null, + "value": "America/Mazatlan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Mountain Standard Time (America/Phoenix)", + "validFor": null, + "value": "America/Phoenix" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Northwest Mexico Daylight Time (America/Santa_Isabel)", + "validFor": null, + "value": "America/Santa_Isabel" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Pacific Daylight Time (America/Tijuana)", + "validFor": null, + "value": "America/Tijuana" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Pacific Daylight Time (America/Vancouver)", + "validFor": null, + "value": "America/Vancouver" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Yukon Time (America/Whitehorse)", + "validFor": null, + "value": "America/Whitehorse" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-08:00) Alaska Daylight Time (America/Anchorage)", + "validFor": null, + "value": "America/Anchorage" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-08:00) Alaska Daylight Time (America/Juneau)", + "validFor": null, + "value": "America/Juneau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-08:00) Alaska Daylight Time (America/Metlakatla)", + "validFor": null, + "value": "America/Metlakatla" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-08:00) Alaska Daylight Time (America/Nome)", + "validFor": null, + "value": "America/Nome" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-08:00) Alaska Daylight Time (America/Sitka)", + "validFor": null, + "value": "America/Sitka" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-08:00) Alaska Daylight Time (America/Yakutat)", + "validFor": null, + "value": "America/Yakutat" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-08:00) Pitcairn Time (Pacific/Pitcairn)", + "validFor": null, + "value": "Pacific/Pitcairn" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-09:00) Hawaii-Aleutian Daylight Time (America/Adak)", + "validFor": null, + "value": "America/Adak" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-09:00) Gambier Time (Pacific/Gambier)", + "validFor": null, + "value": "Pacific/Gambier" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-09:30) Marquesas Time (Pacific/Marquesas)", + "validFor": null, + "value": "Pacific/Marquesas" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-10:00) Hawaii-Aleutian Standard Time (Pacific/Honolulu)", + "validFor": null, + "value": "Pacific/Honolulu" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-10:00) Hawaii-Aleutian Standard Time (Pacific/Johnston)", + "validFor": null, + "value": "Pacific/Johnston" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-10:00) Cook Islands Standard Time (Pacific/Rarotonga)", + "validFor": null, + "value": "Pacific/Rarotonga" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-10:00) Tahiti Time (Pacific/Tahiti)", + "validFor": null, + "value": "Pacific/Tahiti" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-11:00) Samoa Standard Time (Pacific/Midway)", + "validFor": null, + "value": "Pacific/Midway" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-11:00) Niue Time (Pacific/Niue)", + "validFor": null, + "value": "Pacific/Niue" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-11:00) Samoa Standard Time (Pacific/Pago_Pago)", + "validFor": null, + "value": "Pacific/Pago_Pago" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Recurrence Type", + "name": "RecurrenceType", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Recurs Daily", + "validFor": null, + "value": "RecursDaily" + }, + { + "active": true, + "defaultValue": false, + "label": "Recurs Every Weekday", + "validFor": null, + "value": "RecursEveryWeekday" + }, + { + "active": true, + "defaultValue": false, + "label": "Recurs Monthly", + "validFor": null, + "value": "RecursMonthly" + }, + { + "active": true, + "defaultValue": false, + "label": "Recurs Monthly Nth", + "validFor": null, + "value": "RecursMonthlyNth" + }, + { + "active": true, + "defaultValue": false, + "label": "Recurs Weekly", + "validFor": null, + "value": "RecursWeekly" + }, + { + "active": true, + "defaultValue": false, + "label": "Recurs Yearly", + "validFor": null, + "value": "RecursYearly" + }, + { + "active": true, + "defaultValue": false, + "label": "Recurs Yearly Nth", + "validFor": null, + "value": "RecursYearlyNth" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Recurrence Interval", + "name": "RecurrenceInterval", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "int" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Recurrence Day of Week Mask", + "name": "RecurrenceDayOfWeekMask", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "int" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Recurrence Day of Month", + "name": "RecurrenceDayOfMonth", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "int" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Recurrence Instance", + "name": "RecurrenceInstance", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "1st", + "validFor": null, + "value": "First" + }, + { + "active": true, + "defaultValue": false, + "label": "2nd", + "validFor": null, + "value": "Second" + }, + { + "active": true, + "defaultValue": false, + "label": "3rd", + "validFor": null, + "value": "Third" + }, + { + "active": true, + "defaultValue": false, + "label": "4th", + "validFor": null, + "value": "Fourth" + }, + { + "active": true, + "defaultValue": false, + "label": "last", + "validFor": null, + "value": "Last" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Recurrence Month of Year", + "name": "RecurrenceMonthOfYear", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "January", + "validFor": null, + "value": "January" + }, + { + "active": true, + "defaultValue": false, + "label": "February", + "validFor": null, + "value": "February" + }, + { + "active": true, + "defaultValue": false, + "label": "March", + "validFor": null, + "value": "March" + }, + { + "active": true, + "defaultValue": false, + "label": "April", + "validFor": null, + "value": "April" + }, + { + "active": true, + "defaultValue": false, + "label": "May", + "validFor": null, + "value": "May" + }, + { + "active": true, + "defaultValue": false, + "label": "June", + "validFor": null, + "value": "June" + }, + { + "active": true, + "defaultValue": false, + "label": "July", + "validFor": null, + "value": "July" + }, + { + "active": true, + "defaultValue": false, + "label": "August", + "validFor": null, + "value": "August" + }, + { + "active": true, + "defaultValue": false, + "label": "September", + "validFor": null, + "value": "September" + }, + { + "active": true, + "defaultValue": false, + "label": "October", + "validFor": null, + "value": "October" + }, + { + "active": true, + "defaultValue": false, + "label": "November", + "validFor": null, + "value": "November" + }, + { + "active": true, + "defaultValue": false, + "label": "December", + "validFor": null, + "value": "December" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Repeat This Task", + "name": "RecurrenceRegeneratedType", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "After due date", + "validFor": null, + "value": "RecurrenceRegenerateAfterDueDate" + }, + { + "active": true, + "defaultValue": false, + "label": "After date completed", + "validFor": null, + "value": "RecurrenceRegenerateAfterToday" + }, + { + "active": true, + "defaultValue": false, + "label": "(Task Closed)", + "validFor": null, + "value": "RecurrenceRegenerated" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Task Subtype", + "name": "TaskSubtype", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Task", + "validFor": null, + "value": "Task" + }, + { + "active": true, + "defaultValue": false, + "label": "Email", + "validFor": null, + "value": "Email" + }, + { + "active": true, + "defaultValue": false, + "label": "List Email", + "validFor": null, + "value": "ListEmail" + }, + { + "active": true, + "defaultValue": false, + "label": "Cadence", + "validFor": null, + "value": "Cadence" + }, + { + "active": true, + "defaultValue": false, + "label": "Call", + "validFor": null, + "value": "Call" + }, + { + "active": true, + "defaultValue": false, + "label": "LinkedIn", + "validFor": null, + "value": "LinkedIn" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Completed Date/Time", + "name": "CompletedDateTime", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + } + ], + "label": "Task", + "childRelationships": [ + { + "cascadeDelete": true, + "childSObject": "AIInsightValue", + "deprecatedAndHidden": false, + "field": "SobjectLookupValueId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AIRecordInsight", + "deprecatedAndHidden": false, + "field": "TargetId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ActivityFieldHistory", + "deprecatedAndHidden": false, + "field": "ActivityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ActivityFieldHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AttachedContentDocument", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AttachedContentDocuments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Attachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Attachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CombinedAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CombinedAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDocumentLink", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContentDocumentLinks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentLinkChangeEvent", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessage", + "deprecatedAndHidden": false, + "field": "ActivityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessageChangeEvent", + "deprecatedAndHidden": false, + "field": "ActivityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailStatus", + "deprecatedAndHidden": false, + "field": "TaskId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitySubscription", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FeedSubscriptionsForEntity", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "ContextRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Task", + "deprecatedAndHidden": false, + "field": "RecurrenceActivityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecurringTasks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskChangeEvent", + "deprecatedAndHidden": false, + "field": "RecurrenceActivityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "TaskFeed", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Feeds", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "TopicAssignment", + "deprecatedAndHidden": false, + "field": "EntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "TopicAssignments", + "restrictedDelete": false + } + ], + "custom": false, + "name": "Task", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/standardObjects/User.json b/.sfdx/tools/soqlMetadata/standardObjects/User.json new file mode 100644 index 0000000..6db0343 --- /dev/null +++ b/.sfdx/tools/soqlMetadata/standardObjects/User.json @@ -0,0 +1,30415 @@ +{ + "fields": [ + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "User ID", + "name": "Id", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "id" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Username", + "name": "Username", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "personname", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Name", + "name": "LastName", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "personname", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "First Name", + "name": "FirstName", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "personname", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Full Name", + "name": "Name", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Company Name", + "name": "CompanyName", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Division", + "name": "Division", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Department", + "name": "Department", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Title", + "name": "Title", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Street", + "name": "Street", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "City", + "name": "City", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "State/Province", + "name": "State", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Zip/Postal Code", + "name": "PostalCode", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Country", + "name": "Country", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Latitude", + "name": "Latitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Longitude", + "name": "Longitude", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "double" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Geocode Accuracy", + "name": "GeocodeAccuracy", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Address", + "validFor": null, + "value": "Address" + }, + { + "active": true, + "defaultValue": false, + "label": "NearAddress", + "validFor": null, + "value": "NearAddress" + }, + { + "active": true, + "defaultValue": false, + "label": "Block", + "validFor": null, + "value": "Block" + }, + { + "active": true, + "defaultValue": false, + "label": "Street", + "validFor": null, + "value": "Street" + }, + { + "active": true, + "defaultValue": false, + "label": "ExtendedZip", + "validFor": null, + "value": "ExtendedZip" + }, + { + "active": true, + "defaultValue": false, + "label": "Zip", + "validFor": null, + "value": "Zip" + }, + { + "active": true, + "defaultValue": false, + "label": "Neighborhood", + "validFor": null, + "value": "Neighborhood" + }, + { + "active": true, + "defaultValue": false, + "label": "City", + "validFor": null, + "value": "City" + }, + { + "active": true, + "defaultValue": false, + "label": "County", + "validFor": null, + "value": "County" + }, + { + "active": true, + "defaultValue": false, + "label": "State", + "validFor": null, + "value": "State" + }, + { + "active": true, + "defaultValue": false, + "label": "Unknown", + "validFor": null, + "value": "Unknown" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Address", + "name": "Address", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "address" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Email", + "name": "Email", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "email" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "AutoBcc", + "name": "EmailPreferencesAutoBcc", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "AutoBccStayInTouch", + "name": "EmailPreferencesAutoBccStayInTouch", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "StayInTouchReminder", + "name": "EmailPreferencesStayInTouchReminder", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Email Sender Address", + "name": "SenderEmail", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "email" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Email Sender Name", + "name": "SenderName", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Email Signature", + "name": "Signature", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Stay-in-Touch Email Subject", + "name": "StayInTouchSubject", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Stay-in-Touch Email Signature", + "name": "StayInTouchSignature", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Stay-in-Touch Email Note", + "name": "StayInTouchNote", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Phone", + "name": "Phone", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Fax", + "name": "Fax", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Mobile", + "name": "MobilePhone", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Alias", + "name": "Alias", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Nickname", + "name": "CommunityNickname", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "User Photo badge text overlay", + "name": "BadgeText", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Active", + "name": "IsActive", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Time Zone", + "name": "TimeZoneSidKey", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "(GMT+14:00) Line Islands Time (Pacific/Kiritimati)", + "validFor": null, + "value": "Pacific/Kiritimati" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+13:45) Chatham Daylight Time (Pacific/Chatham)", + "validFor": null, + "value": "Pacific/Chatham" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+13:00) New Zealand Daylight Time (Antarctica/McMurdo)", + "validFor": null, + "value": "Antarctica/McMurdo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+13:00) Apia Standard Time (Pacific/Apia)", + "validFor": null, + "value": "Pacific/Apia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+13:00) New Zealand Daylight Time (Pacific/Auckland)", + "validFor": null, + "value": "Pacific/Auckland" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+13:00) Phoenix Islands Time (Pacific/Enderbury)", + "validFor": null, + "value": "Pacific/Enderbury" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+13:00) Tokelau Time (Pacific/Fakaofo)", + "validFor": null, + "value": "Pacific/Fakaofo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+13:00) Tonga Standard Time (Pacific/Tongatapu)", + "validFor": null, + "value": "Pacific/Tongatapu" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Anadyr Standard Time (Asia/Anadyr)", + "validFor": null, + "value": "Asia/Anadyr" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Petropavlovsk-Kamchatski Standard Time (Asia/Kamchatka)", + "validFor": null, + "value": "Asia/Kamchatka" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Fiji Standard Time (Pacific/Fiji)", + "validFor": null, + "value": "Pacific/Fiji" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Tuvalu Time (Pacific/Funafuti)", + "validFor": null, + "value": "Pacific/Funafuti" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Marshall Islands Time (Pacific/Kwajalein)", + "validFor": null, + "value": "Pacific/Kwajalein" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Marshall Islands Time (Pacific/Majuro)", + "validFor": null, + "value": "Pacific/Majuro" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Nauru Time (Pacific/Nauru)", + "validFor": null, + "value": "Pacific/Nauru" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Gilbert Islands Time (Pacific/Tarawa)", + "validFor": null, + "value": "Pacific/Tarawa" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Wake Island Time (Pacific/Wake)", + "validFor": null, + "value": "Pacific/Wake" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+12:00) Wallis & Futuna Time (Pacific/Wallis)", + "validFor": null, + "value": "Pacific/Wallis" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Casey Time (Antarctica/Casey)", + "validFor": null, + "value": "Antarctica/Casey" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Magadan Standard Time (Asia/Magadan)", + "validFor": null, + "value": "Asia/Magadan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Sakhalin Standard Time (Asia/Sakhalin)", + "validFor": null, + "value": "Asia/Sakhalin" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Magadan Standard Time (Asia/Srednekolymsk)", + "validFor": null, + "value": "Asia/Srednekolymsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Bougainville Standard Time (Pacific/Bougainville)", + "validFor": null, + "value": "Pacific/Bougainville" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Vanuatu Standard Time (Pacific/Efate)", + "validFor": null, + "value": "Pacific/Efate" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Solomon Islands Time (Pacific/Guadalcanal)", + "validFor": null, + "value": "Pacific/Guadalcanal" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Kosrae Time (Pacific/Kosrae)", + "validFor": null, + "value": "Pacific/Kosrae" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Norfolk Island Standard Time (Pacific/Norfolk)", + "validFor": null, + "value": "Pacific/Norfolk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) New Caledonia Standard Time (Pacific/Noumea)", + "validFor": null, + "value": "Pacific/Noumea" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+11:00) Ponape Time (Pacific/Ponape)", + "validFor": null, + "value": "Pacific/Ponape" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:30) Lord Howe Standard Time (Australia/Lord_Howe)", + "validFor": null, + "value": "Australia/Lord_Howe" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Dumont-d’Urville Time (Antarctica/DumontDUrville)", + "validFor": null, + "value": "Antarctica/DumontDUrville" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Australian Eastern Standard Time (Antarctica/Macquarie)", + "validFor": null, + "value": "Antarctica/Macquarie" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Vladivostok Standard Time (Asia/Ust-Nera)", + "validFor": null, + "value": "Asia/Ust-Nera" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Vladivostok Standard Time (Asia/Vladivostok)", + "validFor": null, + "value": "Asia/Vladivostok" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Australian Eastern Standard Time (Australia/Brisbane)", + "validFor": null, + "value": "Australia/Brisbane" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Australian Eastern Standard Time (Australia/Currie)", + "validFor": null, + "value": "Australia/Currie" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Australian Eastern Standard Time (Australia/Hobart)", + "validFor": null, + "value": "Australia/Hobart" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Australian Eastern Standard Time (Australia/Lindeman)", + "validFor": null, + "value": "Australia/Lindeman" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Australian Eastern Standard Time (Australia/Melbourne)", + "validFor": null, + "value": "Australia/Melbourne" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Australian Eastern Standard Time (Australia/Sydney)", + "validFor": null, + "value": "Australia/Sydney" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Chamorro Standard Time (Pacific/Guam)", + "validFor": null, + "value": "Pacific/Guam" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Papua New Guinea Time (Pacific/Port_Moresby)", + "validFor": null, + "value": "Pacific/Port_Moresby" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Chamorro Standard Time (Pacific/Saipan)", + "validFor": null, + "value": "Pacific/Saipan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+10:00) Chuuk Time (Pacific/Truk)", + "validFor": null, + "value": "Pacific/Truk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:30) Australian Central Standard Time (Australia/Adelaide)", + "validFor": null, + "value": "Australia/Adelaide" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:30) Australian Central Standard Time (Australia/Broken_Hill)", + "validFor": null, + "value": "Australia/Broken_Hill" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:30) Australian Central Standard Time (Australia/Darwin)", + "validFor": null, + "value": "Australia/Darwin" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) Yakutsk Standard Time (Asia/Chita)", + "validFor": null, + "value": "Asia/Chita" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) East Timor Time (Asia/Dili)", + "validFor": null, + "value": "Asia/Dili" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) Eastern Indonesia Time (Asia/Jayapura)", + "validFor": null, + "value": "Asia/Jayapura" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) Yakutsk Standard Time (Asia/Khandyga)", + "validFor": null, + "value": "Asia/Khandyga" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) Korean Standard Time (Asia/Seoul)", + "validFor": null, + "value": "Asia/Seoul" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) Japan Standard Time (Asia/Tokyo)", + "validFor": null, + "value": "Asia/Tokyo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) Yakutsk Standard Time (Asia/Yakutsk)", + "validFor": null, + "value": "Asia/Yakutsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+09:00) Palau Time (Pacific/Palau)", + "validFor": null, + "value": "Pacific/Palau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:45) Australian Central Western Standard Time (Australia/Eucla)", + "validFor": null, + "value": "Australia/Eucla" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Brunei Darussalam Time (Asia/Brunei)", + "validFor": null, + "value": "Asia/Brunei" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Ulaanbaatar Standard Time (Asia/Choibalsan)", + "validFor": null, + "value": "Asia/Choibalsan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Hong Kong Standard Time (Asia/Hong_Kong)", + "validFor": null, + "value": "Asia/Hong_Kong" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Irkutsk Standard Time (Asia/Irkutsk)", + "validFor": null, + "value": "Asia/Irkutsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Malaysia Time (Asia/Kuala_Lumpur)", + "validFor": null, + "value": "Asia/Kuala_Lumpur" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Malaysia Time (Asia/Kuching)", + "validFor": null, + "value": "Asia/Kuching" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) China Standard Time (Asia/Macau)", + "validFor": null, + "value": "Asia/Macau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Central Indonesia Time (Asia/Makassar)", + "validFor": null, + "value": "Asia/Makassar" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Philippine Standard Time (Asia/Manila)", + "validFor": null, + "value": "Asia/Manila" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) China Standard Time (Asia/Shanghai)", + "validFor": null, + "value": "Asia/Shanghai" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Singapore Standard Time (Asia/Singapore)", + "validFor": null, + "value": "Asia/Singapore" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Taipei Standard Time (Asia/Taipei)", + "validFor": null, + "value": "Asia/Taipei" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Ulaanbaatar Standard Time (Asia/Ulaanbaatar)", + "validFor": null, + "value": "Asia/Ulaanbaatar" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+08:00) Australian Western Standard Time (Australia/Perth)", + "validFor": null, + "value": "Australia/Perth" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Davis Time (Antarctica/Davis)", + "validFor": null, + "value": "Antarctica/Davis" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Indochina Time (Asia/Bangkok)", + "validFor": null, + "value": "Asia/Bangkok" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Moscow Standard Time + 4 (Asia/Barnaul)", + "validFor": null, + "value": "Asia/Barnaul" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Indochina Time (Asia/Ho_Chi_Minh)", + "validFor": null, + "value": "Asia/Ho_Chi_Minh" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Hovd Standard Time (Asia/Hovd)", + "validFor": null, + "value": "Asia/Hovd" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Western Indonesia Time (Asia/Jakarta)", + "validFor": null, + "value": "Asia/Jakarta" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Krasnoyarsk Standard Time (Asia/Krasnoyarsk)", + "validFor": null, + "value": "Asia/Krasnoyarsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Krasnoyarsk Standard Time (Asia/Novokuznetsk)", + "validFor": null, + "value": "Asia/Novokuznetsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Novosibirsk Standard Time (Asia/Novosibirsk)", + "validFor": null, + "value": "Asia/Novosibirsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Indochina Time (Asia/Phnom_Penh)", + "validFor": null, + "value": "Asia/Phnom_Penh" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Western Indonesia Time (Asia/Pontianak)", + "validFor": null, + "value": "Asia/Pontianak" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Moscow Standard Time + 4 (Asia/Tomsk)", + "validFor": null, + "value": "Asia/Tomsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Indochina Time (Asia/Vientiane)", + "validFor": null, + "value": "Asia/Vientiane" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+07:00) Christmas Island Time (Indian/Christmas)", + "validFor": null, + "value": "Indian/Christmas" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:30) Myanmar Time (Asia/Rangoon)", + "validFor": null, + "value": "Asia/Rangoon" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:30) Cocos Islands Time (Indian/Cocos)", + "validFor": null, + "value": "Indian/Cocos" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) Vostok Time (Antarctica/Vostok)", + "validFor": null, + "value": "Antarctica/Vostok" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) East Kazakhstan Time (Asia/Almaty)", + "validFor": null, + "value": "Asia/Almaty" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) Kyrgyzstan Time (Asia/Bishkek)", + "validFor": null, + "value": "Asia/Bishkek" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) Bangladesh Standard Time (Asia/Dhaka)", + "validFor": null, + "value": "Asia/Dhaka" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) Omsk Standard Time (Asia/Omsk)", + "validFor": null, + "value": "Asia/Omsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) East Kazakhstan Time (Asia/Qostanay)", + "validFor": null, + "value": "Asia/Qostanay" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) Bhutan Time (Asia/Thimphu)", + "validFor": null, + "value": "Asia/Thimphu" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) China Standard Time (Asia/Urumqi)", + "validFor": null, + "value": "Asia/Urumqi" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+06:00) Indian Ocean Time (Indian/Chagos)", + "validFor": null, + "value": "Indian/Chagos" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:45) Nepal Time (Asia/Kathmandu)", + "validFor": null, + "value": "Asia/Kathmandu" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:30) India Standard Time (Asia/Colombo)", + "validFor": null, + "value": "Asia/Colombo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:30) India Standard Time (Asia/Kolkata)", + "validFor": null, + "value": "Asia/Kolkata" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Mawson Time (Antarctica/Mawson)", + "validFor": null, + "value": "Antarctica/Mawson" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) West Kazakhstan Time (Asia/Aqtau)", + "validFor": null, + "value": "Asia/Aqtau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) West Kazakhstan Time (Asia/Aqtobe)", + "validFor": null, + "value": "Asia/Aqtobe" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Turkmenistan Standard Time (Asia/Ashgabat)", + "validFor": null, + "value": "Asia/Ashgabat" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) West Kazakhstan Time (Asia/Atyrau)", + "validFor": null, + "value": "Asia/Atyrau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Tajikistan Time (Asia/Dushanbe)", + "validFor": null, + "value": "Asia/Dushanbe" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Pakistan Standard Time (Asia/Karachi)", + "validFor": null, + "value": "Asia/Karachi" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) West Kazakhstan Time (Asia/Oral)", + "validFor": null, + "value": "Asia/Oral" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) West Kazakhstan Time (Asia/Qyzylorda)", + "validFor": null, + "value": "Asia/Qyzylorda" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Uzbekistan Standard Time (Asia/Samarkand)", + "validFor": null, + "value": "Asia/Samarkand" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Uzbekistan Standard Time (Asia/Tashkent)", + "validFor": null, + "value": "Asia/Tashkent" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Yekaterinburg Standard Time (Asia/Yekaterinburg)", + "validFor": null, + "value": "Asia/Yekaterinburg" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) French Southern & Antarctic Time (Indian/Kerguelen)", + "validFor": null, + "value": "Indian/Kerguelen" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+05:00) Maldives Time (Indian/Maldives)", + "validFor": null, + "value": "Indian/Maldives" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:30) Afghanistan Time (Asia/Kabul)", + "validFor": null, + "value": "Asia/Kabul" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Azerbaijan Standard Time (Asia/Baku)", + "validFor": null, + "value": "Asia/Baku" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Gulf Standard Time (Asia/Dubai)", + "validFor": null, + "value": "Asia/Dubai" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Gulf Standard Time (Asia/Muscat)", + "validFor": null, + "value": "Asia/Muscat" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Georgia Standard Time (Asia/Tbilisi)", + "validFor": null, + "value": "Asia/Tbilisi" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Armenia Standard Time (Asia/Yerevan)", + "validFor": null, + "value": "Asia/Yerevan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Samara Standard Time (Europe/Astrakhan)", + "validFor": null, + "value": "Europe/Astrakhan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Samara Standard Time (Europe/Samara)", + "validFor": null, + "value": "Europe/Samara" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Moscow Standard Time + 1 (Europe/Saratov)", + "validFor": null, + "value": "Europe/Saratov" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Moscow Standard Time + 1 (Europe/Ulyanovsk)", + "validFor": null, + "value": "Europe/Ulyanovsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Seychelles Time (Indian/Mahe)", + "validFor": null, + "value": "Indian/Mahe" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Mauritius Standard Time (Indian/Mauritius)", + "validFor": null, + "value": "Indian/Mauritius" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+04:00) Réunion Time (Indian/Reunion)", + "validFor": null, + "value": "Indian/Reunion" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Africa/Addis_Ababa)", + "validFor": null, + "value": "Africa/Addis_Ababa" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Africa/Asmera)", + "validFor": null, + "value": "Africa/Asmera" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Standard Time (Africa/Cairo)", + "validFor": null, + "value": "Africa/Cairo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Africa/Dar_es_Salaam)", + "validFor": null, + "value": "Africa/Dar_es_Salaam" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Africa/Djibouti)", + "validFor": null, + "value": "Africa/Djibouti" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Africa/Kampala)", + "validFor": null, + "value": "Africa/Kampala" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Africa/Mogadishu)", + "validFor": null, + "value": "Africa/Mogadishu" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Africa/Nairobi)", + "validFor": null, + "value": "Africa/Nairobi" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Syowa Time (Antarctica/Syowa)", + "validFor": null, + "value": "Antarctica/Syowa" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Arabian Standard Time (Asia/Aden)", + "validFor": null, + "value": "Asia/Aden" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Standard Time (Asia/Amman)", + "validFor": null, + "value": "Asia/Amman" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Arabian Standard Time (Asia/Baghdad)", + "validFor": null, + "value": "Asia/Baghdad" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Arabian Standard Time (Asia/Bahrain)", + "validFor": null, + "value": "Asia/Bahrain" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Asia/Beirut)", + "validFor": null, + "value": "Asia/Beirut" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Asia/Famagusta)", + "validFor": null, + "value": "Asia/Famagusta" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Asia/Gaza)", + "validFor": null, + "value": "Asia/Gaza" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Asia/Hebron)", + "validFor": null, + "value": "Asia/Hebron" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Israel Daylight Time (Asia/Jerusalem)", + "validFor": null, + "value": "Asia/Jerusalem" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Arabian Standard Time (Asia/Kuwait)", + "validFor": null, + "value": "Asia/Kuwait" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Asia/Nicosia)", + "validFor": null, + "value": "Asia/Nicosia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Arabian Standard Time (Asia/Qatar)", + "validFor": null, + "value": "Asia/Qatar" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Arabian Standard Time (Asia/Riyadh)", + "validFor": null, + "value": "Asia/Riyadh" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Athens)", + "validFor": null, + "value": "Europe/Athens" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Bucharest)", + "validFor": null, + "value": "Europe/Bucharest" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Chisinau)", + "validFor": null, + "value": "Europe/Chisinau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Helsinki)", + "validFor": null, + "value": "Europe/Helsinki" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Standard Time (Europe/Istanbul)", + "validFor": null, + "value": "Europe/Istanbul" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Kyiv)", + "validFor": null, + "value": "Europe/Kiev" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Moscow Standard Time (Europe/Kirov)", + "validFor": null, + "value": "Europe/Kirov" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Mariehamn)", + "validFor": null, + "value": "Europe/Mariehamn" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Moscow Standard Time (Europe/Minsk)", + "validFor": null, + "value": "Europe/Minsk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Moscow Standard Time (Europe/Moscow)", + "validFor": null, + "value": "Europe/Moscow" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Riga)", + "validFor": null, + "value": "Europe/Riga" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Sofia)", + "validFor": null, + "value": "Europe/Sofia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Tallinn)", + "validFor": null, + "value": "Europe/Tallinn" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Uzhgorod)", + "validFor": null, + "value": "Europe/Uzhgorod" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Vilnius)", + "validFor": null, + "value": "Europe/Vilnius" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Volgograd Standard Time (Europe/Volgograd)", + "validFor": null, + "value": "Europe/Volgograd" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) Eastern European Summer Time (Europe/Zaporozhye)", + "validFor": null, + "value": "Europe/Zaporozhye" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Indian/Antananarivo)", + "validFor": null, + "value": "Indian/Antananarivo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Indian/Comoro)", + "validFor": null, + "value": "Indian/Comoro" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+03:00) East Africa Time (Indian/Mayotte)", + "validFor": null, + "value": "Indian/Mayotte" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Blantyre)", + "validFor": null, + "value": "Africa/Blantyre" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Bujumbura)", + "validFor": null, + "value": "Africa/Bujumbura" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Africa/Ceuta)", + "validFor": null, + "value": "Africa/Ceuta" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Gaborone)", + "validFor": null, + "value": "Africa/Gaborone" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Harare)", + "validFor": null, + "value": "Africa/Harare" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) South Africa Standard Time (Africa/Johannesburg)", + "validFor": null, + "value": "Africa/Johannesburg" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Juba)", + "validFor": null, + "value": "Africa/Juba" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Kigali)", + "validFor": null, + "value": "Africa/Kigali" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Lubumbashi)", + "validFor": null, + "value": "Africa/Lubumbashi" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Lusaka)", + "validFor": null, + "value": "Africa/Lusaka" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Maputo)", + "validFor": null, + "value": "Africa/Maputo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) South Africa Standard Time (Africa/Maseru)", + "validFor": null, + "value": "Africa/Maseru" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) South Africa Standard Time (Africa/Mbabane)", + "validFor": null, + "value": "Africa/Mbabane" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Eastern European Standard Time (Africa/Tripoli)", + "validFor": null, + "value": "Africa/Tripoli" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central Africa Time (Africa/Windhoek)", + "validFor": null, + "value": "Africa/Windhoek" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Antarctica/Troll)", + "validFor": null, + "value": "Antarctica/Troll" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Arctic/Longyearbyen)", + "validFor": null, + "value": "Arctic/Longyearbyen" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Amsterdam)", + "validFor": null, + "value": "Europe/Amsterdam" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Andorra)", + "validFor": null, + "value": "Europe/Andorra" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Belgrade)", + "validFor": null, + "value": "Europe/Belgrade" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Berlin)", + "validFor": null, + "value": "Europe/Berlin" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Bratislava)", + "validFor": null, + "value": "Europe/Bratislava" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Brussels)", + "validFor": null, + "value": "Europe/Brussels" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Budapest)", + "validFor": null, + "value": "Europe/Budapest" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Busingen)", + "validFor": null, + "value": "Europe/Busingen" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Copenhagen)", + "validFor": null, + "value": "Europe/Copenhagen" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Gibraltar)", + "validFor": null, + "value": "Europe/Gibraltar" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Eastern European Standard Time (Europe/Kaliningrad)", + "validFor": null, + "value": "Europe/Kaliningrad" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Ljubljana)", + "validFor": null, + "value": "Europe/Ljubljana" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Luxembourg)", + "validFor": null, + "value": "Europe/Luxembourg" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Madrid)", + "validFor": null, + "value": "Europe/Madrid" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Malta)", + "validFor": null, + "value": "Europe/Malta" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Monaco)", + "validFor": null, + "value": "Europe/Monaco" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Oslo)", + "validFor": null, + "value": "Europe/Oslo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Paris)", + "validFor": null, + "value": "Europe/Paris" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Podgorica)", + "validFor": null, + "value": "Europe/Podgorica" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Prague)", + "validFor": null, + "value": "Europe/Prague" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Rome)", + "validFor": null, + "value": "Europe/Rome" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/San_Marino)", + "validFor": null, + "value": "Europe/San_Marino" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Sarajevo)", + "validFor": null, + "value": "Europe/Sarajevo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Skopje)", + "validFor": null, + "value": "Europe/Skopje" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Stockholm)", + "validFor": null, + "value": "Europe/Stockholm" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Tirane)", + "validFor": null, + "value": "Europe/Tirane" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Vaduz)", + "validFor": null, + "value": "Europe/Vaduz" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Vatican)", + "validFor": null, + "value": "Europe/Vatican" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Vienna)", + "validFor": null, + "value": "Europe/Vienna" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Warsaw)", + "validFor": null, + "value": "Europe/Warsaw" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Zagreb)", + "validFor": null, + "value": "Europe/Zagreb" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+02:00) Central European Summer Time (Europe/Zurich)", + "validFor": null, + "value": "Europe/Zurich" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Central European Standard Time (Africa/Algiers)", + "validFor": null, + "value": "Africa/Algiers" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Bangui)", + "validFor": null, + "value": "Africa/Bangui" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Brazzaville)", + "validFor": null, + "value": "Africa/Brazzaville" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Western European Summer Time (Africa/Casablanca)", + "validFor": null, + "value": "Africa/Casablanca" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Douala)", + "validFor": null, + "value": "Africa/Douala" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Western European Summer Time (Africa/El_Aaiun)", + "validFor": null, + "value": "Africa/El_Aaiun" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Kinshasa)", + "validFor": null, + "value": "Africa/Kinshasa" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Lagos)", + "validFor": null, + "value": "Africa/Lagos" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Libreville)", + "validFor": null, + "value": "Africa/Libreville" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Luanda)", + "validFor": null, + "value": "Africa/Luanda" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Malabo)", + "validFor": null, + "value": "Africa/Malabo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Ndjamena)", + "validFor": null, + "value": "Africa/Ndjamena" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Niamey)", + "validFor": null, + "value": "Africa/Niamey" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) West Africa Standard Time (Africa/Porto-Novo)", + "validFor": null, + "value": "Africa/Porto-Novo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Central European Standard Time (Africa/Tunis)", + "validFor": null, + "value": "Africa/Tunis" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Western European Summer Time (Atlantic/Canary)", + "validFor": null, + "value": "Atlantic/Canary" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Western European Summer Time (Atlantic/Faeroe)", + "validFor": null, + "value": "Atlantic/Faeroe" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Western European Summer Time (Atlantic/Madeira)", + "validFor": null, + "value": "Atlantic/Madeira" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Irish Standard Time (Europe/Dublin)", + "validFor": null, + "value": "Europe/Dublin" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) British Summer Time (Europe/Guernsey)", + "validFor": null, + "value": "Europe/Guernsey" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) British Summer Time (Europe/Isle_of_Man)", + "validFor": null, + "value": "Europe/Isle_of_Man" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) British Summer Time (Europe/Jersey)", + "validFor": null, + "value": "Europe/Jersey" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) Western European Summer Time (Europe/Lisbon)", + "validFor": null, + "value": "Europe/Lisbon" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+01:00) British Summer Time (Europe/London)", + "validFor": null, + "value": "Europe/London" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Abidjan)", + "validFor": null, + "value": "Africa/Abidjan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Accra)", + "validFor": null, + "value": "Africa/Accra" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Bamako)", + "validFor": null, + "value": "Africa/Bamako" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Banjul)", + "validFor": null, + "value": "Africa/Banjul" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Bissau)", + "validFor": null, + "value": "Africa/Bissau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Conakry)", + "validFor": null, + "value": "Africa/Conakry" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Dakar)", + "validFor": null, + "value": "Africa/Dakar" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Freetown)", + "validFor": null, + "value": "Africa/Freetown" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Lome)", + "validFor": null, + "value": "Africa/Lome" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Monrovia)", + "validFor": null, + "value": "Africa/Monrovia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Nouakchott)", + "validFor": null, + "value": "Africa/Nouakchott" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Ouagadougou)", + "validFor": null, + "value": "Africa/Ouagadougou" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Africa/Sao_Tome)", + "validFor": null, + "value": "Africa/Sao_Tome" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (America/Danmarkshavn)", + "validFor": null, + "value": "America/Danmarkshavn" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) East Greenland Summer Time (America/Scoresbysund)", + "validFor": null, + "value": "America/Scoresbysund" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Azores Summer Time (Atlantic/Azores)", + "validFor": null, + "value": "Atlantic/Azores" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Atlantic/Reykjavik)", + "validFor": null, + "value": "Atlantic/Reykjavik" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (Atlantic/St_Helena)", + "validFor": null, + "value": "Atlantic/St_Helena" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT+00:00) Greenwich Mean Time (GMT)", + "validFor": null, + "value": "GMT" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-01:00) Cape Verde Standard Time (Atlantic/Cape_Verde)", + "validFor": null, + "value": "Atlantic/Cape_Verde" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-02:00) West Greenland Summer Time (America/Godthab)", + "validFor": null, + "value": "America/Godthab" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-02:00) St Pierre & Miquelon Daylight Time (America/Miquelon)", + "validFor": null, + "value": "America/Miquelon" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-02:00) Fernando de Noronha Standard Time (America/Noronha)", + "validFor": null, + "value": "America/Noronha" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-02:00) South Georgia Time (Atlantic/South_Georgia)", + "validFor": null, + "value": "Atlantic/South_Georgia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-02:30) Newfoundland Daylight Time (America/St_Johns)", + "validFor": null, + "value": "America/St_Johns" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Araguaina)", + "validFor": null, + "value": "America/Araguaina" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/Buenos_Aires)", + "validFor": null, + "value": "America/Argentina/Buenos_Aires" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/La_Rioja)", + "validFor": null, + "value": "America/Argentina/La_Rioja" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/Rio_Gallegos)", + "validFor": null, + "value": "America/Argentina/Rio_Gallegos" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/Salta)", + "validFor": null, + "value": "America/Argentina/Salta" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/San_Juan)", + "validFor": null, + "value": "America/Argentina/San_Juan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/San_Luis)", + "validFor": null, + "value": "America/Argentina/San_Luis" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/Tucuman)", + "validFor": null, + "value": "America/Argentina/Tucuman" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Argentina/Ushuaia)", + "validFor": null, + "value": "America/Argentina/Ushuaia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Bahia)", + "validFor": null, + "value": "America/Bahia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Belem)", + "validFor": null, + "value": "America/Belem" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Catamarca)", + "validFor": null, + "value": "America/Catamarca" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) French Guiana Time (America/Cayenne)", + "validFor": null, + "value": "America/Cayenne" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Cordoba)", + "validFor": null, + "value": "America/Cordoba" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Fortaleza)", + "validFor": null, + "value": "America/Fortaleza" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Atlantic Daylight Time (America/Glace_Bay)", + "validFor": null, + "value": "America/Glace_Bay" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Atlantic Daylight Time (America/Goose_Bay)", + "validFor": null, + "value": "America/Goose_Bay" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Atlantic Daylight Time (America/Halifax)", + "validFor": null, + "value": "America/Halifax" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Jujuy)", + "validFor": null, + "value": "America/Jujuy" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Maceio)", + "validFor": null, + "value": "America/Maceio" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Argentina Standard Time (America/Mendoza)", + "validFor": null, + "value": "America/Mendoza" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Atlantic Daylight Time (America/Moncton)", + "validFor": null, + "value": "America/Moncton" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Uruguay Standard Time (America/Montevideo)", + "validFor": null, + "value": "America/Montevideo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Suriname Time (America/Paramaribo)", + "validFor": null, + "value": "America/Paramaribo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Chile Standard Time (America/Punta_Arenas)", + "validFor": null, + "value": "America/Punta_Arenas" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Recife)", + "validFor": null, + "value": "America/Recife" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Santarem)", + "validFor": null, + "value": "America/Santarem" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Chile Summer Time (America/Santiago)", + "validFor": null, + "value": "America/Santiago" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Brasilia Standard Time (America/Sao_Paulo)", + "validFor": null, + "value": "America/Sao_Paulo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Atlantic Daylight Time (America/Thule)", + "validFor": null, + "value": "America/Thule" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Chile Standard Time (Antarctica/Palmer)", + "validFor": null, + "value": "Antarctica/Palmer" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Rothera Time (Antarctica/Rothera)", + "validFor": null, + "value": "Antarctica/Rothera" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Atlantic Daylight Time (Atlantic/Bermuda)", + "validFor": null, + "value": "Atlantic/Bermuda" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-03:00) Falkland Islands Standard Time (Atlantic/Stanley)", + "validFor": null, + "value": "Atlantic/Stanley" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Anguilla)", + "validFor": null, + "value": "America/Anguilla" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Antigua)", + "validFor": null, + "value": "America/Antigua" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Aruba)", + "validFor": null, + "value": "America/Aruba" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Paraguay Standard Time (America/Asuncion)", + "validFor": null, + "value": "America/Asuncion" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Barbados)", + "validFor": null, + "value": "America/Barbados" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Blanc-Sablon)", + "validFor": null, + "value": "America/Blanc-Sablon" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Amazon Standard Time (America/Boa_Vista)", + "validFor": null, + "value": "America/Boa_Vista" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Amazon Standard Time (America/Campo_Grande)", + "validFor": null, + "value": "America/Campo_Grande" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Venezuela Time (America/Caracas)", + "validFor": null, + "value": "America/Caracas" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Amazon Standard Time (America/Cuiaba)", + "validFor": null, + "value": "America/Cuiaba" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Curacao)", + "validFor": null, + "value": "America/Curacao" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Detroit)", + "validFor": null, + "value": "America/Detroit" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Dominica)", + "validFor": null, + "value": "America/Dominica" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Grand_Turk)", + "validFor": null, + "value": "America/Grand_Turk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Grenada)", + "validFor": null, + "value": "America/Grenada" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Guadeloupe)", + "validFor": null, + "value": "America/Guadeloupe" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Guyana Time (America/Guyana)", + "validFor": null, + "value": "America/Guyana" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Indiana/Indianapolis)", + "validFor": null, + "value": "America/Indiana/Indianapolis" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Indiana/Marengo)", + "validFor": null, + "value": "America/Indiana/Marengo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Indiana/Petersburg)", + "validFor": null, + "value": "America/Indiana/Petersburg" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Indiana/Vevay)", + "validFor": null, + "value": "America/Indiana/Vevay" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Indiana/Vincennes)", + "validFor": null, + "value": "America/Indiana/Vincennes" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Indiana/Winamac)", + "validFor": null, + "value": "America/Indiana/Winamac" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Iqaluit)", + "validFor": null, + "value": "America/Iqaluit" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Kentucky/Monticello)", + "validFor": null, + "value": "America/Kentucky/Monticello" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Kralendijk)", + "validFor": null, + "value": "America/Kralendijk" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Bolivia Time (America/La_Paz)", + "validFor": null, + "value": "America/La_Paz" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Louisville)", + "validFor": null, + "value": "America/Louisville" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Lower_Princes)", + "validFor": null, + "value": "America/Lower_Princes" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Amazon Standard Time (America/Manaus)", + "validFor": null, + "value": "America/Manaus" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Marigot)", + "validFor": null, + "value": "America/Marigot" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Martinique)", + "validFor": null, + "value": "America/Martinique" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Montreal)", + "validFor": null, + "value": "America/Montreal" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Montserrat)", + "validFor": null, + "value": "America/Montserrat" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Nassau)", + "validFor": null, + "value": "America/Nassau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/New_York)", + "validFor": null, + "value": "America/New_York" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Nipigon)", + "validFor": null, + "value": "America/Nipigon" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Pangnirtung)", + "validFor": null, + "value": "America/Pangnirtung" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Port-au-Prince)", + "validFor": null, + "value": "America/Port-au-Prince" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Port_of_Spain)", + "validFor": null, + "value": "America/Port_of_Spain" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Amazon Standard Time (America/Porto_Velho)", + "validFor": null, + "value": "America/Porto_Velho" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Puerto_Rico)", + "validFor": null, + "value": "America/Puerto_Rico" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Santo_Domingo)", + "validFor": null, + "value": "America/Santo_Domingo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/St_Barthelemy)", + "validFor": null, + "value": "America/St_Barthelemy" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/St_Kitts)", + "validFor": null, + "value": "America/St_Kitts" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/St_Lucia)", + "validFor": null, + "value": "America/St_Lucia" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/St_Thomas)", + "validFor": null, + "value": "America/St_Thomas" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/St_Vincent)", + "validFor": null, + "value": "America/St_Vincent" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Thunder_Bay)", + "validFor": null, + "value": "America/Thunder_Bay" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Eastern Daylight Time (America/Toronto)", + "validFor": null, + "value": "America/Toronto" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-04:00) Atlantic Standard Time (America/Tortola)", + "validFor": null, + "value": "America/Tortola" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Colombia Standard Time (America/Bogota)", + "validFor": null, + "value": "America/Bogota" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Eastern Standard Time (America/Cancun)", + "validFor": null, + "value": "America/Cancun" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Eastern Standard Time (America/Cayman)", + "validFor": null, + "value": "America/Cayman" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Chicago)", + "validFor": null, + "value": "America/Chicago" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Eastern Standard Time (America/Coral_Harbour)", + "validFor": null, + "value": "America/Coral_Harbour" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Acre Standard Time (America/Eirunepe)", + "validFor": null, + "value": "America/Eirunepe" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Ecuador Time (America/Guayaquil)", + "validFor": null, + "value": "America/Guayaquil" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Indiana/Knox)", + "validFor": null, + "value": "America/Indiana/Knox" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Indiana/Tell_City)", + "validFor": null, + "value": "America/Indiana/Tell_City" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Eastern Standard Time (America/Jamaica)", + "validFor": null, + "value": "America/Jamaica" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Peru Standard Time (America/Lima)", + "validFor": null, + "value": "America/Lima" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Matamoros)", + "validFor": null, + "value": "America/Matamoros" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Menominee)", + "validFor": null, + "value": "America/Menominee" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/North_Dakota/Beulah)", + "validFor": null, + "value": "America/North_Dakota/Beulah" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/North_Dakota/Center)", + "validFor": null, + "value": "America/North_Dakota/Center" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/North_Dakota/New_Salem)", + "validFor": null, + "value": "America/North_Dakota/New_Salem" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Mountain Daylight Time (America/Ojinaga)", + "validFor": null, + "value": "America/Ojinaga" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Eastern Standard Time (America/Panama)", + "validFor": null, + "value": "America/Panama" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Rainy_River)", + "validFor": null, + "value": "America/Rainy_River" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Rankin_Inlet)", + "validFor": null, + "value": "America/Rankin_Inlet" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Resolute)", + "validFor": null, + "value": "America/Resolute" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Acre Standard Time (America/Rio_Branco)", + "validFor": null, + "value": "America/Rio_Branco" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Central Daylight Time (America/Winnipeg)", + "validFor": null, + "value": "America/Winnipeg" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-05:00) Easter Island Summer Time (Pacific/Easter)", + "validFor": null, + "value": "Pacific/Easter" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Bahia_Banderas)", + "validFor": null, + "value": "America/Bahia_Banderas" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Belize)", + "validFor": null, + "value": "America/Belize" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Mountain Daylight Time (America/Boise)", + "validFor": null, + "value": "America/Boise" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Mountain Daylight Time (America/Cambridge_Bay)", + "validFor": null, + "value": "America/Cambridge_Bay" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Mexican Pacific Standard Time (America/Chihuahua)", + "validFor": null, + "value": "America/Chihuahua" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Costa_Rica)", + "validFor": null, + "value": "America/Costa_Rica" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Mountain Daylight Time (America/Denver)", + "validFor": null, + "value": "America/Denver" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Mountain Daylight Time (America/Edmonton)", + "validFor": null, + "value": "America/Edmonton" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/El_Salvador)", + "validFor": null, + "value": "America/El_Salvador" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Guatemala)", + "validFor": null, + "value": "America/Guatemala" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Mountain Daylight Time (America/Inuvik)", + "validFor": null, + "value": "America/Inuvik" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Managua)", + "validFor": null, + "value": "America/Managua" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Merida)", + "validFor": null, + "value": "America/Merida" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Mexico_City)", + "validFor": null, + "value": "America/Mexico_City" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Monterrey)", + "validFor": null, + "value": "America/Monterrey" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Regina)", + "validFor": null, + "value": "America/Regina" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Swift_Current)", + "validFor": null, + "value": "America/Swift_Current" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Central Standard Time (America/Tegucigalpa)", + "validFor": null, + "value": "America/Tegucigalpa" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Mountain Daylight Time (America/Yellowknife)", + "validFor": null, + "value": "America/Yellowknife" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-06:00) Galapagos Time (Pacific/Galapagos)", + "validFor": null, + "value": "Pacific/Galapagos" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Mountain Standard Time (America/Creston)", + "validFor": null, + "value": "America/Creston" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Yukon Time (America/Dawson)", + "validFor": null, + "value": "America/Dawson" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Mountain Standard Time (America/Dawson_Creek)", + "validFor": null, + "value": "America/Dawson_Creek" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Mountain Standard Time (America/Fort_Nelson)", + "validFor": null, + "value": "America/Fort_Nelson" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Mexican Pacific Standard Time (America/Hermosillo)", + "validFor": null, + "value": "America/Hermosillo" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Pacific Daylight Time (America/Los_Angeles)", + "validFor": null, + "value": "America/Los_Angeles" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Mexican Pacific Standard Time (America/Mazatlan)", + "validFor": null, + "value": "America/Mazatlan" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Mountain Standard Time (America/Phoenix)", + "validFor": null, + "value": "America/Phoenix" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Northwest Mexico Daylight Time (America/Santa_Isabel)", + "validFor": null, + "value": "America/Santa_Isabel" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Pacific Daylight Time (America/Tijuana)", + "validFor": null, + "value": "America/Tijuana" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Pacific Daylight Time (America/Vancouver)", + "validFor": null, + "value": "America/Vancouver" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-07:00) Yukon Time (America/Whitehorse)", + "validFor": null, + "value": "America/Whitehorse" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-08:00) Alaska Daylight Time (America/Anchorage)", + "validFor": null, + "value": "America/Anchorage" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-08:00) Alaska Daylight Time (America/Juneau)", + "validFor": null, + "value": "America/Juneau" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-08:00) Alaska Daylight Time (America/Metlakatla)", + "validFor": null, + "value": "America/Metlakatla" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-08:00) Alaska Daylight Time (America/Nome)", + "validFor": null, + "value": "America/Nome" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-08:00) Alaska Daylight Time (America/Sitka)", + "validFor": null, + "value": "America/Sitka" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-08:00) Alaska Daylight Time (America/Yakutat)", + "validFor": null, + "value": "America/Yakutat" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-08:00) Pitcairn Time (Pacific/Pitcairn)", + "validFor": null, + "value": "Pacific/Pitcairn" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-09:00) Hawaii-Aleutian Daylight Time (America/Adak)", + "validFor": null, + "value": "America/Adak" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-09:00) Gambier Time (Pacific/Gambier)", + "validFor": null, + "value": "Pacific/Gambier" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-09:30) Marquesas Time (Pacific/Marquesas)", + "validFor": null, + "value": "Pacific/Marquesas" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-10:00) Hawaii-Aleutian Standard Time (Pacific/Honolulu)", + "validFor": null, + "value": "Pacific/Honolulu" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-10:00) Hawaii-Aleutian Standard Time (Pacific/Johnston)", + "validFor": null, + "value": "Pacific/Johnston" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-10:00) Cook Islands Standard Time (Pacific/Rarotonga)", + "validFor": null, + "value": "Pacific/Rarotonga" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-10:00) Tahiti Time (Pacific/Tahiti)", + "validFor": null, + "value": "Pacific/Tahiti" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-11:00) Samoa Standard Time (Pacific/Midway)", + "validFor": null, + "value": "Pacific/Midway" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-11:00) Niue Time (Pacific/Niue)", + "validFor": null, + "value": "Pacific/Niue" + }, + { + "active": true, + "defaultValue": false, + "label": "(GMT-11:00) Samoa Standard Time (Pacific/Pago_Pago)", + "validFor": null, + "value": "Pacific/Pago_Pago" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Role ID", + "name": "UserRoleId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "UserRole" + ], + "relationshipName": "UserRole", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Locale", + "name": "LocaleSidKey", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Afrikaans (South Africa)", + "validFor": null, + "value": "af_ZA" + }, + { + "active": true, + "defaultValue": false, + "label": "Albanian (Albania)", + "validFor": null, + "value": "sq_AL" + }, + { + "active": true, + "defaultValue": false, + "label": "Amharic (Ethiopia)", + "validFor": null, + "value": "am_ET" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (Algeria)", + "validFor": null, + "value": "ar_DZ" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (Bahrain)", + "validFor": null, + "value": "ar_BH" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (Egypt)", + "validFor": null, + "value": "ar_EG" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (Iraq)", + "validFor": null, + "value": "ar_IQ" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (Jordan)", + "validFor": null, + "value": "ar_JO" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (Kuwait)", + "validFor": null, + "value": "ar_KW" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (Lebanon)", + "validFor": null, + "value": "ar_LB" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (Libya)", + "validFor": null, + "value": "ar_LY" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (Morocco)", + "validFor": null, + "value": "ar_MA" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (Oman)", + "validFor": null, + "value": "ar_OM" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (Qatar)", + "validFor": null, + "value": "ar_QA" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (Saudi Arabia)", + "validFor": null, + "value": "ar_SA" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (Tunisia)", + "validFor": null, + "value": "ar_TN" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (United Arab Emirates)", + "validFor": null, + "value": "ar_AE" + }, + { + "active": true, + "defaultValue": false, + "label": "Arabic (Yemen)", + "validFor": null, + "value": "ar_YE" + }, + { + "active": true, + "defaultValue": false, + "label": "Armenian (Armenia)", + "validFor": null, + "value": "hy_AM" + }, + { + "active": true, + "defaultValue": false, + "label": "Azerbaijani (Azerbaijan)", + "validFor": null, + "value": "az_AZ" + }, + { + "active": true, + "defaultValue": false, + "label": "Bangla (Bangladesh)", + "validFor": null, + "value": "bn_BD" + }, + { + "active": true, + "defaultValue": false, + "label": "Bangla (India)", + "validFor": null, + "value": "bn_IN" + }, + { + "active": true, + "defaultValue": false, + "label": "Basque (Spain)", + "validFor": null, + "value": "eu_ES" + }, + { + "active": true, + "defaultValue": false, + "label": "Belarusian (Belarus)", + "validFor": null, + "value": "be_BY" + }, + { + "active": true, + "defaultValue": false, + "label": "Bosnian (Bosnia & Herzegovina)", + "validFor": null, + "value": "bs_BA" + }, + { + "active": true, + "defaultValue": false, + "label": "Bulgarian (Bulgaria)", + "validFor": null, + "value": "bg_BG" + }, + { + "active": true, + "defaultValue": false, + "label": "Burmese (Myanmar [Burma])", + "validFor": null, + "value": "my_MM" + }, + { + "active": true, + "defaultValue": false, + "label": "Catalan (Spain)", + "validFor": null, + "value": "ca_ES" + }, + { + "active": true, + "defaultValue": false, + "label": "Chinese (China, Pinyin Ordering)", + "validFor": null, + "value": "zh_CN_PINYIN" + }, + { + "active": true, + "defaultValue": false, + "label": "Chinese (China, Stroke Ordering)", + "validFor": null, + "value": "zh_CN_STROKE" + }, + { + "active": true, + "defaultValue": false, + "label": "Chinese (China)", + "validFor": null, + "value": "zh_CN" + }, + { + "active": true, + "defaultValue": false, + "label": "Chinese (Hong Kong SAR China, Stroke Ordering)", + "validFor": null, + "value": "zh_HK_STROKE" + }, + { + "active": true, + "defaultValue": false, + "label": "Chinese (Hong Kong SAR China)", + "validFor": null, + "value": "zh_HK" + }, + { + "active": true, + "defaultValue": false, + "label": "Chinese (Macao SAR China)", + "validFor": null, + "value": "zh_MO" + }, + { + "active": true, + "defaultValue": false, + "label": "Chinese (Malaysia)", + "validFor": null, + "value": "zh_MY" + }, + { + "active": true, + "defaultValue": false, + "label": "Chinese (Singapore)", + "validFor": null, + "value": "zh_SG" + }, + { + "active": true, + "defaultValue": false, + "label": "Chinese (Taiwan, Stroke Ordering)", + "validFor": null, + "value": "zh_TW_STROKE" + }, + { + "active": true, + "defaultValue": false, + "label": "Chinese (Taiwan)", + "validFor": null, + "value": "zh_TW" + }, + { + "active": true, + "defaultValue": false, + "label": "Croatian (Croatia)", + "validFor": null, + "value": "hr_HR" + }, + { + "active": true, + "defaultValue": false, + "label": "Czech (Czechia)", + "validFor": null, + "value": "cs_CZ" + }, + { + "active": true, + "defaultValue": false, + "label": "Danish (Denmark)", + "validFor": null, + "value": "da_DK" + }, + { + "active": true, + "defaultValue": false, + "label": "Dutch (Aruba)", + "validFor": null, + "value": "nl_AW" + }, + { + "active": true, + "defaultValue": false, + "label": "Dutch (Belgium)", + "validFor": null, + "value": "nl_BE" + }, + { + "active": true, + "defaultValue": false, + "label": "Dutch (Netherlands)", + "validFor": null, + "value": "nl_NL" + }, + { + "active": true, + "defaultValue": false, + "label": "Dutch (Suriname)", + "validFor": null, + "value": "nl_SR" + }, + { + "active": true, + "defaultValue": false, + "label": "Dzongkha (Bhutan)", + "validFor": null, + "value": "dz_BT" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Antigua & Barbuda)", + "validFor": null, + "value": "en_AG" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Australia)", + "validFor": null, + "value": "en_AU" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Bahamas)", + "validFor": null, + "value": "en_BS" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Barbados)", + "validFor": null, + "value": "en_BB" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Belgium)", + "validFor": null, + "value": "en_BE" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Belize)", + "validFor": null, + "value": "en_BZ" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Bermuda)", + "validFor": null, + "value": "en_BM" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Botswana)", + "validFor": null, + "value": "en_BW" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Cameroon)", + "validFor": null, + "value": "en_CM" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Canada)", + "validFor": null, + "value": "en_CA" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Cayman Islands)", + "validFor": null, + "value": "en_KY" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Cyprus)", + "validFor": null, + "value": "en_CY" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Eritrea)", + "validFor": null, + "value": "en_ER" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Eswatini)", + "validFor": null, + "value": "en_SZ" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Falkland Islands)", + "validFor": null, + "value": "en_FK" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Fiji)", + "validFor": null, + "value": "en_FJ" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Gambia)", + "validFor": null, + "value": "en_GM" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Germany)", + "validFor": null, + "value": "en_DE" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Ghana)", + "validFor": null, + "value": "en_GH" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Gibraltar)", + "validFor": null, + "value": "en_GI" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Guyana)", + "validFor": null, + "value": "en_GY" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Hong Kong SAR China)", + "validFor": null, + "value": "en_HK" + }, + { + "active": true, + "defaultValue": false, + "label": "English (India)", + "validFor": null, + "value": "en_IN" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Indonesia)", + "validFor": null, + "value": "en_ID" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Ireland)", + "validFor": null, + "value": "en_IE" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Israel)", + "validFor": null, + "value": "en_IL" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Jamaica)", + "validFor": null, + "value": "en_JM" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Kenya)", + "validFor": null, + "value": "en_KE" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Liberia)", + "validFor": null, + "value": "en_LR" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Madagascar)", + "validFor": null, + "value": "en_MG" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Malawi)", + "validFor": null, + "value": "en_MW" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Malaysia)", + "validFor": null, + "value": "en_MY" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Malta)", + "validFor": null, + "value": "en_MT" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Mauritius)", + "validFor": null, + "value": "en_MU" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Namibia)", + "validFor": null, + "value": "en_NA" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Netherlands)", + "validFor": null, + "value": "en_NL" + }, + { + "active": true, + "defaultValue": false, + "label": "English (New Zealand)", + "validFor": null, + "value": "en_NZ" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Nigeria)", + "validFor": null, + "value": "en_NG" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Pakistan)", + "validFor": null, + "value": "en_PK" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Papua New Guinea)", + "validFor": null, + "value": "en_PG" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Philippines)", + "validFor": null, + "value": "en_PH" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Rwanda)", + "validFor": null, + "value": "en_RW" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Samoa)", + "validFor": null, + "value": "en_WS" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Seychelles)", + "validFor": null, + "value": "en_SC" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Sierra Leone)", + "validFor": null, + "value": "en_SL" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Singapore)", + "validFor": null, + "value": "en_SG" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Sint Maarten)", + "validFor": null, + "value": "en_SX" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Solomon Islands)", + "validFor": null, + "value": "en_SB" + }, + { + "active": true, + "defaultValue": false, + "label": "English (South Africa)", + "validFor": null, + "value": "en_ZA" + }, + { + "active": true, + "defaultValue": false, + "label": "English (St. Helena)", + "validFor": null, + "value": "en_SH" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Tanzania)", + "validFor": null, + "value": "en_TZ" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Tonga)", + "validFor": null, + "value": "en_TO" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Trinidad & Tobago)", + "validFor": null, + "value": "en_TT" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Uganda)", + "validFor": null, + "value": "en_UG" + }, + { + "active": true, + "defaultValue": false, + "label": "English (United Arab Emirates)", + "validFor": null, + "value": "en_AE" + }, + { + "active": true, + "defaultValue": false, + "label": "English (United Kingdom)", + "validFor": null, + "value": "en_GB" + }, + { + "active": true, + "defaultValue": false, + "label": "English (United States)", + "validFor": null, + "value": "en_US" + }, + { + "active": true, + "defaultValue": false, + "label": "English (Vanuatu)", + "validFor": null, + "value": "en_VU" + }, + { + "active": true, + "defaultValue": false, + "label": "Estonian (Estonia)", + "validFor": null, + "value": "et_EE" + }, + { + "active": true, + "defaultValue": false, + "label": "Finnish (Finland)", + "validFor": null, + "value": "fi_FI" + }, + { + "active": true, + "defaultValue": false, + "label": "French (Belgium)", + "validFor": null, + "value": "fr_BE" + }, + { + "active": true, + "defaultValue": false, + "label": "French (Canada)", + "validFor": null, + "value": "fr_CA" + }, + { + "active": true, + "defaultValue": false, + "label": "French (Comoros)", + "validFor": null, + "value": "fr_KM" + }, + { + "active": true, + "defaultValue": false, + "label": "French (France)", + "validFor": null, + "value": "fr_FR" + }, + { + "active": true, + "defaultValue": false, + "label": "French (Guinea)", + "validFor": null, + "value": "fr_GN" + }, + { + "active": true, + "defaultValue": false, + "label": "French (Haiti)", + "validFor": null, + "value": "fr_HT" + }, + { + "active": true, + "defaultValue": false, + "label": "French (Luxembourg)", + "validFor": null, + "value": "fr_LU" + }, + { + "active": true, + "defaultValue": false, + "label": "French (Mauritania)", + "validFor": null, + "value": "fr_MR" + }, + { + "active": true, + "defaultValue": false, + "label": "French (Monaco)", + "validFor": null, + "value": "fr_MC" + }, + { + "active": true, + "defaultValue": false, + "label": "French (Morocco)", + "validFor": null, + "value": "fr_MA" + }, + { + "active": true, + "defaultValue": false, + "label": "French (Switzerland)", + "validFor": null, + "value": "fr_CH" + }, + { + "active": true, + "defaultValue": false, + "label": "French (Wallis & Futuna)", + "validFor": null, + "value": "fr_WF" + }, + { + "active": true, + "defaultValue": false, + "label": "Georgian (Georgia)", + "validFor": null, + "value": "ka_GE" + }, + { + "active": true, + "defaultValue": false, + "label": "German (Austria)", + "validFor": null, + "value": "de_AT" + }, + { + "active": true, + "defaultValue": false, + "label": "German (Belgium)", + "validFor": null, + "value": "de_BE" + }, + { + "active": true, + "defaultValue": false, + "label": "German (Germany)", + "validFor": null, + "value": "de_DE" + }, + { + "active": true, + "defaultValue": false, + "label": "German (Luxembourg)", + "validFor": null, + "value": "de_LU" + }, + { + "active": true, + "defaultValue": false, + "label": "German (Switzerland)", + "validFor": null, + "value": "de_CH" + }, + { + "active": true, + "defaultValue": false, + "label": "Greek (Cyprus)", + "validFor": null, + "value": "el_CY" + }, + { + "active": true, + "defaultValue": false, + "label": "Greek (Greece)", + "validFor": null, + "value": "el_GR" + }, + { + "active": true, + "defaultValue": false, + "label": "Gujarati (India)", + "validFor": null, + "value": "gu_IN" + }, + { + "active": true, + "defaultValue": false, + "label": "Haitian Creole (Haiti)", + "validFor": null, + "value": "ht_HT" + }, + { + "active": true, + "defaultValue": false, + "label": "Haitian Creole (United States)", + "validFor": null, + "value": "ht_US" + }, + { + "active": true, + "defaultValue": false, + "label": "Hawaiian (United States)", + "validFor": null, + "value": "haw_US" + }, + { + "active": true, + "defaultValue": false, + "label": "Hebrew (Israel)", + "validFor": null, + "value": "iw_IL" + }, + { + "active": true, + "defaultValue": false, + "label": "Hindi (India)", + "validFor": null, + "value": "hi_IN" + }, + { + "active": true, + "defaultValue": false, + "label": "Hmong (United States)", + "validFor": null, + "value": "hmn_US" + }, + { + "active": true, + "defaultValue": false, + "label": "Hungarian (Hungary)", + "validFor": null, + "value": "hu_HU" + }, + { + "active": true, + "defaultValue": false, + "label": "Icelandic (Iceland)", + "validFor": null, + "value": "is_IS" + }, + { + "active": true, + "defaultValue": false, + "label": "Indonesian (Indonesia)", + "validFor": null, + "value": "in_ID" + }, + { + "active": true, + "defaultValue": false, + "label": "Irish (Ireland)", + "validFor": null, + "value": "ga_IE" + }, + { + "active": true, + "defaultValue": false, + "label": "Italian (Italy)", + "validFor": null, + "value": "it_IT" + }, + { + "active": true, + "defaultValue": false, + "label": "Italian (Switzerland)", + "validFor": null, + "value": "it_CH" + }, + { + "active": true, + "defaultValue": false, + "label": "Japanese (Japan)", + "validFor": null, + "value": "ja_JP" + }, + { + "active": true, + "defaultValue": false, + "label": "Kalaallisut (Greenland)", + "validFor": null, + "value": "kl_GL" + }, + { + "active": true, + "defaultValue": false, + "label": "Kannada (India)", + "validFor": null, + "value": "kn_IN" + }, + { + "active": true, + "defaultValue": false, + "label": "Kazakh (Kazakhstan)", + "validFor": null, + "value": "kk_KZ" + }, + { + "active": true, + "defaultValue": false, + "label": "Khmer (Cambodia)", + "validFor": null, + "value": "km_KH" + }, + { + "active": true, + "defaultValue": false, + "label": "Korean (South Korea)", + "validFor": null, + "value": "ko_KR" + }, + { + "active": true, + "defaultValue": false, + "label": "Kyrgyz (Kyrgyzstan)", + "validFor": null, + "value": "ky_KG" + }, + { + "active": true, + "defaultValue": false, + "label": "Lao (Laos)", + "validFor": null, + "value": "lo_LA" + }, + { + "active": true, + "defaultValue": false, + "label": "Latvian (Latvia)", + "validFor": null, + "value": "lv_LV" + }, + { + "active": true, + "defaultValue": false, + "label": "Lithuanian (Lithuania)", + "validFor": null, + "value": "lt_LT" + }, + { + "active": true, + "defaultValue": false, + "label": "Luba-Katanga (Congo - Kinshasa)", + "validFor": null, + "value": "lu_CD" + }, + { + "active": true, + "defaultValue": false, + "label": "Luxembourgish (Luxembourg)", + "validFor": null, + "value": "lb_LU" + }, + { + "active": true, + "defaultValue": false, + "label": "Macedonian (North Macedonia)", + "validFor": null, + "value": "mk_MK" + }, + { + "active": true, + "defaultValue": false, + "label": "Malay (Brunei)", + "validFor": null, + "value": "ms_BN" + }, + { + "active": true, + "defaultValue": false, + "label": "Malay (Malaysia)", + "validFor": null, + "value": "ms_MY" + }, + { + "active": true, + "defaultValue": false, + "label": "Malayalam (India)", + "validFor": null, + "value": "ml_IN" + }, + { + "active": true, + "defaultValue": false, + "label": "Maltese (Malta)", + "validFor": null, + "value": "mt_MT" + }, + { + "active": true, + "defaultValue": false, + "label": "Marathi (India)", + "validFor": null, + "value": "mr_IN" + }, + { + "active": true, + "defaultValue": false, + "label": "Montenegrin (Montenegro)", + "validFor": null, + "value": "sh_ME" + }, + { + "active": true, + "defaultValue": false, + "label": "Nepali (Nepal)", + "validFor": null, + "value": "ne_NP" + }, + { + "active": true, + "defaultValue": false, + "label": "Norwegian (Norway)", + "validFor": null, + "value": "no_NO" + }, + { + "active": true, + "defaultValue": false, + "label": "Pashto (Afghanistan)", + "validFor": null, + "value": "ps_AF" + }, + { + "active": true, + "defaultValue": false, + "label": "Polish (Poland)", + "validFor": null, + "value": "pl_PL" + }, + { + "active": true, + "defaultValue": false, + "label": "Portuguese (Angola)", + "validFor": null, + "value": "pt_AO" + }, + { + "active": true, + "defaultValue": false, + "label": "Portuguese (Brazil)", + "validFor": null, + "value": "pt_BR" + }, + { + "active": true, + "defaultValue": false, + "label": "Portuguese (Cape Verde)", + "validFor": null, + "value": "pt_CV" + }, + { + "active": true, + "defaultValue": false, + "label": "Portuguese (Mozambique)", + "validFor": null, + "value": "pt_MZ" + }, + { + "active": true, + "defaultValue": false, + "label": "Portuguese (Portugal)", + "validFor": null, + "value": "pt_PT" + }, + { + "active": true, + "defaultValue": false, + "label": "Portuguese (São Tomé & Príncipe)", + "validFor": null, + "value": "pt_ST" + }, + { + "active": true, + "defaultValue": false, + "label": "Punjabi (India)", + "validFor": null, + "value": "pa_IN" + }, + { + "active": true, + "defaultValue": false, + "label": "Romanian (Moldova)", + "validFor": null, + "value": "ro_MD" + }, + { + "active": true, + "defaultValue": false, + "label": "Romanian (Romania)", + "validFor": null, + "value": "ro_RO" + }, + { + "active": true, + "defaultValue": false, + "label": "Romansh (Switzerland)", + "validFor": null, + "value": "rm_CH" + }, + { + "active": true, + "defaultValue": false, + "label": "Rundi (Burundi)", + "validFor": null, + "value": "rn_BI" + }, + { + "active": true, + "defaultValue": false, + "label": "Russian (Armenia)", + "validFor": null, + "value": "ru_AM" + }, + { + "active": true, + "defaultValue": false, + "label": "Russian (Belarus)", + "validFor": null, + "value": "ru_BY" + }, + { + "active": true, + "defaultValue": false, + "label": "Russian (Kazakhstan)", + "validFor": null, + "value": "ru_KZ" + }, + { + "active": true, + "defaultValue": false, + "label": "Russian (Kyrgyzstan)", + "validFor": null, + "value": "ru_KG" + }, + { + "active": true, + "defaultValue": false, + "label": "Russian (Lithuania)", + "validFor": null, + "value": "ru_LT" + }, + { + "active": true, + "defaultValue": false, + "label": "Russian (Moldova)", + "validFor": null, + "value": "ru_MD" + }, + { + "active": true, + "defaultValue": false, + "label": "Russian (Poland)", + "validFor": null, + "value": "ru_PL" + }, + { + "active": true, + "defaultValue": false, + "label": "Russian (Russia)", + "validFor": null, + "value": "ru_RU" + }, + { + "active": true, + "defaultValue": false, + "label": "Russian (Ukraine)", + "validFor": null, + "value": "ru_UA" + }, + { + "active": true, + "defaultValue": false, + "label": "Samoan (Samoa)", + "validFor": null, + "value": "sm_WS" + }, + { + "active": true, + "defaultValue": false, + "label": "Samoan (United States)", + "validFor": null, + "value": "sm_US" + }, + { + "active": true, + "defaultValue": false, + "label": "Serbian (Cyrillic) (Bosnia and Herzegovina)", + "validFor": null, + "value": "sr_BA" + }, + { + "active": true, + "defaultValue": false, + "label": "Serbian (Cyrillic) (Serbia)", + "validFor": null, + "value": "sr_CS" + }, + { + "active": true, + "defaultValue": false, + "label": "Serbian (Latin) (Bosnia and Herzegovina)", + "validFor": null, + "value": "sh_BA" + }, + { + "active": true, + "defaultValue": false, + "label": "Serbian (Latin) (Serbia)", + "validFor": null, + "value": "sh_CS" + }, + { + "active": true, + "defaultValue": false, + "label": "Serbian (Serbia)", + "validFor": null, + "value": "sr_RS" + }, + { + "active": true, + "defaultValue": false, + "label": "Slovak (Slovakia)", + "validFor": null, + "value": "sk_SK" + }, + { + "active": true, + "defaultValue": false, + "label": "Slovenian (Slovenia)", + "validFor": null, + "value": "sl_SI" + }, + { + "active": true, + "defaultValue": false, + "label": "Somali (Djibouti)", + "validFor": null, + "value": "so_DJ" + }, + { + "active": true, + "defaultValue": false, + "label": "Somali (Somalia)", + "validFor": null, + "value": "so_SO" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Argentina)", + "validFor": null, + "value": "es_AR" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Bolivia)", + "validFor": null, + "value": "es_BO" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Chile)", + "validFor": null, + "value": "es_CL" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Colombia)", + "validFor": null, + "value": "es_CO" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Costa Rica)", + "validFor": null, + "value": "es_CR" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Dominican Republic)", + "validFor": null, + "value": "es_DO" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Ecuador)", + "validFor": null, + "value": "es_EC" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (El Salvador)", + "validFor": null, + "value": "es_SV" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Guatemala)", + "validFor": null, + "value": "es_GT" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Honduras)", + "validFor": null, + "value": "es_HN" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Mexico)", + "validFor": null, + "value": "es_MX" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Nicaragua)", + "validFor": null, + "value": "es_NI" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Panama)", + "validFor": null, + "value": "es_PA" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Paraguay)", + "validFor": null, + "value": "es_PY" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Peru)", + "validFor": null, + "value": "es_PE" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Puerto Rico)", + "validFor": null, + "value": "es_PR" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Spain)", + "validFor": null, + "value": "es_ES" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (United States)", + "validFor": null, + "value": "es_US" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Uruguay)", + "validFor": null, + "value": "es_UY" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Venezuela)", + "validFor": null, + "value": "es_VE" + }, + { + "active": true, + "defaultValue": false, + "label": "Swahili (Kenya)", + "validFor": null, + "value": "sw_KE" + }, + { + "active": true, + "defaultValue": false, + "label": "Swedish (Sweden)", + "validFor": null, + "value": "sv_SE" + }, + { + "active": true, + "defaultValue": false, + "label": "Tagalog (Philippines)", + "validFor": null, + "value": "tl_PH" + }, + { + "active": true, + "defaultValue": false, + "label": "Tajik (Tajikistan)", + "validFor": null, + "value": "tg_TJ" + }, + { + "active": true, + "defaultValue": false, + "label": "Tamil (India)", + "validFor": null, + "value": "ta_IN" + }, + { + "active": true, + "defaultValue": false, + "label": "Tamil (Sri Lanka)", + "validFor": null, + "value": "ta_LK" + }, + { + "active": true, + "defaultValue": false, + "label": "Telugu (India)", + "validFor": null, + "value": "te_IN" + }, + { + "active": true, + "defaultValue": false, + "label": "Te reo (New Zealand)", + "validFor": null, + "value": "mi_NZ" + }, + { + "active": true, + "defaultValue": false, + "label": "Thai (Thailand)", + "validFor": null, + "value": "th_TH" + }, + { + "active": true, + "defaultValue": false, + "label": "Tigrinya (Ethiopia)", + "validFor": null, + "value": "ti_ET" + }, + { + "active": true, + "defaultValue": false, + "label": "Turkish (Türkiye)", + "validFor": null, + "value": "tr_TR" + }, + { + "active": true, + "defaultValue": false, + "label": "Ukrainian (Ukraine)", + "validFor": null, + "value": "uk_UA" + }, + { + "active": true, + "defaultValue": false, + "label": "Urdu (Pakistan)", + "validFor": null, + "value": "ur_PK" + }, + { + "active": true, + "defaultValue": false, + "label": "Uzbek (Latin, Uzbekistan)", + "validFor": null, + "value": "uz_LATN_UZ" + }, + { + "active": true, + "defaultValue": false, + "label": "Vietnamese (Vietnam)", + "validFor": null, + "value": "vi_VN" + }, + { + "active": true, + "defaultValue": false, + "label": "Welsh (United Kingdom)", + "validFor": null, + "value": "cy_GB" + }, + { + "active": true, + "defaultValue": false, + "label": "Xhosa (South Africa)", + "validFor": null, + "value": "xh_ZA" + }, + { + "active": true, + "defaultValue": false, + "label": "Yiddish (United States)", + "validFor": null, + "value": "ji_US" + }, + { + "active": true, + "defaultValue": false, + "label": "Yoruba (Benin)", + "validFor": null, + "value": "yo_BJ" + }, + { + "active": true, + "defaultValue": false, + "label": "Zulu (South Africa)", + "validFor": null, + "value": "zu_ZA" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Info Emails", + "name": "ReceivesInfoEmails", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Admin Info Emails", + "name": "ReceivesAdminInfoEmails", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Email Encoding", + "name": "EmailEncodingKey", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Unicode (UTF-8)", + "validFor": null, + "value": "UTF-8" + }, + { + "active": true, + "defaultValue": false, + "label": "General US & Western Europe (ISO-8859-1, ISO-LATIN-1)", + "validFor": null, + "value": "ISO-8859-1" + }, + { + "active": true, + "defaultValue": false, + "label": "Japanese (Shift-JIS)", + "validFor": null, + "value": "Shift_JIS" + }, + { + "active": true, + "defaultValue": false, + "label": "Japanese (JIS)", + "validFor": null, + "value": "ISO-2022-JP" + }, + { + "active": true, + "defaultValue": false, + "label": "Japanese (EUC)", + "validFor": null, + "value": "EUC-JP" + }, + { + "active": true, + "defaultValue": false, + "label": "Korean (ks_c_5601-1987)", + "validFor": null, + "value": "ks_c_5601-1987" + }, + { + "active": true, + "defaultValue": false, + "label": "Traditional Chinese (Big5)", + "validFor": null, + "value": "Big5" + }, + { + "active": true, + "defaultValue": false, + "label": "Simplified Chinese (GB2312)", + "validFor": null, + "value": "GB2312" + }, + { + "active": true, + "defaultValue": false, + "label": "Traditional Chinese Hong Kong (Big5-HKSCS)", + "validFor": null, + "value": "Big5-HKSCS" + }, + { + "active": true, + "defaultValue": false, + "label": "Japanese (Shift-JIS_2004)", + "validFor": null, + "value": "x-SJIS_0213" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Profile ID", + "name": "ProfileId", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "Profile" + ], + "relationshipName": "Profile", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "User Type", + "name": "UserType", + "nillable": true, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Standard", + "validFor": null, + "value": "Standard" + }, + { + "active": true, + "defaultValue": false, + "label": "Partner", + "validFor": null, + "value": "PowerPartner" + }, + { + "active": true, + "defaultValue": false, + "label": "Customer Portal Manager", + "validFor": null, + "value": "PowerCustomerSuccess" + }, + { + "active": true, + "defaultValue": false, + "label": "Customer Portal User", + "validFor": null, + "value": "CustomerSuccess" + }, + { + "active": true, + "defaultValue": false, + "label": "Guest", + "validFor": null, + "value": "Guest" + }, + { + "active": true, + "defaultValue": false, + "label": "High Volume Portal", + "validFor": null, + "value": "CspLitePortal" + }, + { + "active": true, + "defaultValue": false, + "label": "CSN Only", + "validFor": null, + "value": "CsnOnly" + }, + { + "active": true, + "defaultValue": false, + "label": "Self Service", + "validFor": null, + "value": "SelfService" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Language", + "name": "LanguageLocaleKey", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "English", + "validFor": null, + "value": "en_US" + }, + { + "active": true, + "defaultValue": false, + "label": "German", + "validFor": null, + "value": "de" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish", + "validFor": null, + "value": "es" + }, + { + "active": true, + "defaultValue": false, + "label": "French", + "validFor": null, + "value": "fr" + }, + { + "active": true, + "defaultValue": false, + "label": "Italian", + "validFor": null, + "value": "it" + }, + { + "active": true, + "defaultValue": false, + "label": "Japanese", + "validFor": null, + "value": "ja" + }, + { + "active": true, + "defaultValue": false, + "label": "Swedish", + "validFor": null, + "value": "sv" + }, + { + "active": true, + "defaultValue": false, + "label": "Korean", + "validFor": null, + "value": "ko" + }, + { + "active": true, + "defaultValue": false, + "label": "Chinese (Traditional)", + "validFor": null, + "value": "zh_TW" + }, + { + "active": true, + "defaultValue": false, + "label": "Chinese (Simplified)", + "validFor": null, + "value": "zh_CN" + }, + { + "active": true, + "defaultValue": false, + "label": "Portuguese (Brazil)", + "validFor": null, + "value": "pt_BR" + }, + { + "active": true, + "defaultValue": false, + "label": "Dutch", + "validFor": null, + "value": "nl_NL" + }, + { + "active": true, + "defaultValue": false, + "label": "Danish", + "validFor": null, + "value": "da" + }, + { + "active": true, + "defaultValue": false, + "label": "Thai", + "validFor": null, + "value": "th" + }, + { + "active": true, + "defaultValue": false, + "label": "Finnish", + "validFor": null, + "value": "fi" + }, + { + "active": true, + "defaultValue": false, + "label": "Russian", + "validFor": null, + "value": "ru" + }, + { + "active": true, + "defaultValue": false, + "label": "Spanish (Mexico)", + "validFor": null, + "value": "es_MX" + }, + { + "active": true, + "defaultValue": false, + "label": "Norwegian", + "validFor": null, + "value": "no" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Employee Number", + "name": "EmployeeNumber", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Delegated Approver ID", + "name": "DelegatedApproverId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Group", + "User" + ], + "relationshipName": null, + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Manager ID", + "name": "ManagerId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "Manager", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Login", + "name": "LastLoginDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Password Change or Reset", + "name": "LastPasswordChangeDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Created Date", + "name": "CreatedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Created By ID", + "name": "CreatedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "CreatedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Modified Date", + "name": "LastModifiedDate", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Last Modified By ID", + "name": "LastModifiedById", + "nillable": false, + "picklistValues": [], + "referenceTo": [ + "User" + ], + "relationshipName": "LastModifiedBy", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "System Modstamp", + "name": "SystemModstamp", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Failed Login Attempts", + "name": "NumberOfFailedLogins", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "int" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Offline Edition Trial Expiration Date", + "name": "OfflineTrialExpirationDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Sales Anywhere Trial Expiration Date", + "name": "OfflinePdaTrialExpirationDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Marketing User", + "name": "UserPermissionsMarketingUser", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Offline User", + "name": "UserPermissionsOfflineUser", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Auto-login To Call Center", + "name": "UserPermissionsCallCenterAutoLogin", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Salesforce CRM Content User", + "name": "UserPermissionsSFContentUser", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Knowledge User", + "name": "UserPermissionsKnowledgeUser", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Flow User", + "name": "UserPermissionsInteractionUser", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Service Cloud User", + "name": "UserPermissionsSupportUser", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Data.com User", + "name": "UserPermissionsJigsawProspectingUser", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Site.com Contributor User", + "name": "UserPermissionsSiteforceContributorUser", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Site.com Publisher User", + "name": "UserPermissionsSiteforcePublisherUser", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "WDC User", + "name": "UserPermissionsWorkDotComUserFeature", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Allow Forecasting", + "name": "ForecastEnabled", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ActivityRemindersPopup", + "name": "UserPreferencesActivityRemindersPopup", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "EventRemindersCheckboxDefault", + "name": "UserPreferencesEventRemindersCheckboxDefault", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "TaskRemindersCheckboxDefault", + "name": "UserPreferencesTaskRemindersCheckboxDefault", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ReminderSoundOff", + "name": "UserPreferencesReminderSoundOff", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisableAllFeedsEmail", + "name": "UserPreferencesDisableAllFeedsEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisableFollowersEmail", + "name": "UserPreferencesDisableFollowersEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisableProfilePostEmail", + "name": "UserPreferencesDisableProfilePostEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisableChangeCommentEmail", + "name": "UserPreferencesDisableChangeCommentEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisableLaterCommentEmail", + "name": "UserPreferencesDisableLaterCommentEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisProfPostCommentEmail", + "name": "UserPreferencesDisProfPostCommentEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ContentNoEmail", + "name": "UserPreferencesContentNoEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ContentEmailAsAndWhen", + "name": "UserPreferencesContentEmailAsAndWhen", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ApexPagesDeveloperMode", + "name": "UserPreferencesApexPagesDeveloperMode", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ReceiveNoNotificationsAsApprover", + "name": "UserPreferencesReceiveNoNotificationsAsApprover", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ReceiveNotificationsAsDelegatedApprover", + "name": "UserPreferencesReceiveNotificationsAsDelegatedApprover", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "HideCSNGetChatterMobileTask", + "name": "UserPreferencesHideCSNGetChatterMobileTask", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisableMentionsPostEmail", + "name": "UserPreferencesDisableMentionsPostEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisMentionsCommentEmail", + "name": "UserPreferencesDisMentionsCommentEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "HideCSNDesktopTask", + "name": "UserPreferencesHideCSNDesktopTask", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "HideChatterOnboardingSplash", + "name": "UserPreferencesHideChatterOnboardingSplash", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "HideSecondChatterOnboardingSplash", + "name": "UserPreferencesHideSecondChatterOnboardingSplash", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisCommentAfterLikeEmail", + "name": "UserPreferencesDisCommentAfterLikeEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisableLikeEmail", + "name": "UserPreferencesDisableLikeEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "SortFeedByComment", + "name": "UserPreferencesSortFeedByComment", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisableMessageEmail", + "name": "UserPreferencesDisableMessageEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "JigsawListUser", + "name": "UserPreferencesJigsawListUser", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisableBookmarkEmail", + "name": "UserPreferencesDisableBookmarkEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisableSharePostEmail", + "name": "UserPreferencesDisableSharePostEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "EnableAutoSubForFeeds", + "name": "UserPreferencesEnableAutoSubForFeeds", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisableFileShareNotificationsForApi", + "name": "UserPreferencesDisableFileShareNotificationsForApi", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowTitleToExternalUsers", + "name": "UserPreferencesShowTitleToExternalUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowManagerToExternalUsers", + "name": "UserPreferencesShowManagerToExternalUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowEmailToExternalUsers", + "name": "UserPreferencesShowEmailToExternalUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowWorkPhoneToExternalUsers", + "name": "UserPreferencesShowWorkPhoneToExternalUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowMobilePhoneToExternalUsers", + "name": "UserPreferencesShowMobilePhoneToExternalUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowFaxToExternalUsers", + "name": "UserPreferencesShowFaxToExternalUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowStreetAddressToExternalUsers", + "name": "UserPreferencesShowStreetAddressToExternalUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowCityToExternalUsers", + "name": "UserPreferencesShowCityToExternalUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowStateToExternalUsers", + "name": "UserPreferencesShowStateToExternalUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowPostalCodeToExternalUsers", + "name": "UserPreferencesShowPostalCodeToExternalUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowCountryToExternalUsers", + "name": "UserPreferencesShowCountryToExternalUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowProfilePicToGuestUsers", + "name": "UserPreferencesShowProfilePicToGuestUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowTitleToGuestUsers", + "name": "UserPreferencesShowTitleToGuestUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowCityToGuestUsers", + "name": "UserPreferencesShowCityToGuestUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowStateToGuestUsers", + "name": "UserPreferencesShowStateToGuestUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowPostalCodeToGuestUsers", + "name": "UserPreferencesShowPostalCodeToGuestUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowCountryToGuestUsers", + "name": "UserPreferencesShowCountryToGuestUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisableFeedbackEmail", + "name": "UserPreferencesDisableFeedbackEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisableWorkEmail", + "name": "UserPreferencesDisableWorkEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowForecastingChangeSignals", + "name": "UserPreferencesShowForecastingChangeSignals", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "HideS1BrowserUI", + "name": "UserPreferencesHideS1BrowserUI", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "DisableEndorsementEmail", + "name": "UserPreferencesDisableEndorsementEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "PathAssistantCollapsed", + "name": "UserPreferencesPathAssistantCollapsed", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "CacheDiagnostics", + "name": "UserPreferencesCacheDiagnostics", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowEmailToGuestUsers", + "name": "UserPreferencesShowEmailToGuestUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowManagerToGuestUsers", + "name": "UserPreferencesShowManagerToGuestUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowWorkPhoneToGuestUsers", + "name": "UserPreferencesShowWorkPhoneToGuestUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowMobilePhoneToGuestUsers", + "name": "UserPreferencesShowMobilePhoneToGuestUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowFaxToGuestUsers", + "name": "UserPreferencesShowFaxToGuestUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowStreetAddressToGuestUsers", + "name": "UserPreferencesShowStreetAddressToGuestUsers", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "LightningExperiencePreferred", + "name": "UserPreferencesLightningExperiencePreferred", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "PreviewLightning", + "name": "UserPreferencesPreviewLightning", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "HideEndUserOnboardingAssistantModal", + "name": "UserPreferencesHideEndUserOnboardingAssistantModal", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "HideLightningMigrationModal", + "name": "UserPreferencesHideLightningMigrationModal", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "HideSfxWelcomeMat", + "name": "UserPreferencesHideSfxWelcomeMat", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "HideBiggerPhotoCallout", + "name": "UserPreferencesHideBiggerPhotoCallout", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "GlobalNavBarWTShown", + "name": "UserPreferencesGlobalNavBarWTShown", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "GlobalNavGridMenuWTShown", + "name": "UserPreferencesGlobalNavGridMenuWTShown", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "CreateLEXAppsWTShown", + "name": "UserPreferencesCreateLEXAppsWTShown", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "FavoritesWTShown", + "name": "UserPreferencesFavoritesWTShown", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "RecordHomeSectionCollapseWTShown", + "name": "UserPreferencesRecordHomeSectionCollapseWTShown", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "RecordHomeReservedWTShown", + "name": "UserPreferencesRecordHomeReservedWTShown", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "FavoritesShowTopFavorites", + "name": "UserPreferencesFavoritesShowTopFavorites", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ExcludeMailAppAttachments", + "name": "UserPreferencesExcludeMailAppAttachments", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "SuppressTaskSFXReminders", + "name": "UserPreferencesSuppressTaskSFXReminders", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "SuppressEventSFXReminders", + "name": "UserPreferencesSuppressEventSFXReminders", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "PreviewCustomTheme", + "name": "UserPreferencesPreviewCustomTheme", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "HasCelebrationBadge", + "name": "UserPreferencesHasCelebrationBadge", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "UserDebugModePref", + "name": "UserPreferencesUserDebugModePref", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "SRHOverrideActivities", + "name": "UserPreferencesSRHOverrideActivities", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "NewLightningReportRunPageEnabled", + "name": "UserPreferencesNewLightningReportRunPageEnabled", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ReverseOpenActivitiesView", + "name": "UserPreferencesReverseOpenActivitiesView", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "ShowTerritoryTimeZoneShifts", + "name": "UserPreferencesShowTerritoryTimeZoneShifts", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "HasSentWarningEmail", + "name": "UserPreferencesHasSentWarningEmail", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "HasSentWarningEmail238", + "name": "UserPreferencesHasSentWarningEmail238", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "HasSentWarningEmail240", + "name": "UserPreferencesHasSentWarningEmail240", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "NativeEmailClient", + "name": "UserPreferencesNativeEmailClient", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "SendListEmailThroughExternalService", + "name": "UserPreferencesSendListEmailThroughExternalService", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": false, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Contact ID", + "name": "ContactId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Contact" + ], + "relationshipName": "Contact", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Account ID", + "name": "AccountId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Account" + ], + "relationshipName": "Account", + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Call Center ID", + "name": "CallCenterId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "CallCenter" + ], + "relationshipName": null, + "sortable": true, + "type": "reference" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Extension", + "name": "Extension", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "phone" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "SAML Federation ID", + "name": "FederationIdentifier", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "plaintextarea", + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "About Me", + "name": "AboutMe", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "textarea" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Url for full-sized Photo", + "name": "FullPhotoUrl", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "url" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "imageurl", + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Photo", + "name": "SmallPhotoUrl", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "url" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Show external indicator", + "name": "IsExtIndicatorVisible", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Out of office message", + "name": "OutOfOfficeMessage", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "string" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": "imageurl", + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Url for medium profile photo", + "name": "MediumPhotoUrl", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "url" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": "N", + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Chatter Email Highlights Frequency", + "name": "DigestFrequency", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Daily", + "validFor": null, + "value": "D" + }, + { + "active": true, + "defaultValue": false, + "label": "Weekly", + "validFor": null, + "value": "W" + }, + { + "active": true, + "defaultValue": true, + "label": "Never", + "validFor": null, + "value": "N" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": "N", + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Default Notification Frequency when Joining Groups", + "name": "DefaultGroupNotificationFrequency", + "nillable": false, + "picklistValues": [ + { + "active": true, + "defaultValue": false, + "label": "Email on Each Post", + "validFor": null, + "value": "P" + }, + { + "active": true, + "defaultValue": false, + "label": "Daily Digests", + "validFor": null, + "value": "D" + }, + { + "active": true, + "defaultValue": false, + "label": "Weekly Digests", + "validFor": null, + "value": "W" + }, + { + "active": true, + "defaultValue": true, + "label": "Never", + "validFor": null, + "value": "N" + } + ], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "picklist" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Data.com Monthly Addition Limit", + "name": "JigsawImportLimitOverride", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "int" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Viewed Date", + "name": "LastViewedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Last Referenced Date", + "name": "LastReferencedDate", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "datetime" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Url for banner photo", + "name": "BannerPhotoUrl", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "url" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Url for IOS banner photo", + "name": "SmallBannerPhotoUrl", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "url" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": false, + "inlineHelpText": null, + "label": "Url for Android banner photo", + "name": "MediumBannerPhotoUrl", + "nillable": true, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "url" + }, + { + "aggregatable": false, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Has Profile Photo", + "name": "IsProfilePhotoActive", + "nillable": false, + "picklistValues": [], + "referenceTo": [], + "relationshipName": null, + "sortable": true, + "type": "boolean" + }, + { + "aggregatable": true, + "custom": false, + "defaultValue": null, + "extraTypeInfo": null, + "filterable": true, + "groupable": true, + "inlineHelpText": null, + "label": "Individual ID", + "name": "IndividualId", + "nillable": true, + "picklistValues": [], + "referenceTo": [ + "Individual" + ], + "relationshipName": "Individual", + "sortable": true, + "type": "reference" + } + ], + "label": "User", + "childRelationships": [ + { + "cascadeDelete": false, + "childSObject": "AIApplication", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AIApplication", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AIApplicationConfig", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AIApplicationConfig", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AIInsightAction", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AIInsightAction", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AIInsightFeedback", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AIInsightFeedback", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AIInsightReason", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AIInsightReason", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AIInsightValue", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AIInsightValue", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AIPredictionEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AIRecordInsight", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AIRecordInsight", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AcceptedEventRelation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AcceptedEventRelation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AcceptedEventRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AcceptedEventRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Account", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Account", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Account", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountCleanInfo", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountCleanInfo", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountCleanInfo", + "deprecatedAndHidden": false, + "field": "LastStatusChangedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AccountCleanInfoReviewers", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountContactRole", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountContactRole", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountContactRoleChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountContactRoleChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountPartner", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountPartner", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AccountShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AccountShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ActionLinkGroupTemplate", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ActionLinkGroupTemplate", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ActionLinkTemplate", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ActionLinkTemplate", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ActivityFieldHistory", + "deprecatedAndHidden": false, + "field": "ChangedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ActivityFieldHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ActivityFieldHistory", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ActivityHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ActivityHistory", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ActivityHistory", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AdditionalNumber", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AdditionalNumber", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Address", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Address", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AlternativePaymentMethod", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AlternativePaymentMethod", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AlternativePaymentMethod", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AlternativePaymentMethodShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AlternativePaymentMethodShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Announcement", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Announcement", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexClass", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexClass", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexComponent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexComponent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexEmailNotification", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexEmailNotification", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ApexEmailNotification", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ApexLog", + "deprecatedAndHidden": false, + "field": "LogUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexPage", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexPage", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexTestQueueItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexTestResultLimits", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexTestResultLimits", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexTestRunResult", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexTestRunResult", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexTestRunResult", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexTestSuite", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexTestSuite", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexTrigger", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApexTrigger", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApiAnomalyEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApiAnomalyEventStore", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApiAnomalyEventStoreFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApiAnomalyEventStoreFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApiEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApiEventStream", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppAnalyticsQueryRequest", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppAnalyticsQueryRequest", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppExtension", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppExtension", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppExtensionChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppExtensionChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppMenuItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppMenuItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppUsageAssignment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppUsageAssignment", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppointmentTopicTimeSlot", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppointmentTopicTimeSlot", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppointmentTopicTimeSlotFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppointmentTopicTimeSlotFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AppointmentTopicTimeSlotHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleAggrDurDnscale", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleAggrDurDnscale", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleAggrDurDnscaleFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleAggrDurDnscaleFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleAggrPolicy", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleAggrPolicy", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleAggrPolicyFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleAggrPolicyFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleConfig", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleConfig", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleConfig", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleConfigFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleConfigFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleConfigHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleConfigShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ApptBundleConfigShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundlePolicy", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundlePolicy", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundlePolicy", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundlePolicyFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundlePolicyFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundlePolicyShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ApptBundlePolicyShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundlePolicySvcTerr", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundlePolicySvcTerr", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundlePolicySvcTerrFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundlePolicySvcTerrFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundlePropagatePolicy", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundlePropagatePolicy", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundlePropagatePolicyFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundlePropagatePolicyFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleRestrictPolicy", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleRestrictPolicy", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleRestrictPolicyFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleRestrictPolicyFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleSortPolicy", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleSortPolicy", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleSortPolicyFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ApptBundleSortPolicyFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Asset", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Asset", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Asset", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetAction", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetAction", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetActionSource", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetActionSource", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetAttribute", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetAttribute", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetAttributeChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetAttributeChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetDowntimePeriod", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetDowntimePeriod", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetDowntimePeriodFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetDowntimePeriodFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetDowntimePeriodHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetRelationship", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetRelationship", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetRelationshipFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetRelationshipFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetRelationshipHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AssetShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetStatePeriod", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetStatePeriod", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetTokenEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetTokenEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetWarranty", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetWarranty", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetWarrantyChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetWarrantyChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetWarrantyFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetWarrantyFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssetWarrantyHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssignedResource", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssignedResource", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssignedResourceChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssignedResourceChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssignedResourceFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssignedResourceFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssignmentRule", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssignmentRule", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssociatedLocation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssociatedLocation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AssociatedLocationHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AsyncApexJob", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AsyncOperationEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AsyncOperationLog", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AsyncOperationLog", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AsyncOperationStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttachedContentDocument", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttachedContentDocument", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AttachedContentDocument", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AttachedContentDocuments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Attachment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Attachment", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Attachment", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributeDefinition", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributeDefinition", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributeDefinition", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributeDefinitionFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributeDefinitionFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributeDefinitionHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributeDefinitionShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AttributeDefinitionShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributePicklist", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributePicklist", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributePicklist", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributePicklistFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributePicklistFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributePicklistHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributePicklistShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AttributePicklistShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributePicklistValue", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributePicklistValue", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributePicklistValueFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributePicklistValueFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AttributePicklistValueHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuraDefinition", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuraDefinition", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuraDefinitionBundle", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuraDefinitionBundle", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthConfig", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthConfig", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthConfigProviders", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthConfigProviders", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthProvider", + "deprecatedAndHidden": false, + "field": "ExecutionUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthSession", + "deprecatedAndHidden": false, + "field": "UsersId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationForm", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationForm", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationForm", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsent", + "deprecatedAndHidden": false, + "field": "ConsentGiverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "AuthorizationFormConsents", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "ConsentGiverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsentHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormConsentShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AuthorizationFormConsentShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormDataUse", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormDataUse", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormDataUse", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormDataUseHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormDataUseShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AuthorizationFormDataUseShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "AuthorizationFormShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormText", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormText", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormTextFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormTextFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "AuthorizationFormTextHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BackgroundOperation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BackgroundOperation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BatchApexErrorEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BrandTemplate", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BrandTemplate", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BrandingSet", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BrandingSet", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BrandingSetProperty", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BrandingSetProperty", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BriefcaseAssignment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BriefcaseAssignment", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "BriefcaseAssignment", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BriefcaseAssignmentChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BriefcaseAssignmentChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BriefcaseAssignmentChangeEvent", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BriefcaseDefinition", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BriefcaseDefinition", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BriefcaseDefinitionChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BriefcaseDefinitionChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BriefcaseRule", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BriefcaseRule", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BriefcaseRuleFilter", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BriefcaseRuleFilter", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Broker__Share", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Broker__Share", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Broker__c", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Broker__c", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Broker__c", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BulkApiResultEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BulkApiResultEventStore", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BusinessBrand", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BusinessBrand", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BusinessBrand", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BusinessBrandShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "BusinessBrandShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BusinessHours", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BusinessHours", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BusinessProcess", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "BusinessProcess", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Calendar", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Calendar", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Calendar", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CalendarView", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CalendarView", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CalendarView", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CalendarView", + "deprecatedAndHidden": false, + "field": "PublisherId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CalendarViewShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CalendarViewShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CallCenter", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CallCenter", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CallCoachingMediaProvider", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CallCoachingMediaProvider", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Campaign", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Campaign", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Campaign", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignInfluenceModel", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignInfluenceModel", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignMember", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignMember", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignMember", + "deprecatedAndHidden": false, + "field": "LeadOrContactOwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignMemberChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignMemberChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignMemberStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignMemberStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignMemberStatusChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignMemberStatusChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CampaignShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CampaignShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CardPaymentMethod", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CardPaymentMethod", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Case", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Case", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Case", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseComment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseComment", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseContactRole", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseContactRole", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseMilestone", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseMilestone", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseSolution", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseTeamMember", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseTeamMember", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseTeamMember", + "deprecatedAndHidden": false, + "field": "MemberId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseTeamRole", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseTeamRole", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseTeamTemplate", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseTeamTemplate", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseTeamTemplateMember", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseTeamTemplateMember", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CaseTeamTemplateMember", + "deprecatedAndHidden": false, + "field": "MemberId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CaseTeamTemplateRecord", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CategoryData", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CategoryData", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CategoryNode", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CategoryNode", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ChatterActivity", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ChatterExtension", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ChatterExtension", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ChatterExtensionConfig", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ChatterExtensionConfig", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ClientBrowser", + "deprecatedAndHidden": false, + "field": "UsersId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationGroup", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationGroup", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationGroup", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationGroupFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationGroupFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationGroupMember", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationGroupMember", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CollaborationGroupMember", + "deprecatedAndHidden": false, + "field": "MemberId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "GroupMemberships", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationGroupMemberRequest", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationGroupMemberRequest", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CollaborationGroupMemberRequest", + "deprecatedAndHidden": false, + "field": "RequesterId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "GroupMembershipRequests", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationGroupRecord", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationGroupRecord", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CollaborationInvitation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationInvitation", + "deprecatedAndHidden": false, + "field": "InviterId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationInvitation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CollaborationInvitation", + "deprecatedAndHidden": false, + "field": "SharedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationRoom", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CollaborationRoom", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CombinedAttachment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CombinedAttachment", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CombinedAttachment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CombinedAttachments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscription", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscription", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscription", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionChannelType", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionChannelType", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionChannelType", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionChannelTypeFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionChannelTypeFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionChannelTypeHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionChannelTypeShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CommSubscriptionChannelTypeShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsent", + "deprecatedAndHidden": false, + "field": "ConsentGiverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "CommSubscriptionConsents", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "ConsentGiverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsentFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsentFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsentHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionConsentShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CommSubscriptionConsentShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CommSubscriptionShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionTiming", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionTiming", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionTimingFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionTimingFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CommSubscriptionTimingHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Community", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Community", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConcurLongRunApexErrEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConferenceNumber", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConferenceNumber", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConnectedApplication", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConnectedApplication", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConsumptionRate", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConsumptionRate", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConsumptionRateHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConsumptionSchedule", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConsumptionSchedule", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConsumptionSchedule", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConsumptionScheduleFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConsumptionScheduleFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConsumptionScheduleHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConsumptionScheduleShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ConsumptionScheduleShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Contact", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Contact", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Contact", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactCleanInfo", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactCleanInfo", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactCleanInfo", + "deprecatedAndHidden": false, + "field": "LastStatusChangedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContactCleanInfoReviewers", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointAddress", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointAddress", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointAddress", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointAddressChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointAddressChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointAddressChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointAddressHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointAddressShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContactPointAddressShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointConsent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointConsent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointConsent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointConsentHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointConsentShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContactPointConsentShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointEmail", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointEmail", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointEmail", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointEmailChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointEmailChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointEmailChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointEmailHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointEmailShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContactPointEmailShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointPhone", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointPhone", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointPhone", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointPhoneChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointPhoneChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointPhoneChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointPhoneHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointPhoneShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContactPointPhoneShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointTypeConsent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointTypeConsent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointTypeConsent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointTypeConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointTypeConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointTypeConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointTypeConsentHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactPointTypeConsentShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContactPointTypeConsentShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactRequest", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactRequest", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactRequest", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactRequest", + "deprecatedAndHidden": false, + "field": "WhoId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContactRequests", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactRequestShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContactRequestShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContactShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContactShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentAsset", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentAsset", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDistribution", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDistribution", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDistribution", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDistributionView", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocument", + "deprecatedAndHidden": false, + "field": "ArchivedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocument", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocument", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocument", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentChangeEvent", + "deprecatedAndHidden": false, + "field": "ArchivedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDocumentLink", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContentDocumentLinks", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentDocumentLinkChangeEvent", + "deprecatedAndHidden": false, + "field": "LinkedEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentDocumentSubscription", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentFolder", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentFolder", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentFolderItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentFolderItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentFolderMember", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentFolderMember", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentNotification", + "deprecatedAndHidden": false, + "field": "EntityIdentifierId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentNotification", + "deprecatedAndHidden": false, + "field": "UsersId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentTagSubscription", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentUserSubscription", + "deprecatedAndHidden": false, + "field": "SubscribedToUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentUserSubscription", + "deprecatedAndHidden": false, + "field": "SubscriberUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "ContentModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersion", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "ContentModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "FirstPublishLocationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentVersionHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentVersionRating", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentWorkspace", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentWorkspace", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentWorkspaceMember", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentWorkspaceMember", + "deprecatedAndHidden": false, + "field": "MemberId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentWorkspacePermission", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContentWorkspacePermission", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContentWorkspaceSubscription", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContextParamMap", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContextParamMap", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Contract", + "deprecatedAndHidden": false, + "field": "ActivatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Contract", + "deprecatedAndHidden": false, + "field": "CompanySignedId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ContractsSigned", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Contract", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Contract", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Contract", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractChangeEvent", + "deprecatedAndHidden": false, + "field": "ActivatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractChangeEvent", + "deprecatedAndHidden": false, + "field": "CompanySignedId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractContactRole", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractContactRole", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineItemFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineItemFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineItemHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineOutcome", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineOutcome", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineOutcome", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineOutcomeData", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineOutcomeData", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineOutcomeDataChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineOutcomeDataChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineOutcomeFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineOutcomeFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineOutcomeHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractLineOutcomeShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ContractLineOutcomeShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ContractStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Conversation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Conversation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConversationEntry", + "deprecatedAndHidden": false, + "field": "ActorId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ConversationEntries", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConversationEntry", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConversationEntry", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConversationParticipant", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConversationParticipant", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ConversationParticipant", + "deprecatedAndHidden": false, + "field": "ParticipantEntityId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ConversationParticipants", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CorsWhitelistEntry", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CorsWhitelistEntry", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CredentialStuffingEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CredentialStuffingEventStore", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CredentialStuffingEventStoreFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CredentialStuffingEventStoreFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemo", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemo", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemo", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoInvApplication", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoInvApplication", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoInvApplicationFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoInvApplicationFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoInvApplicationHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoLine", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoLine", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoLineFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoLineFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoLineHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CreditMemoShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CreditMemoShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CronTrigger", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CronTrigger", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CronTrigger", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CspTrustedSite", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CspTrustedSite", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomBrand", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomBrand", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomBrandAsset", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomBrandAsset", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomHelpMenuItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomHelpMenuItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomHelpMenuSection", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomHelpMenuSection", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomHttpHeader", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomHttpHeader", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomNotificationType", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomNotificationType", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomPermission", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomPermission", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomPermissionDependency", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomPermissionDependency", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Customer", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Customer", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Customer", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "CustomerShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "CustomerShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DandBCompany", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DandBCompany", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Dashboard", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Dashboard", + "deprecatedAndHidden": false, + "field": "FolderId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Dashboard", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Dashboard", + "deprecatedAndHidden": false, + "field": "RunningUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DashboardComponentFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DashboardComponentFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DashboardFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DashboardFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataAssessmentFieldMetric", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataAssessmentFieldMetric", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataAssessmentMetric", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataAssessmentMetric", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataAssessmentValueMetric", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataAssessmentValueMetric", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataObjectDataChgEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataStatistics", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataUseLegalBasis", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataUseLegalBasis", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataUseLegalBasis", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataUseLegalBasisHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataUseLegalBasisShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "DataUseLegalBasisShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataUsePurpose", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataUsePurpose", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataUsePurpose", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataUsePurposeHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DataUsePurposeShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "DataUsePurposeShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DatacloudOwnedEntity", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DatacloudOwnedEntity", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "DatacloudOwnedEntity", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DatacloudPurchaseUsage", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DatacloudPurchaseUsage", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "DatacloudPurchaseUsage", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DeclinedEventRelation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DeclinedEventRelation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DeclinedEventRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "DeclinedEventRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DeleteEvent", + "deprecatedAndHidden": false, + "field": "DeletedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DigitalSignature", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DigitalSignature", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DigitalSignatureChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DigitalSignatureChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DigitalWallet", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DigitalWallet", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Document", + "deprecatedAndHidden": false, + "field": "AuthorId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Document", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Document", + "deprecatedAndHidden": false, + "field": "FolderId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Document", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DocumentAttachmentMap", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Domain", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Domain", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DomainSite", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DomainSite", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DuplicateRecordItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DuplicateRecordItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DuplicateRecordSet", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DuplicateRecordSet", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DuplicateRule", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "DuplicateRule", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailCapture", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailCapture", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailDomainFilter", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailDomainFilter", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailDomainKey", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailDomainKey", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessage", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessage", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessageChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessageChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailMessageRelation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EmailMessageRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "EmailMessageRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailRelay", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailRelay", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailServicesAddress", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailServicesAddress", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailServicesAddress", + "deprecatedAndHidden": false, + "field": "RunAsUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailServicesFunction", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailServicesFunction", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailTemplate", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailTemplate", + "deprecatedAndHidden": false, + "field": "FolderId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailTemplate", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailTemplate", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailTemplateChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailTemplateChangeEvent", + "deprecatedAndHidden": false, + "field": "FolderId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailTemplateChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EmailTemplateChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EngagementChannelType", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EngagementChannelType", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EngagementChannelType", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EngagementChannelTypeFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EngagementChannelTypeFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EngagementChannelTypeHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EngagementChannelTypeShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EngagementChannelTypeShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EnhancedLetterhead", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EnhancedLetterhead", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EnhancedLetterheadFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EnhancedLetterheadFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Entitlement", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Entitlement", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntitlementChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntitlementChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntitlementContact", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntitlementContact", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntitlementFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntitlementFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntitlementHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntitlementTemplate", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntitlementTemplate", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntityDefinition", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntityMilestone", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntityMilestone", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntityMilestoneFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntityMilestoneFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EntityMilestoneHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitySubscription", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitySubscription", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FeedSubscriptionsForEntity", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EntitySubscription", + "deprecatedAndHidden": false, + "field": "SubscriberId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "FeedSubscriptions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Event", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Event", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Event", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventLogFile", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventLogFile", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "EventRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "EventRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelationChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelationChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelationChangeEvent", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelayConfig", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelayConfig", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelayConfigChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelayConfigChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelayFeedback", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "EventRelayFeedback", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Expense", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Expense", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Expense", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseReport", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseReport", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseReport", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseReportEntry", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseReportEntry", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseReportEntryFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseReportEntryFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseReportEntryHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseReportFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseReportFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseReportHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseReportShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ExpenseReportShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpenseShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ExpenseShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpressionFilter", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpressionFilter", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpressionFilterCriteria", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExpressionFilterCriteria", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExternalDataSource", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExternalDataSource", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExternalDataSrcDescriptor", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExternalDataSrcDescriptor", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExternalDataUserAuth", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExternalDataUserAuth", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExternalDataUserAuth", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ExternalDataUserAuths", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExternalEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExternalEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExternalEventMapping", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExternalEventMapping", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExternalEventMapping", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ExternalEventMappingShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ExternalEventMappingShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "LastEditById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedComment", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "LastEditById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedItem", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedLike", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedLike", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedPollChoice", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedPollVote", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FeedRevision", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedSignal", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FeedSignal", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FieldDefinition", + "deprecatedAndHidden": false, + "field": "BusinessOwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FieldDefinition", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FieldSecurityClassification", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FieldSecurityClassification", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FieldServiceMobileSettings", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FieldServiceMobileSettings", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FieldServiceMobileSettingsChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FieldServiceMobileSettingsChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FieldServiceOrgSettings", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FieldServiceOrgSettings", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FileEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FileEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FileEventStore", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FileEventStore", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FileEventStore", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FileSearchActivity", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FileSearchActivity", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceBalanceSnapshot", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceBalanceSnapshot", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceBalanceSnapshot", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceBalanceSnapshotChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceBalanceSnapshotChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceBalanceSnapshotChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceBalanceSnapshotShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FinanceBalanceSnapshotShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceTransaction", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceTransaction", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceTransaction", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceTransactionChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceTransactionChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceTransactionChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FinanceTransactionShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FinanceTransactionShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "InterviewStartedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowExecutionErrorEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowInterview", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowInterview", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowInterview", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowInterviewLog", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowInterviewLog", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowInterviewLog", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowInterviewLogEntry", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowInterviewLogEntry", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowInterviewLogShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FlowInterviewLogShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowInterviewShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FlowInterviewShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationInstance", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationInstance", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationInstance", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationInstanceShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FlowOrchestrationInstanceShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationStageInstance", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationStageInstance", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationStageInstance", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationStageInstanceShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FlowOrchestrationStageInstanceShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationStepInstance", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationStepInstance", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationStepInstance", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationStepInstanceShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FlowOrchestrationStepInstanceShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FlowOrchestrationWorkItem", + "deprecatedAndHidden": false, + "field": "AssigneeId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationWorkItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationWorkItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationWorkItem", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationWorkItem", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowOrchestrationWorkItemShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FlowOrchestrationWorkItemShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowRecordRelation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowStageRelation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowStageRelation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowTestResult", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowTestResult", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowTestResult", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowTestResultShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "FlowTestResultShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowTestView", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FlowTestView", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Folder", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Folder", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FolderedContentDocument", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "FolderedContentDocument", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "GrantedByLicense", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "GrantedByLicense", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Group", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Group", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Group", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Group", + "deprecatedAndHidden": false, + "field": "RelatedId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "GroupMember", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "GtwyProvPaymentMethodType", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "GtwyProvPaymentMethodType", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Holiday", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Holiday", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "IPAddressRange", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "IPAddressRange", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Idea", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Idea", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "IdeaComment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "IdentityProviderEventStore", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "IdentityVerificationEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "IdpEventLog", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "IframeWhiteListUrl", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "IframeWhiteListUrl", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Image", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Image", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Image", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ImageFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ImageFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ImageHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ImageShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ImageShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Individual", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Individual", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Individual", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "IndividualChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "IndividualChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "IndividualChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "IndividualHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "IndividualShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "IndividualShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "InstalledMobileApp", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "InstalledMobileApp", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "InstalledMobileApp", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "InstalledMobileApps", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Invoice", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Invoice", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Invoice", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "InvoiceFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "InvoiceFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "InvoiceHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "InvoiceLine", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "InvoiceLine", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "InvoiceLineFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "InvoiceLineFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "InvoiceLineHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "InvoiceShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "InvoiceShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "JobProfile", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "JobProfile", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "JobProfile", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "JobProfileFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "JobProfileFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "JobProfileHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "JobProfileShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "JobProfileShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "KnowledgeableUser", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Lead", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Lead", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Lead", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadCleanInfo", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadCleanInfo", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadCleanInfo", + "deprecatedAndHidden": false, + "field": "LastStatusChangedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "LeadCleanInfoReviewers", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "LeadShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LeadStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LegalEntity", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LegalEntity", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LegalEntity", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LegalEntityFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LegalEntityFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LegalEntityHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LegalEntityShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "LegalEntityShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LightningExperienceTheme", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LightningExperienceTheme", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LightningOnboardingConfig", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LightningOnboardingConfig", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LightningUriEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LightningUriEventStream", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListEmail", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListEmail", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListEmail", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListEmailChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListEmailChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListEmailChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListEmailIndividualRecipient", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListEmailIndividualRecipient", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListEmailRecipientSource", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListEmailRecipientSource", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListEmailShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ListEmailShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListView", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListView", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListViewChart", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListViewChart", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ListViewChart", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListViewEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListViewEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ListViewEventStream", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Location", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Location", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Location", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationGroup", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationGroup", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationGroup", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationGroupAssignment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationGroupAssignment", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationGroupFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationGroupFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationGroupHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationGroupShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "LocationGroupShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LocationShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "LocationShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LoginAsEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LoginAsEventStream", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LoginEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LoginEventStream", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LoginGeo", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LoginGeo", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "LoginHistory", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "LoginIp", + "deprecatedAndHidden": false, + "field": "UsersId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LogoutEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LogoutEventStream", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "LogoutEventStream", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MLModel", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MLModel", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MLModelFactor", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MLModelFactor", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MLModelFactorComponent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MLModelFactorComponent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MLModelMetric", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MLModelMetric", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MLPredictionDefinition", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MLPredictionDefinition", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MLRecommendationDefinition", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MLRecommendationDefinition", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Macro", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Macro", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Macro", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MacroChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MacroChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MacroChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MacroHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MacroInstruction", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MacroInstruction", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MacroInstructionChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MacroInstructionChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MacroShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "MacroShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MacroUsage", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MacroUsage", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MacroUsage", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MacroUsage", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MacroUsageShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "MacroUsageShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MailmergeTemplate", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MailmergeTemplate", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceAsset", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceAsset", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceAssetChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceAssetChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceAssetFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceAssetFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceAssetHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenancePlan", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenancePlan", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenancePlan", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenancePlanChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenancePlanChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenancePlanChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenancePlanFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenancePlanFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenancePlanHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenancePlanShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "MaintenancePlanShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceWorkRule", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceWorkRule", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceWorkRule", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceWorkRuleChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceWorkRuleChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceWorkRuleChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceWorkRuleFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceWorkRuleFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceWorkRuleHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MaintenanceWorkRuleShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "MaintenanceWorkRuleShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ManagedContent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ManagedContent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ManagedContentChannel", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ManagedContentChannel", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ManagedContentSpace", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ManagedContentSpace", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ManagedContentVariant", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ManagedContentVariant", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ManagedContentVariantChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ManagedContentVariantChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MatchingInformation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MatchingInformation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "MatchingInformation", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MatchingRule", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MatchingRule", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MatchingRuleItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MatchingRuleItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingChannel", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingChannel", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingEndUser", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingEndUser", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingEndUser", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingEndUserHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingEndUserShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "MessagingEndUserShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingSession", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingSession", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingSession", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingSession", + "deprecatedAndHidden": false, + "field": "TargetUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingSessionFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingSessionFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingSessionHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MessagingSessionShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "MessagingSessionShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MilestoneType", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MilestoneType", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MobileApplicationDetail", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MobileApplicationDetail", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MobileSettingsAssignment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MobileSettingsAssignment", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MsgChannelLanguageKeyword", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MsgChannelLanguageKeyword", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MutingPermissionSet", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MutingPermissionSet", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MyDomainDiscoverableLogin", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "MyDomainDiscoverableLogin", + "deprecatedAndHidden": false, + "field": "ExecuteApexHandlerAsId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "MyDomainDiscoverableLogin", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "NamedCredential", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "NamedCredential", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Note", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Note", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Note", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "NoteAndAttachment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "NoteAndAttachment", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "NoteAndAttachment", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OauthCustomScope", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OauthCustomScope", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OauthCustomScopeApp", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OauthCustomScopeApp", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OauthToken", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ObjectPermissions", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ObjectPermissions", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OnboardingMetrics", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OnboardingMetrics", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OnboardingMetrics", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpenActivity", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpenActivity", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpenActivity", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OperatingHours", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OperatingHours", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OperatingHoursChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OperatingHoursChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OperatingHoursFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OperatingHoursFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OperatingHoursHoliday", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OperatingHoursHoliday", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OperatingHoursHolidayFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OperatingHoursHolidayFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Opportunity", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Opportunity", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Opportunity", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityCompetitor", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityCompetitor", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityContactRole", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityContactRole", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityContactRoleChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityContactRoleChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityFieldHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityLineItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityLineItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityPartner", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityPartner", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OpportunityShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityStage", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OpportunityStage", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Order", + "deprecatedAndHidden": false, + "field": "ActivatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Order", + "deprecatedAndHidden": false, + "field": "CompanyAuthorizedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Order", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Order", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Order", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderChangeEvent", + "deprecatedAndHidden": false, + "field": "ActivatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderChangeEvent", + "deprecatedAndHidden": false, + "field": "CompanyAuthorizedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderItemChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderItemChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderItemFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderItemFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderItemHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OrderShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrderStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrgLifecycleNotification", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrgMetric", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrgMetric", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrgMetricScanResult", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrgMetricScanResult", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrgMetricScanSummary", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrgMetricScanSummary", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrgWideEmailAddress", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OrgWideEmailAddress", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Organization", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Organization", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OutgoingEmailRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OutgoingEmailRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OwnedContentDocument", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "OwnedContentDocument", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "OwnedContentDocument", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "OwnedContentDocuments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Participant", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Participant", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Partner", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Partner", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PartnerRole", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PartnerRole", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PartyConsent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PartyConsent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PartyConsent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PartyConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PartyConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PartyConsentChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PartyConsentFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PartyConsentFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PartyConsentHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PartyConsentShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "PartyConsentShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Payment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Payment", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentAuthAdjustment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentAuthAdjustment", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentAuthorization", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentAuthorization", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentGateway", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentGateway", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentGatewayLog", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentGatewayLog", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentGatewayProvider", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentGatewayProvider", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentGroup", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentGroup", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentLineInvoice", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentLineInvoice", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentMethod", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PaymentMethod", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PermissionSet", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PermissionSet", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "PermissionSetAssignment", + "deprecatedAndHidden": false, + "field": "AssigneeId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "PermissionSetAssignments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PermissionSetEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PermissionSetEventStore", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PermissionSetGroup", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PermissionSetGroup", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PermissionSetGroupComponent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PermissionSetGroupComponent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PermissionSetLicense", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PermissionSetLicense", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "PermissionSetLicenseAssign", + "deprecatedAndHidden": false, + "field": "AssigneeId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "PermissionSetLicenseAssignments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PermissionSetLicenseAssign", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PermissionSetLicenseAssign", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PlatformAction", + "deprecatedAndHidden": false, + "field": "InvokedByUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PlatformCachePartition", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PlatformCachePartition", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PlatformCachePartitionType", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PlatformCachePartitionType", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PlatformStatusAlertEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PlatformStatusAlertEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Pricebook2", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Pricebook2", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Pricebook2ChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Pricebook2ChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Pricebook2History", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PricebookEntry", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PricebookEntry", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PricebookEntryChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PricebookEntryChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PricebookEntryHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessDefinition", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessDefinition", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessException", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessException", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessException", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessExceptionEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessExceptionShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessExceptionShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessFlowMigration", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessFlowMigration", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstance", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstance", + "deprecatedAndHidden": false, + "field": "LastActorId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstance", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstance", + "deprecatedAndHidden": false, + "field": "SubmittedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceHistory", + "deprecatedAndHidden": false, + "field": "ActorId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceHistory", + "deprecatedAndHidden": false, + "field": "OriginalActorId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceNode", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstanceNode", + "deprecatedAndHidden": false, + "field": "LastActorId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceNode", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstanceStep", + "deprecatedAndHidden": false, + "field": "ActorId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceStep", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstanceStep", + "deprecatedAndHidden": false, + "field": "OriginalActorId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceWorkitem", + "deprecatedAndHidden": false, + "field": "ActorId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProcessInstanceWorkitem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProcessInstanceWorkitem", + "deprecatedAndHidden": false, + "field": "OriginalActorId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Product2", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Product2", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Product2ChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Product2ChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Product2Feed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Product2Feed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Product2History", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumed", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumedChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumedChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumedFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumedFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumedHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumedState", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumedState", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumedStateHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumptionSchedule", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductConsumptionSchedule", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductEntitlementTemplate", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItem", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItemChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItemChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItemChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItemFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItemFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItemHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItemShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProductItemShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItemTransaction", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItemTransaction", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItemTransactionFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItemTransactionFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductItemTransactionHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequest", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequest", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequest", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestLineItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestLineItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestLineItemFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestLineItemFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestLineItemHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequestShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProductRequestShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequired", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequired", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequiredChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequiredChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequiredFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequiredFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductRequiredHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaign", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaign", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaign", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignItemFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignItemFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignItemHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignItemStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignItemStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProductServiceCampaignShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductServiceCampaignStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransfer", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransfer", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransfer", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransfer", + "deprecatedAndHidden": false, + "field": "ReceivedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ReceivedByProductTransfers", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransferChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransferChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransferChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransferChangeEvent", + "deprecatedAndHidden": false, + "field": "ReceivedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransferFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransferFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransferHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransferShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProductTransferShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransferState", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransferState", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductTransferStateHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductWarrantyTerm", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductWarrantyTerm", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductWarrantyTermFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductWarrantyTermFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProductWarrantyTermHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Profile", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Profile", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkill", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkill", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkill", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkillEndorsement", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkillEndorsement", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProfileSkillEndorsement", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "UserProfileSkillUserEndorsements", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkillEndorsementFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkillEndorsementFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkillEndorsementHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkillFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkillFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkillHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkillShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProfileSkillShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkillUser", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkillUser", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ProfileSkillUser", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "UserProfileSkillChildren", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkillUserFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkillUserFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ProfileSkillUserHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Prompt", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Prompt", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PromptAction", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PromptAction", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PromptAction", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "PromptAction", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PromptActionShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "PromptActionShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PromptError", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PromptError", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PromptError", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PromptErrorShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "PromptErrorShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PromptVersion", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PromptVersion", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PromptVersion", + "deprecatedAndHidden": false, + "field": "PublishedByUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Property__Feed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Property__Feed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Property__History", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Property__Share", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Property__Share", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Property__c", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Property__c", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Property__c", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PushTopic", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "PushTopic", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QueueSobject", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuickText", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuickText", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuickText", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuickTextChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuickTextChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuickTextChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuickTextHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuickTextShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "QuickTextShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuickTextUsage", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuickTextUsage", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuickTextUsage", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuickTextUsage", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuickTextUsageShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "QuickTextUsageShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuoteTemplateRichTextData", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "QuoteTemplateRichTextData", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Recommendation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Recommendation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecommendationChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecommendationChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecommendationResponse", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecommendationResponse", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordAction", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordAction", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "RecordAction", + "deprecatedAndHidden": false, + "field": "RecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActions", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "ParentRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "RecordActionHistories", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordActionHistory", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordType", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordType", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFilterCriteria", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFilterCriteria", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFilterCriteria", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFilterCriteriaChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFilterCriteriaChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFilterCriteriaChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFilterCriteriaFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFilterCriteriaFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFilterCriteriaHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFilterCriteriaRule", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFilterCriteriaRule", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFilterCriteriaRuleChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFilterCriteriaRuleChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFilterCriteriaShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "RecordsetFilterCriteriaShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFltrCritMonitor", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFltrCritMonitor", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFltrCritMonitorChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFltrCritMonitorChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFltrCritMonitorFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFltrCritMonitorFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RecordsetFltrCritMonitorHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RedirectWhitelistUrl", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RedirectWhitelistUrl", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Refund", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Refund", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RefundLinePayment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RefundLinePayment", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "RemoteKeyCalloutEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Report", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Report", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Report", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReportAnomalyEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReportAnomalyEventStore", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReportAnomalyEventStoreFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReportAnomalyEventStoreFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReportEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReportEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReportEventStream", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReportFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReportFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourceAbsence", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourceAbsence", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourceAbsenceChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourceAbsenceChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourceAbsenceFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourceAbsenceFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourceAbsenceHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourcePreference", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourcePreference", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourcePreferenceChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourcePreferenceChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourcePreferenceFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourcePreferenceFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ResourcePreferenceHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrder", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrder", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrder", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrder", + "deprecatedAndHidden": false, + "field": "ReturnedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "ReturnedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderLineItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderLineItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderLineItemFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderLineItemFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderLineItemHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ReturnOrderShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ReturnOrderShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SPSamlAttributes", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SPSamlAttributes", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SamlSsoConfig", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SamlSsoConfig", + "deprecatedAndHidden": false, + "field": "ExecutionUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SamlSsoConfig", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SchedulingConstraint", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SchedulingConstraint", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SchedulingConstraint", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SchedulingConstraintShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "SchedulingConstraintShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SchedulingObjective", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SchedulingObjective", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SchedulingObjectiveParameter", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SchedulingObjectiveParameter", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SchedulingRule", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SchedulingRule", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SchedulingRuleParameter", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SchedulingRuleParameter", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Scontrol", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Scontrol", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Scorecard", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Scorecard", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Scorecard", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ScorecardAssociation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ScorecardAssociation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ScorecardMetric", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ScorecardMetric", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ScorecardShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ScorecardShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SearchLayout", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SearchPromotionRule", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SearchPromotionRule", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SecurityCustomBaseline", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SecurityCustomBaseline", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Seller", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Seller", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Seller", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SellerHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SellerShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "SellerShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SerializedProduct", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SerializedProduct", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SerializedProduct", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SerializedProductFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SerializedProductFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SerializedProductHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SerializedProductShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "SerializedProductShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SerializedProductTransaction", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SerializedProductTransaction", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SerializedProductTransactionFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SerializedProductTransactionFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SerializedProductTransactionHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointment", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointment", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ServiceAppointmentShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceAppointmentStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContract", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContract", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContract", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContractChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContractChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContractChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContractFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContractFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContractHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceContractShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ServiceContractShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrew", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrew", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrew", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrewChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrewChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrewChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrewFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrewFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrewHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrewMember", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrewMember", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrewMemberChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrewMemberChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrewMemberFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrewMemberFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrewMemberHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceCrewShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ServiceCrewShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceReport", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceReport", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceReportChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceReportChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceReportHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceReportLayout", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceReportLayout", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceReportLayoutChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceReportLayoutChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResource", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResource", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResource", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResource", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ServiceResources", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceCapacity", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceCapacity", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceCapacityChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceCapacityChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceCapacityFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceCapacityFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceCapacityHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceChangeEvent", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourcePreference", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourcePreference", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourcePreference", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourcePreferenceFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourcePreferenceFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourcePreferenceHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourcePreferenceShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ServiceResourcePreferenceShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ServiceResourceShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceSkill", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceSkill", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceSkillChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceSkillChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceSkillFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceSkillFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceResourceSkillHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceSetupProvisioning", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceSetupProvisioning", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritory", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritory", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryLocation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryLocation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryLocationChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryLocationChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryLocationFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryLocationFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryLocationHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryMember", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryMember", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryMemberChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryMemberChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryMemberFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryMemberFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryMemberHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ServiceTerritoryShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ServiceTerritoryShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SessionHijackingEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SessionHijackingEventStore", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SessionHijackingEventStoreFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SessionHijackingEventStoreFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SessionPermSetActivation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SessionPermSetActivation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "SessionPermSetActivation", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "SessionPermSetActivations", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SetupAssistantStep", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SetupAssistantStep", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SetupAuditTrail", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Shift", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Shift", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Shift", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPattern", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPattern", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPattern", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPatternChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPatternChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPatternChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPatternEntry", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPatternEntry", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPatternEntryChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPatternEntryChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPatternEntryFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPatternEntryFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPatternEntryHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPatternFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPatternFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPatternHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftPatternShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ShiftPatternShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ShiftShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftTemplate", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftTemplate", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftTemplate", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftTemplateChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftTemplateChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftTemplateChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShiftTemplateShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ShiftTemplateShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Shipment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Shipment", + "deprecatedAndHidden": false, + "field": "DeliveredToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "DeliveredToShipments", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Shipment", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Shipment", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShipmentChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShipmentChangeEvent", + "deprecatedAndHidden": false, + "field": "DeliveredToId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShipmentChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShipmentChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShipmentFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShipmentFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShipmentHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShipmentItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShipmentItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShipmentItemFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShipmentItemFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShipmentItemHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ShipmentShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "ShipmentShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Site", + "deprecatedAndHidden": false, + "field": "AdminId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "UserSites", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Site", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Site", + "deprecatedAndHidden": false, + "field": "GuestRecordDefaultOwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Site", + "deprecatedAndHidden": false, + "field": "GuestUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Site", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SiteFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SiteFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SiteHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SiteIframeWhiteListUrl", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SiteIframeWhiteListUrl", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SiteRedirectMapping", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SiteRedirectMapping", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Skill", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Skill", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SkillChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SkillChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SkillRequirement", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SkillRequirement", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SkillRequirementChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SkillRequirementChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SkillRequirementFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SkillRequirementFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SkillRequirementHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SkillType", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SkillType", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SlaProcess", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SlaProcess", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Solution", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Solution", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Solution", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SolutionFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SolutionFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SolutionHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SolutionStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SolutionStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SourceChangeNotification", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Stamp", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Stamp", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "StampAssignment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "StampAssignment", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "StampAssignment", + "deprecatedAndHidden": false, + "field": "SubjectId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "StaticResource", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "StaticResource", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "StreamingChannel", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "StreamingChannel", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "StreamingChannel", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "StreamingChannelShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "StreamingChannelShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Swarm", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Swarm", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Swarm", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Swarm", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Swarms", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SwarmFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SwarmFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SwarmHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SwarmMember", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SwarmMember", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SwarmMember", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "SwarmMember", + "deprecatedAndHidden": false, + "field": "RelatedRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "SwarmMembers", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SwarmMemberFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SwarmMemberFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SwarmMemberHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SwarmMemberShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "SwarmMemberShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "SwarmShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "SwarmShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Task", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Task", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Task", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskPriority", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskPriority", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TaskStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TenantUsageEntitlement", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TenantUsageEntitlement", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TestSuiteMembership", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TestSuiteMembership", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ThirdPartyAccountLink", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ThreatDetectionFeedback", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ThreatDetectionFeedback", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ThreatDetectionFeedback", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ThreatDetectionFeedbackFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "ThreatDetectionFeedbackFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheet", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheet", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheet", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheetChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheetChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheetChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheetEntry", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheetEntry", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheetEntryChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheetEntryChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheetEntryFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheetEntryFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheetEntryHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheetFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheetFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheetHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSheetShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "TimeSheetShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSlot", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSlot", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSlotChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TimeSlotChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TodayGoal", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TodayGoal", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TodayGoal", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "TodayGoal", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TodayGoalShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "TodayGoalShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Topic", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TopicAssignment", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TopicFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TopicFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TopicUserEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TransactionSecurityPolicy", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TransactionSecurityPolicy", + "deprecatedAndHidden": false, + "field": "ExecutionUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TransactionSecurityPolicy", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Translation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Translation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TravelMode", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TravelMode", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TravelMode", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TravelModeFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TravelModeFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "TravelModeShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "TravelModeShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UiFormulaCriterion", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UiFormulaCriterion", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UiFormulaRule", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UiFormulaRule", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UndecidedEventRelation", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UndecidedEventRelation", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UndecidedEventRelation", + "deprecatedAndHidden": false, + "field": "RelationId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "UndecidedEventRelations", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UnitOfMeasure", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UnitOfMeasure", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UnitOfMeasure", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UnitOfMeasureShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "UnitOfMeasureShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UriEvent", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UriEventStream", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "User", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "User", + "deprecatedAndHidden": false, + "field": "DelegatedApproverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "DelegatedUsers", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "User", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "User", + "deprecatedAndHidden": false, + "field": "ManagerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "ManagedUsers", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserAppInfo", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserAppInfo", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "UserAppInfo", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserAppMenuCustomization", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserAppMenuCustomization", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserAppMenuCustomization", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserAppMenuCustomizationShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "UserAppMenuCustomizationShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserChangeEvent", + "deprecatedAndHidden": false, + "field": "DelegatedApproverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserChangeEvent", + "deprecatedAndHidden": false, + "field": "ManagerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserEmailPreferredPerson", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserEmailPreferredPerson", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserEmailPreferredPerson", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "UserEmailPreferredPerson", + "deprecatedAndHidden": false, + "field": "PersonRecordId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "PersonRecord", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserEmailPreferredPersonShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "UserEmailPreferredPersonShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserEntityAccess", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "UserEntityAccessRights", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "UserFeed", + "deprecatedAndHidden": false, + "field": "ParentId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Feeds", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserFieldAccess", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "UserFieldAccessRights", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserListView", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserListView", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "UserListView", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserListViewCriterion", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserListViewCriterion", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserLogin", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserLogin", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserPackageLicense", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserPackageLicense", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "UserPackageLicense", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "UserPreference", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "UserPreferences", + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvAccount", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvAccount", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvAccount", + "deprecatedAndHidden": false, + "field": "SalesforceUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvAccountStaging", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvAccountStaging", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvAccountStaging", + "deprecatedAndHidden": false, + "field": "SalesforceUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvMockTarget", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvMockTarget", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvisioningConfig", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvisioningConfig", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvisioningLog", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvisioningLog", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvisioningLog", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvisioningRequest", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvisioningRequest", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvisioningRequest", + "deprecatedAndHidden": false, + "field": "ManagerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvisioningRequest", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvisioningRequest", + "deprecatedAndHidden": false, + "field": "SalesforceUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserProvisioningRequestShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "UserProvisioningRequestShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserRecordAccess", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserRole", + "deprecatedAndHidden": false, + "field": "ForecastUserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserRole", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserRole", + "deprecatedAndHidden": false, + "field": "PortalAccountOwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "UserShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "UserShare", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Shares", + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "UserShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "VerificationHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "VerificationHistory", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "VerificationHistory", + "deprecatedAndHidden": false, + "field": "UserId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "Vote", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "Vote", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WarrantyTerm", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WarrantyTerm", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WarrantyTerm", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WarrantyTermChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WarrantyTermChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WarrantyTermChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WarrantyTermFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WarrantyTermFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WarrantyTermHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WarrantyTermShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "WarrantyTermShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WebLink", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WebLink", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkAccess", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkAccess", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkAccess", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkAccessShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "WorkAccessShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkBadge", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkBadge", + "deprecatedAndHidden": false, + "field": "GiverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkBadge", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkBadge", + "deprecatedAndHidden": false, + "field": "RecipientId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "Badges", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "WorkBadgeDefinition", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkBadgeDefinition", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkBadgeDefinition", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkBadgeDefinitionFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkBadgeDefinitionFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkBadgeDefinitionHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkBadgeDefinitionShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "WorkBadgeDefinitionShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrder", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrder", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrder", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItem", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItem", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItemChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItemFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItemFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItemHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItemStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderLineItemStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "WorkOrderShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkOrderStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlan", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlan", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlan", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRule", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRule", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRule", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRuleChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRuleChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRuleChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRuleFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRuleFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRuleHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanSelectionRuleShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "WorkPlanSelectionRuleShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "WorkPlanShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplate", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplate", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplate", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplateChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplateChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplateChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplateEntry", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplateEntry", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplateEntryChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplateEntryChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplateEntryFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplateEntryFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplateEntryHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplateFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplateFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplateHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkPlanTemplateShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "WorkPlanTemplateShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStep", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStep", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepStatus", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepStatus", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepTemplate", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepTemplate", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepTemplate", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepTemplateChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepTemplateChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepTemplateChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepTemplateFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepTemplateFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepTemplateHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkStepTemplateShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "WorkStepTemplateShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkThanks", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkThanks", + "deprecatedAndHidden": false, + "field": "GiverId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": "GivenThanks", + "restrictedDelete": true + }, + { + "cascadeDelete": false, + "childSObject": "WorkThanks", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkThanks", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkThanksShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "WorkThanksShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkType", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkType", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkType", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeChangeEvent", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeChangeEvent", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeChangeEvent", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeGroup", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeGroup", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeGroup", + "deprecatedAndHidden": false, + "field": "OwnerId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeGroupFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeGroupFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeGroupHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeGroupMember", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeGroupMember", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeGroupMemberFeed", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeGroupMemberFeed", + "deprecatedAndHidden": false, + "field": "InsertedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeGroupMemberHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeGroupShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "WorkTypeGroupShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeHistory", + "deprecatedAndHidden": false, + "field": "CreatedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": false, + "childSObject": "WorkTypeShare", + "deprecatedAndHidden": false, + "field": "LastModifiedById", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + }, + { + "cascadeDelete": true, + "childSObject": "WorkTypeShare", + "deprecatedAndHidden": false, + "field": "UserOrGroupId", + "junctionIdListNames": [], + "junctionReferenceTo": [], + "relationshipName": null, + "restrictedDelete": false + } + ], + "custom": false, + "name": "User", + "queryable": true +} \ No newline at end of file diff --git a/.sfdx/tools/soqlMetadata/typeNames.json b/.sfdx/tools/soqlMetadata/typeNames.json new file mode 100644 index 0000000..2db0b4d --- /dev/null +++ b/.sfdx/tools/soqlMetadata/typeNames.json @@ -0,0 +1,78 @@ +[ + { + "name": "Account", + "custom": false + }, + { + "name": "AccountHistory", + "custom": false + }, + { + "name": "Asset", + "custom": false + }, + { + "name": "Attachment", + "custom": false + }, + { + "name": "Case", + "custom": false + }, + { + "name": "Contact", + "custom": false + }, + { + "name": "Contract", + "custom": false + }, + { + "name": "Domain", + "custom": false + }, + { + "name": "Lead", + "custom": false + }, + { + "name": "Note", + "custom": false + }, + { + "name": "Opportunity", + "custom": false + }, + { + "name": "Order", + "custom": false + }, + { + "name": "Pricebook2", + "custom": false + }, + { + "name": "PricebookEntry", + "custom": false + }, + { + "name": "Product2", + "custom": false + }, + { + "name": "RecordType", + "custom": false + }, + { + "name": "Report", + "custom": false + }, + { + "name": "Task", + "custom": false + }, + { + "name": "User", + "custom": false + } +] \ No newline at end of file diff --git a/.sfdx/typings/lwc/sobjects/Account.d.ts b/.sfdx/typings/lwc/sobjects/Account.d.ts new file mode 100644 index 0000000..b984906 --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Account.d.ts @@ -0,0 +1,264 @@ +declare module "@salesforce/schema/Account.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Account.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/Account.MasterRecord" { + const MasterRecord:any; + export default MasterRecord; +} +declare module "@salesforce/schema/Account.MasterRecordId" { + const MasterRecordId:any; + export default MasterRecordId; +} +declare module "@salesforce/schema/Account.Name" { + const Name:string; + export default Name; +} +declare module "@salesforce/schema/Account.Type" { + const Type:string; + export default Type; +} +declare module "@salesforce/schema/Account.Parent" { + const Parent:any; + export default Parent; +} +declare module "@salesforce/schema/Account.ParentId" { + const ParentId:any; + export default ParentId; +} +declare module "@salesforce/schema/Account.BillingStreet" { + const BillingStreet:string; + export default BillingStreet; +} +declare module "@salesforce/schema/Account.BillingCity" { + const BillingCity:string; + export default BillingCity; +} +declare module "@salesforce/schema/Account.BillingState" { + const BillingState:string; + export default BillingState; +} +declare module "@salesforce/schema/Account.BillingPostalCode" { + const BillingPostalCode:string; + export default BillingPostalCode; +} +declare module "@salesforce/schema/Account.BillingCountry" { + const BillingCountry:string; + export default BillingCountry; +} +declare module "@salesforce/schema/Account.BillingLatitude" { + const BillingLatitude:number; + export default BillingLatitude; +} +declare module "@salesforce/schema/Account.BillingLongitude" { + const BillingLongitude:number; + export default BillingLongitude; +} +declare module "@salesforce/schema/Account.BillingGeocodeAccuracy" { + const BillingGeocodeAccuracy:string; + export default BillingGeocodeAccuracy; +} +declare module "@salesforce/schema/Account.BillingAddress" { + const BillingAddress:any; + export default BillingAddress; +} +declare module "@salesforce/schema/Account.ShippingStreet" { + const ShippingStreet:string; + export default ShippingStreet; +} +declare module "@salesforce/schema/Account.ShippingCity" { + const ShippingCity:string; + export default ShippingCity; +} +declare module "@salesforce/schema/Account.ShippingState" { + const ShippingState:string; + export default ShippingState; +} +declare module "@salesforce/schema/Account.ShippingPostalCode" { + const ShippingPostalCode:string; + export default ShippingPostalCode; +} +declare module "@salesforce/schema/Account.ShippingCountry" { + const ShippingCountry:string; + export default ShippingCountry; +} +declare module "@salesforce/schema/Account.ShippingLatitude" { + const ShippingLatitude:number; + export default ShippingLatitude; +} +declare module "@salesforce/schema/Account.ShippingLongitude" { + const ShippingLongitude:number; + export default ShippingLongitude; +} +declare module "@salesforce/schema/Account.ShippingGeocodeAccuracy" { + const ShippingGeocodeAccuracy:string; + export default ShippingGeocodeAccuracy; +} +declare module "@salesforce/schema/Account.ShippingAddress" { + const ShippingAddress:any; + export default ShippingAddress; +} +declare module "@salesforce/schema/Account.Phone" { + const Phone:string; + export default Phone; +} +declare module "@salesforce/schema/Account.Fax" { + const Fax:string; + export default Fax; +} +declare module "@salesforce/schema/Account.AccountNumber" { + const AccountNumber:string; + export default AccountNumber; +} +declare module "@salesforce/schema/Account.Website" { + const Website:string; + export default Website; +} +declare module "@salesforce/schema/Account.PhotoUrl" { + const PhotoUrl:string; + export default PhotoUrl; +} +declare module "@salesforce/schema/Account.Sic" { + const Sic:string; + export default Sic; +} +declare module "@salesforce/schema/Account.Industry" { + const Industry:string; + export default Industry; +} +declare module "@salesforce/schema/Account.AnnualRevenue" { + const AnnualRevenue:number; + export default AnnualRevenue; +} +declare module "@salesforce/schema/Account.NumberOfEmployees" { + const NumberOfEmployees:number; + export default NumberOfEmployees; +} +declare module "@salesforce/schema/Account.Ownership" { + const Ownership:string; + export default Ownership; +} +declare module "@salesforce/schema/Account.TickerSymbol" { + const TickerSymbol:string; + export default TickerSymbol; +} +declare module "@salesforce/schema/Account.Description" { + const Description:string; + export default Description; +} +declare module "@salesforce/schema/Account.Rating" { + const Rating:string; + export default Rating; +} +declare module "@salesforce/schema/Account.Site" { + const Site:string; + export default Site; +} +declare module "@salesforce/schema/Account.Owner" { + const Owner:any; + export default Owner; +} +declare module "@salesforce/schema/Account.OwnerId" { + const OwnerId:any; + export default OwnerId; +} +declare module "@salesforce/schema/Account.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Account.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Account.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Account.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Account.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Account.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Account.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/Account.LastActivityDate" { + const LastActivityDate:any; + export default LastActivityDate; +} +declare module "@salesforce/schema/Account.LastViewedDate" { + const LastViewedDate:any; + export default LastViewedDate; +} +declare module "@salesforce/schema/Account.LastReferencedDate" { + const LastReferencedDate:any; + export default LastReferencedDate; +} +declare module "@salesforce/schema/Account.Jigsaw" { + const Jigsaw:string; + export default Jigsaw; +} +declare module "@salesforce/schema/Account.JigsawCompanyId" { + const JigsawCompanyId:string; + export default JigsawCompanyId; +} +declare module "@salesforce/schema/Account.CleanStatus" { + const CleanStatus:string; + export default CleanStatus; +} +declare module "@salesforce/schema/Account.AccountSource" { + const AccountSource:string; + export default AccountSource; +} +declare module "@salesforce/schema/Account.DunsNumber" { + const DunsNumber:string; + export default DunsNumber; +} +declare module "@salesforce/schema/Account.Tradestyle" { + const Tradestyle:string; + export default Tradestyle; +} +declare module "@salesforce/schema/Account.NaicsCode" { + const NaicsCode:string; + export default NaicsCode; +} +declare module "@salesforce/schema/Account.NaicsDesc" { + const NaicsDesc:string; + export default NaicsDesc; +} +declare module "@salesforce/schema/Account.YearStarted" { + const YearStarted:string; + export default YearStarted; +} +declare module "@salesforce/schema/Account.SicDesc" { + const SicDesc:string; + export default SicDesc; +} +declare module "@salesforce/schema/Account.DandbCompany" { + const DandbCompany:any; + export default DandbCompany; +} +declare module "@salesforce/schema/Account.DandbCompanyId" { + const DandbCompanyId:any; + export default DandbCompanyId; +} +declare module "@salesforce/schema/Account.OperatingHours" { + const OperatingHours:any; + export default OperatingHours; +} +declare module "@salesforce/schema/Account.OperatingHoursId" { + const OperatingHoursId:any; + export default OperatingHoursId; +} diff --git a/.sfdx/typings/lwc/sobjects/AccountHistory.d.ts b/.sfdx/typings/lwc/sobjects/AccountHistory.d.ts new file mode 100644 index 0000000..8ab28c6 --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/AccountHistory.d.ts @@ -0,0 +1,44 @@ +declare module "@salesforce/schema/AccountHistory.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/AccountHistory.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/AccountHistory.Account" { + const Account:any; + export default Account; +} +declare module "@salesforce/schema/AccountHistory.AccountId" { + const AccountId:any; + export default AccountId; +} +declare module "@salesforce/schema/AccountHistory.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/AccountHistory.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/AccountHistory.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/AccountHistory.Field" { + const Field:string; + export default Field; +} +declare module "@salesforce/schema/AccountHistory.DataType" { + const DataType:string; + export default DataType; +} +declare module "@salesforce/schema/AccountHistory.OldValue" { + const OldValue:any; + export default OldValue; +} +declare module "@salesforce/schema/AccountHistory.NewValue" { + const NewValue:any; + export default NewValue; +} diff --git a/.sfdx/typings/lwc/sobjects/Asset.d.ts b/.sfdx/typings/lwc/sobjects/Asset.d.ts new file mode 100644 index 0000000..5787545 --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Asset.d.ts @@ -0,0 +1,240 @@ +declare module "@salesforce/schema/Asset.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Asset.Contact" { + const Contact:any; + export default Contact; +} +declare module "@salesforce/schema/Asset.ContactId" { + const ContactId:any; + export default ContactId; +} +declare module "@salesforce/schema/Asset.Account" { + const Account:any; + export default Account; +} +declare module "@salesforce/schema/Asset.AccountId" { + const AccountId:any; + export default AccountId; +} +declare module "@salesforce/schema/Asset.Parent" { + const Parent:any; + export default Parent; +} +declare module "@salesforce/schema/Asset.ParentId" { + const ParentId:any; + export default ParentId; +} +declare module "@salesforce/schema/Asset.RootAsset" { + const RootAsset:any; + export default RootAsset; +} +declare module "@salesforce/schema/Asset.RootAssetId" { + const RootAssetId:any; + export default RootAssetId; +} +declare module "@salesforce/schema/Asset.Product2" { + const Product2:any; + export default Product2; +} +declare module "@salesforce/schema/Asset.Product2Id" { + const Product2Id:any; + export default Product2Id; +} +declare module "@salesforce/schema/Asset.ProductCode" { + const ProductCode:string; + export default ProductCode; +} +declare module "@salesforce/schema/Asset.IsCompetitorProduct" { + const IsCompetitorProduct:boolean; + export default IsCompetitorProduct; +} +declare module "@salesforce/schema/Asset.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Asset.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Asset.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Asset.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Asset.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Asset.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Asset.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/Asset.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/Asset.Name" { + const Name:string; + export default Name; +} +declare module "@salesforce/schema/Asset.SerialNumber" { + const SerialNumber:string; + export default SerialNumber; +} +declare module "@salesforce/schema/Asset.InstallDate" { + const InstallDate:any; + export default InstallDate; +} +declare module "@salesforce/schema/Asset.PurchaseDate" { + const PurchaseDate:any; + export default PurchaseDate; +} +declare module "@salesforce/schema/Asset.UsageEndDate" { + const UsageEndDate:any; + export default UsageEndDate; +} +declare module "@salesforce/schema/Asset.LifecycleStartDate" { + const LifecycleStartDate:any; + export default LifecycleStartDate; +} +declare module "@salesforce/schema/Asset.LifecycleEndDate" { + const LifecycleEndDate:any; + export default LifecycleEndDate; +} +declare module "@salesforce/schema/Asset.Status" { + const Status:string; + export default Status; +} +declare module "@salesforce/schema/Asset.Price" { + const Price:number; + export default Price; +} +declare module "@salesforce/schema/Asset.Quantity" { + const Quantity:number; + export default Quantity; +} +declare module "@salesforce/schema/Asset.Description" { + const Description:string; + export default Description; +} +declare module "@salesforce/schema/Asset.Owner" { + const Owner:any; + export default Owner; +} +declare module "@salesforce/schema/Asset.OwnerId" { + const OwnerId:any; + export default OwnerId; +} +declare module "@salesforce/schema/Asset.Location" { + const Location:any; + export default Location; +} +declare module "@salesforce/schema/Asset.LocationId" { + const LocationId:any; + export default LocationId; +} +declare module "@salesforce/schema/Asset.AssetProvidedBy" { + const AssetProvidedBy:any; + export default AssetProvidedBy; +} +declare module "@salesforce/schema/Asset.AssetProvidedById" { + const AssetProvidedById:any; + export default AssetProvidedById; +} +declare module "@salesforce/schema/Asset.AssetServicedBy" { + const AssetServicedBy:any; + export default AssetServicedBy; +} +declare module "@salesforce/schema/Asset.AssetServicedById" { + const AssetServicedById:any; + export default AssetServicedById; +} +declare module "@salesforce/schema/Asset.IsInternal" { + const IsInternal:boolean; + export default IsInternal; +} +declare module "@salesforce/schema/Asset.AssetLevel" { + const AssetLevel:number; + export default AssetLevel; +} +declare module "@salesforce/schema/Asset.StockKeepingUnit" { + const StockKeepingUnit:string; + export default StockKeepingUnit; +} +declare module "@salesforce/schema/Asset.HasLifecycleManagement" { + const HasLifecycleManagement:boolean; + export default HasLifecycleManagement; +} +declare module "@salesforce/schema/Asset.CurrentMrr" { + const CurrentMrr:number; + export default CurrentMrr; +} +declare module "@salesforce/schema/Asset.CurrentLifecycleEndDate" { + const CurrentLifecycleEndDate:any; + export default CurrentLifecycleEndDate; +} +declare module "@salesforce/schema/Asset.CurrentQuantity" { + const CurrentQuantity:number; + export default CurrentQuantity; +} +declare module "@salesforce/schema/Asset.CurrentAmount" { + const CurrentAmount:number; + export default CurrentAmount; +} +declare module "@salesforce/schema/Asset.TotalLifecycleAmount" { + const TotalLifecycleAmount:number; + export default TotalLifecycleAmount; +} +declare module "@salesforce/schema/Asset.Street" { + const Street:string; + export default Street; +} +declare module "@salesforce/schema/Asset.City" { + const City:string; + export default City; +} +declare module "@salesforce/schema/Asset.State" { + const State:string; + export default State; +} +declare module "@salesforce/schema/Asset.PostalCode" { + const PostalCode:string; + export default PostalCode; +} +declare module "@salesforce/schema/Asset.Country" { + const Country:string; + export default Country; +} +declare module "@salesforce/schema/Asset.Latitude" { + const Latitude:number; + export default Latitude; +} +declare module "@salesforce/schema/Asset.Longitude" { + const Longitude:number; + export default Longitude; +} +declare module "@salesforce/schema/Asset.GeocodeAccuracy" { + const GeocodeAccuracy:string; + export default GeocodeAccuracy; +} +declare module "@salesforce/schema/Asset.Address" { + const Address:any; + export default Address; +} +declare module "@salesforce/schema/Asset.LastViewedDate" { + const LastViewedDate:any; + export default LastViewedDate; +} +declare module "@salesforce/schema/Asset.LastReferencedDate" { + const LastReferencedDate:any; + export default LastReferencedDate; +} diff --git a/.sfdx/typings/lwc/sobjects/Attachment.d.ts b/.sfdx/typings/lwc/sobjects/Attachment.d.ts new file mode 100644 index 0000000..52f1d58 --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Attachment.d.ts @@ -0,0 +1,76 @@ +declare module "@salesforce/schema/Attachment.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Attachment.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/Attachment.Parent" { + const Parent:any; + export default Parent; +} +declare module "@salesforce/schema/Attachment.ParentId" { + const ParentId:any; + export default ParentId; +} +declare module "@salesforce/schema/Attachment.Name" { + const Name:string; + export default Name; +} +declare module "@salesforce/schema/Attachment.IsPrivate" { + const IsPrivate:boolean; + export default IsPrivate; +} +declare module "@salesforce/schema/Attachment.ContentType" { + const ContentType:string; + export default ContentType; +} +declare module "@salesforce/schema/Attachment.BodyLength" { + const BodyLength:number; + export default BodyLength; +} +declare module "@salesforce/schema/Attachment.Body" { + const Body:any; + export default Body; +} +declare module "@salesforce/schema/Attachment.Owner" { + const Owner:any; + export default Owner; +} +declare module "@salesforce/schema/Attachment.OwnerId" { + const OwnerId:any; + export default OwnerId; +} +declare module "@salesforce/schema/Attachment.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Attachment.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Attachment.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Attachment.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Attachment.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Attachment.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Attachment.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/Attachment.Description" { + const Description:string; + export default Description; +} diff --git a/.sfdx/typings/lwc/sobjects/Case.d.ts b/.sfdx/typings/lwc/sobjects/Case.d.ts new file mode 100644 index 0000000..0f7b38a --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Case.d.ts @@ -0,0 +1,172 @@ +declare module "@salesforce/schema/Case.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Case.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/Case.MasterRecord" { + const MasterRecord:any; + export default MasterRecord; +} +declare module "@salesforce/schema/Case.MasterRecordId" { + const MasterRecordId:any; + export default MasterRecordId; +} +declare module "@salesforce/schema/Case.CaseNumber" { + const CaseNumber:string; + export default CaseNumber; +} +declare module "@salesforce/schema/Case.Contact" { + const Contact:any; + export default Contact; +} +declare module "@salesforce/schema/Case.ContactId" { + const ContactId:any; + export default ContactId; +} +declare module "@salesforce/schema/Case.Account" { + const Account:any; + export default Account; +} +declare module "@salesforce/schema/Case.AccountId" { + const AccountId:any; + export default AccountId; +} +declare module "@salesforce/schema/Case.Asset" { + const Asset:any; + export default Asset; +} +declare module "@salesforce/schema/Case.AssetId" { + const AssetId:any; + export default AssetId; +} +declare module "@salesforce/schema/Case.Parent" { + const Parent:any; + export default Parent; +} +declare module "@salesforce/schema/Case.ParentId" { + const ParentId:any; + export default ParentId; +} +declare module "@salesforce/schema/Case.SuppliedName" { + const SuppliedName:string; + export default SuppliedName; +} +declare module "@salesforce/schema/Case.SuppliedEmail" { + const SuppliedEmail:string; + export default SuppliedEmail; +} +declare module "@salesforce/schema/Case.SuppliedPhone" { + const SuppliedPhone:string; + export default SuppliedPhone; +} +declare module "@salesforce/schema/Case.SuppliedCompany" { + const SuppliedCompany:string; + export default SuppliedCompany; +} +declare module "@salesforce/schema/Case.Type" { + const Type:string; + export default Type; +} +declare module "@salesforce/schema/Case.Status" { + const Status:string; + export default Status; +} +declare module "@salesforce/schema/Case.Reason" { + const Reason:string; + export default Reason; +} +declare module "@salesforce/schema/Case.Origin" { + const Origin:string; + export default Origin; +} +declare module "@salesforce/schema/Case.Subject" { + const Subject:string; + export default Subject; +} +declare module "@salesforce/schema/Case.Priority" { + const Priority:string; + export default Priority; +} +declare module "@salesforce/schema/Case.Description" { + const Description:string; + export default Description; +} +declare module "@salesforce/schema/Case.IsClosed" { + const IsClosed:boolean; + export default IsClosed; +} +declare module "@salesforce/schema/Case.ClosedDate" { + const ClosedDate:any; + export default ClosedDate; +} +declare module "@salesforce/schema/Case.IsEscalated" { + const IsEscalated:boolean; + export default IsEscalated; +} +declare module "@salesforce/schema/Case.Owner" { + const Owner:any; + export default Owner; +} +declare module "@salesforce/schema/Case.OwnerId" { + const OwnerId:any; + export default OwnerId; +} +declare module "@salesforce/schema/Case.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Case.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Case.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Case.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Case.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Case.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Case.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/Case.ContactPhone" { + const ContactPhone:string; + export default ContactPhone; +} +declare module "@salesforce/schema/Case.ContactMobile" { + const ContactMobile:string; + export default ContactMobile; +} +declare module "@salesforce/schema/Case.ContactEmail" { + const ContactEmail:string; + export default ContactEmail; +} +declare module "@salesforce/schema/Case.ContactFax" { + const ContactFax:string; + export default ContactFax; +} +declare module "@salesforce/schema/Case.Comments" { + const Comments:string; + export default Comments; +} +declare module "@salesforce/schema/Case.LastViewedDate" { + const LastViewedDate:any; + export default LastViewedDate; +} +declare module "@salesforce/schema/Case.LastReferencedDate" { + const LastReferencedDate:any; + export default LastReferencedDate; +} diff --git a/.sfdx/typings/lwc/sobjects/Contact.d.ts b/.sfdx/typings/lwc/sobjects/Contact.d.ts new file mode 100644 index 0000000..4dd486d --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Contact.d.ts @@ -0,0 +1,264 @@ +declare module "@salesforce/schema/Contact.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Contact.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/Contact.MasterRecord" { + const MasterRecord:any; + export default MasterRecord; +} +declare module "@salesforce/schema/Contact.MasterRecordId" { + const MasterRecordId:any; + export default MasterRecordId; +} +declare module "@salesforce/schema/Contact.Account" { + const Account:any; + export default Account; +} +declare module "@salesforce/schema/Contact.AccountId" { + const AccountId:any; + export default AccountId; +} +declare module "@salesforce/schema/Contact.LastName" { + const LastName:string; + export default LastName; +} +declare module "@salesforce/schema/Contact.FirstName" { + const FirstName:string; + export default FirstName; +} +declare module "@salesforce/schema/Contact.Salutation" { + const Salutation:string; + export default Salutation; +} +declare module "@salesforce/schema/Contact.Name" { + const Name:string; + export default Name; +} +declare module "@salesforce/schema/Contact.OtherStreet" { + const OtherStreet:string; + export default OtherStreet; +} +declare module "@salesforce/schema/Contact.OtherCity" { + const OtherCity:string; + export default OtherCity; +} +declare module "@salesforce/schema/Contact.OtherState" { + const OtherState:string; + export default OtherState; +} +declare module "@salesforce/schema/Contact.OtherPostalCode" { + const OtherPostalCode:string; + export default OtherPostalCode; +} +declare module "@salesforce/schema/Contact.OtherCountry" { + const OtherCountry:string; + export default OtherCountry; +} +declare module "@salesforce/schema/Contact.OtherLatitude" { + const OtherLatitude:number; + export default OtherLatitude; +} +declare module "@salesforce/schema/Contact.OtherLongitude" { + const OtherLongitude:number; + export default OtherLongitude; +} +declare module "@salesforce/schema/Contact.OtherGeocodeAccuracy" { + const OtherGeocodeAccuracy:string; + export default OtherGeocodeAccuracy; +} +declare module "@salesforce/schema/Contact.OtherAddress" { + const OtherAddress:any; + export default OtherAddress; +} +declare module "@salesforce/schema/Contact.MailingStreet" { + const MailingStreet:string; + export default MailingStreet; +} +declare module "@salesforce/schema/Contact.MailingCity" { + const MailingCity:string; + export default MailingCity; +} +declare module "@salesforce/schema/Contact.MailingState" { + const MailingState:string; + export default MailingState; +} +declare module "@salesforce/schema/Contact.MailingPostalCode" { + const MailingPostalCode:string; + export default MailingPostalCode; +} +declare module "@salesforce/schema/Contact.MailingCountry" { + const MailingCountry:string; + export default MailingCountry; +} +declare module "@salesforce/schema/Contact.MailingLatitude" { + const MailingLatitude:number; + export default MailingLatitude; +} +declare module "@salesforce/schema/Contact.MailingLongitude" { + const MailingLongitude:number; + export default MailingLongitude; +} +declare module "@salesforce/schema/Contact.MailingGeocodeAccuracy" { + const MailingGeocodeAccuracy:string; + export default MailingGeocodeAccuracy; +} +declare module "@salesforce/schema/Contact.MailingAddress" { + const MailingAddress:any; + export default MailingAddress; +} +declare module "@salesforce/schema/Contact.Phone" { + const Phone:string; + export default Phone; +} +declare module "@salesforce/schema/Contact.Fax" { + const Fax:string; + export default Fax; +} +declare module "@salesforce/schema/Contact.MobilePhone" { + const MobilePhone:string; + export default MobilePhone; +} +declare module "@salesforce/schema/Contact.HomePhone" { + const HomePhone:string; + export default HomePhone; +} +declare module "@salesforce/schema/Contact.OtherPhone" { + const OtherPhone:string; + export default OtherPhone; +} +declare module "@salesforce/schema/Contact.AssistantPhone" { + const AssistantPhone:string; + export default AssistantPhone; +} +declare module "@salesforce/schema/Contact.ReportsTo" { + const ReportsTo:any; + export default ReportsTo; +} +declare module "@salesforce/schema/Contact.ReportsToId" { + const ReportsToId:any; + export default ReportsToId; +} +declare module "@salesforce/schema/Contact.Email" { + const Email:string; + export default Email; +} +declare module "@salesforce/schema/Contact.Title" { + const Title:string; + export default Title; +} +declare module "@salesforce/schema/Contact.Department" { + const Department:string; + export default Department; +} +declare module "@salesforce/schema/Contact.AssistantName" { + const AssistantName:string; + export default AssistantName; +} +declare module "@salesforce/schema/Contact.LeadSource" { + const LeadSource:string; + export default LeadSource; +} +declare module "@salesforce/schema/Contact.Birthdate" { + const Birthdate:any; + export default Birthdate; +} +declare module "@salesforce/schema/Contact.Description" { + const Description:string; + export default Description; +} +declare module "@salesforce/schema/Contact.Owner" { + const Owner:any; + export default Owner; +} +declare module "@salesforce/schema/Contact.OwnerId" { + const OwnerId:any; + export default OwnerId; +} +declare module "@salesforce/schema/Contact.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Contact.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Contact.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Contact.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Contact.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Contact.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Contact.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/Contact.LastActivityDate" { + const LastActivityDate:any; + export default LastActivityDate; +} +declare module "@salesforce/schema/Contact.LastCURequestDate" { + const LastCURequestDate:any; + export default LastCURequestDate; +} +declare module "@salesforce/schema/Contact.LastCUUpdateDate" { + const LastCUUpdateDate:any; + export default LastCUUpdateDate; +} +declare module "@salesforce/schema/Contact.LastViewedDate" { + const LastViewedDate:any; + export default LastViewedDate; +} +declare module "@salesforce/schema/Contact.LastReferencedDate" { + const LastReferencedDate:any; + export default LastReferencedDate; +} +declare module "@salesforce/schema/Contact.EmailBouncedReason" { + const EmailBouncedReason:string; + export default EmailBouncedReason; +} +declare module "@salesforce/schema/Contact.EmailBouncedDate" { + const EmailBouncedDate:any; + export default EmailBouncedDate; +} +declare module "@salesforce/schema/Contact.IsEmailBounced" { + const IsEmailBounced:boolean; + export default IsEmailBounced; +} +declare module "@salesforce/schema/Contact.PhotoUrl" { + const PhotoUrl:string; + export default PhotoUrl; +} +declare module "@salesforce/schema/Contact.Jigsaw" { + const Jigsaw:string; + export default Jigsaw; +} +declare module "@salesforce/schema/Contact.JigsawContactId" { + const JigsawContactId:string; + export default JigsawContactId; +} +declare module "@salesforce/schema/Contact.CleanStatus" { + const CleanStatus:string; + export default CleanStatus; +} +declare module "@salesforce/schema/Contact.Individual" { + const Individual:any; + export default Individual; +} +declare module "@salesforce/schema/Contact.IndividualId" { + const IndividualId:any; + export default IndividualId; +} diff --git a/.sfdx/typings/lwc/sobjects/Contract.d.ts b/.sfdx/typings/lwc/sobjects/Contract.d.ts new file mode 100644 index 0000000..f9182ad --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Contract.d.ts @@ -0,0 +1,188 @@ +declare module "@salesforce/schema/Contract.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Contract.Account" { + const Account:any; + export default Account; +} +declare module "@salesforce/schema/Contract.AccountId" { + const AccountId:any; + export default AccountId; +} +declare module "@salesforce/schema/Contract.Pricebook2" { + const Pricebook2:any; + export default Pricebook2; +} +declare module "@salesforce/schema/Contract.Pricebook2Id" { + const Pricebook2Id:any; + export default Pricebook2Id; +} +declare module "@salesforce/schema/Contract.OwnerExpirationNotice" { + const OwnerExpirationNotice:string; + export default OwnerExpirationNotice; +} +declare module "@salesforce/schema/Contract.StartDate" { + const StartDate:any; + export default StartDate; +} +declare module "@salesforce/schema/Contract.EndDate" { + const EndDate:any; + export default EndDate; +} +declare module "@salesforce/schema/Contract.BillingStreet" { + const BillingStreet:string; + export default BillingStreet; +} +declare module "@salesforce/schema/Contract.BillingCity" { + const BillingCity:string; + export default BillingCity; +} +declare module "@salesforce/schema/Contract.BillingState" { + const BillingState:string; + export default BillingState; +} +declare module "@salesforce/schema/Contract.BillingPostalCode" { + const BillingPostalCode:string; + export default BillingPostalCode; +} +declare module "@salesforce/schema/Contract.BillingCountry" { + const BillingCountry:string; + export default BillingCountry; +} +declare module "@salesforce/schema/Contract.BillingLatitude" { + const BillingLatitude:number; + export default BillingLatitude; +} +declare module "@salesforce/schema/Contract.BillingLongitude" { + const BillingLongitude:number; + export default BillingLongitude; +} +declare module "@salesforce/schema/Contract.BillingGeocodeAccuracy" { + const BillingGeocodeAccuracy:string; + export default BillingGeocodeAccuracy; +} +declare module "@salesforce/schema/Contract.BillingAddress" { + const BillingAddress:any; + export default BillingAddress; +} +declare module "@salesforce/schema/Contract.ContractTerm" { + const ContractTerm:number; + export default ContractTerm; +} +declare module "@salesforce/schema/Contract.Owner" { + const Owner:any; + export default Owner; +} +declare module "@salesforce/schema/Contract.OwnerId" { + const OwnerId:any; + export default OwnerId; +} +declare module "@salesforce/schema/Contract.Status" { + const Status:string; + export default Status; +} +declare module "@salesforce/schema/Contract.CompanySigned" { + const CompanySigned:any; + export default CompanySigned; +} +declare module "@salesforce/schema/Contract.CompanySignedId" { + const CompanySignedId:any; + export default CompanySignedId; +} +declare module "@salesforce/schema/Contract.CompanySignedDate" { + const CompanySignedDate:any; + export default CompanySignedDate; +} +declare module "@salesforce/schema/Contract.CustomerSigned" { + const CustomerSigned:any; + export default CustomerSigned; +} +declare module "@salesforce/schema/Contract.CustomerSignedId" { + const CustomerSignedId:any; + export default CustomerSignedId; +} +declare module "@salesforce/schema/Contract.CustomerSignedTitle" { + const CustomerSignedTitle:string; + export default CustomerSignedTitle; +} +declare module "@salesforce/schema/Contract.CustomerSignedDate" { + const CustomerSignedDate:any; + export default CustomerSignedDate; +} +declare module "@salesforce/schema/Contract.SpecialTerms" { + const SpecialTerms:string; + export default SpecialTerms; +} +declare module "@salesforce/schema/Contract.ActivatedBy" { + const ActivatedBy:any; + export default ActivatedBy; +} +declare module "@salesforce/schema/Contract.ActivatedById" { + const ActivatedById:any; + export default ActivatedById; +} +declare module "@salesforce/schema/Contract.ActivatedDate" { + const ActivatedDate:any; + export default ActivatedDate; +} +declare module "@salesforce/schema/Contract.StatusCode" { + const StatusCode:string; + export default StatusCode; +} +declare module "@salesforce/schema/Contract.Description" { + const Description:string; + export default Description; +} +declare module "@salesforce/schema/Contract.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/Contract.ContractNumber" { + const ContractNumber:string; + export default ContractNumber; +} +declare module "@salesforce/schema/Contract.LastApprovedDate" { + const LastApprovedDate:any; + export default LastApprovedDate; +} +declare module "@salesforce/schema/Contract.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Contract.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Contract.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Contract.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Contract.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Contract.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Contract.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/Contract.LastActivityDate" { + const LastActivityDate:any; + export default LastActivityDate; +} +declare module "@salesforce/schema/Contract.LastViewedDate" { + const LastViewedDate:any; + export default LastViewedDate; +} +declare module "@salesforce/schema/Contract.LastReferencedDate" { + const LastReferencedDate:any; + export default LastReferencedDate; +} diff --git a/.sfdx/typings/lwc/sobjects/Domain.d.ts b/.sfdx/typings/lwc/sobjects/Domain.d.ts new file mode 100644 index 0000000..4efb843 --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Domain.d.ts @@ -0,0 +1,52 @@ +declare module "@salesforce/schema/Domain.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Domain.DomainType" { + const DomainType:string; + export default DomainType; +} +declare module "@salesforce/schema/Domain.Domain" { + const Domain:string; + export default Domain; +} +declare module "@salesforce/schema/Domain.OptionsHstsPreload" { + const OptionsHstsPreload:boolean; + export default OptionsHstsPreload; +} +declare module "@salesforce/schema/Domain.CnameTarget" { + const CnameTarget:string; + export default CnameTarget; +} +declare module "@salesforce/schema/Domain.HttpsOption" { + const HttpsOption:string; + export default HttpsOption; +} +declare module "@salesforce/schema/Domain.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Domain.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Domain.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Domain.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Domain.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Domain.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Domain.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} diff --git a/.sfdx/typings/lwc/sobjects/Lead.d.ts b/.sfdx/typings/lwc/sobjects/Lead.d.ts new file mode 100644 index 0000000..04a1ca7 --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Lead.d.ts @@ -0,0 +1,252 @@ +declare module "@salesforce/schema/Lead.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Lead.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/Lead.MasterRecord" { + const MasterRecord:any; + export default MasterRecord; +} +declare module "@salesforce/schema/Lead.MasterRecordId" { + const MasterRecordId:any; + export default MasterRecordId; +} +declare module "@salesforce/schema/Lead.LastName" { + const LastName:string; + export default LastName; +} +declare module "@salesforce/schema/Lead.FirstName" { + const FirstName:string; + export default FirstName; +} +declare module "@salesforce/schema/Lead.Salutation" { + const Salutation:string; + export default Salutation; +} +declare module "@salesforce/schema/Lead.Name" { + const Name:string; + export default Name; +} +declare module "@salesforce/schema/Lead.Title" { + const Title:string; + export default Title; +} +declare module "@salesforce/schema/Lead.Company" { + const Company:string; + export default Company; +} +declare module "@salesforce/schema/Lead.Street" { + const Street:string; + export default Street; +} +declare module "@salesforce/schema/Lead.City" { + const City:string; + export default City; +} +declare module "@salesforce/schema/Lead.State" { + const State:string; + export default State; +} +declare module "@salesforce/schema/Lead.PostalCode" { + const PostalCode:string; + export default PostalCode; +} +declare module "@salesforce/schema/Lead.Country" { + const Country:string; + export default Country; +} +declare module "@salesforce/schema/Lead.Latitude" { + const Latitude:number; + export default Latitude; +} +declare module "@salesforce/schema/Lead.Longitude" { + const Longitude:number; + export default Longitude; +} +declare module "@salesforce/schema/Lead.GeocodeAccuracy" { + const GeocodeAccuracy:string; + export default GeocodeAccuracy; +} +declare module "@salesforce/schema/Lead.Address" { + const Address:any; + export default Address; +} +declare module "@salesforce/schema/Lead.Phone" { + const Phone:string; + export default Phone; +} +declare module "@salesforce/schema/Lead.MobilePhone" { + const MobilePhone:string; + export default MobilePhone; +} +declare module "@salesforce/schema/Lead.Fax" { + const Fax:string; + export default Fax; +} +declare module "@salesforce/schema/Lead.Email" { + const Email:string; + export default Email; +} +declare module "@salesforce/schema/Lead.Website" { + const Website:string; + export default Website; +} +declare module "@salesforce/schema/Lead.PhotoUrl" { + const PhotoUrl:string; + export default PhotoUrl; +} +declare module "@salesforce/schema/Lead.Description" { + const Description:string; + export default Description; +} +declare module "@salesforce/schema/Lead.LeadSource" { + const LeadSource:string; + export default LeadSource; +} +declare module "@salesforce/schema/Lead.Status" { + const Status:string; + export default Status; +} +declare module "@salesforce/schema/Lead.Industry" { + const Industry:string; + export default Industry; +} +declare module "@salesforce/schema/Lead.Rating" { + const Rating:string; + export default Rating; +} +declare module "@salesforce/schema/Lead.AnnualRevenue" { + const AnnualRevenue:number; + export default AnnualRevenue; +} +declare module "@salesforce/schema/Lead.NumberOfEmployees" { + const NumberOfEmployees:number; + export default NumberOfEmployees; +} +declare module "@salesforce/schema/Lead.Owner" { + const Owner:any; + export default Owner; +} +declare module "@salesforce/schema/Lead.OwnerId" { + const OwnerId:any; + export default OwnerId; +} +declare module "@salesforce/schema/Lead.IsConverted" { + const IsConverted:boolean; + export default IsConverted; +} +declare module "@salesforce/schema/Lead.ConvertedDate" { + const ConvertedDate:any; + export default ConvertedDate; +} +declare module "@salesforce/schema/Lead.ConvertedAccount" { + const ConvertedAccount:any; + export default ConvertedAccount; +} +declare module "@salesforce/schema/Lead.ConvertedAccountId" { + const ConvertedAccountId:any; + export default ConvertedAccountId; +} +declare module "@salesforce/schema/Lead.ConvertedContact" { + const ConvertedContact:any; + export default ConvertedContact; +} +declare module "@salesforce/schema/Lead.ConvertedContactId" { + const ConvertedContactId:any; + export default ConvertedContactId; +} +declare module "@salesforce/schema/Lead.ConvertedOpportunity" { + const ConvertedOpportunity:any; + export default ConvertedOpportunity; +} +declare module "@salesforce/schema/Lead.ConvertedOpportunityId" { + const ConvertedOpportunityId:any; + export default ConvertedOpportunityId; +} +declare module "@salesforce/schema/Lead.IsUnreadByOwner" { + const IsUnreadByOwner:boolean; + export default IsUnreadByOwner; +} +declare module "@salesforce/schema/Lead.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Lead.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Lead.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Lead.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Lead.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Lead.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Lead.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/Lead.LastActivityDate" { + const LastActivityDate:any; + export default LastActivityDate; +} +declare module "@salesforce/schema/Lead.LastViewedDate" { + const LastViewedDate:any; + export default LastViewedDate; +} +declare module "@salesforce/schema/Lead.LastReferencedDate" { + const LastReferencedDate:any; + export default LastReferencedDate; +} +declare module "@salesforce/schema/Lead.Jigsaw" { + const Jigsaw:string; + export default Jigsaw; +} +declare module "@salesforce/schema/Lead.JigsawContactId" { + const JigsawContactId:string; + export default JigsawContactId; +} +declare module "@salesforce/schema/Lead.CleanStatus" { + const CleanStatus:string; + export default CleanStatus; +} +declare module "@salesforce/schema/Lead.CompanyDunsNumber" { + const CompanyDunsNumber:string; + export default CompanyDunsNumber; +} +declare module "@salesforce/schema/Lead.DandbCompany" { + const DandbCompany:any; + export default DandbCompany; +} +declare module "@salesforce/schema/Lead.DandbCompanyId" { + const DandbCompanyId:any; + export default DandbCompanyId; +} +declare module "@salesforce/schema/Lead.EmailBouncedReason" { + const EmailBouncedReason:string; + export default EmailBouncedReason; +} +declare module "@salesforce/schema/Lead.EmailBouncedDate" { + const EmailBouncedDate:any; + export default EmailBouncedDate; +} +declare module "@salesforce/schema/Lead.Individual" { + const Individual:any; + export default Individual; +} +declare module "@salesforce/schema/Lead.IndividualId" { + const IndividualId:any; + export default IndividualId; +} diff --git a/.sfdx/typings/lwc/sobjects/Note.d.ts b/.sfdx/typings/lwc/sobjects/Note.d.ts new file mode 100644 index 0000000..6a5a7d3 --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Note.d.ts @@ -0,0 +1,64 @@ +declare module "@salesforce/schema/Note.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Note.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/Note.Parent" { + const Parent:any; + export default Parent; +} +declare module "@salesforce/schema/Note.ParentId" { + const ParentId:any; + export default ParentId; +} +declare module "@salesforce/schema/Note.Title" { + const Title:string; + export default Title; +} +declare module "@salesforce/schema/Note.IsPrivate" { + const IsPrivate:boolean; + export default IsPrivate; +} +declare module "@salesforce/schema/Note.Body" { + const Body:string; + export default Body; +} +declare module "@salesforce/schema/Note.Owner" { + const Owner:any; + export default Owner; +} +declare module "@salesforce/schema/Note.OwnerId" { + const OwnerId:any; + export default OwnerId; +} +declare module "@salesforce/schema/Note.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Note.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Note.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Note.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Note.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Note.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Note.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} diff --git a/.sfdx/typings/lwc/sobjects/Opportunity.d.ts b/.sfdx/typings/lwc/sobjects/Opportunity.d.ts new file mode 100644 index 0000000..2d272df --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Opportunity.d.ts @@ -0,0 +1,200 @@ +declare module "@salesforce/schema/Opportunity.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Opportunity.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/Opportunity.Account" { + const Account:any; + export default Account; +} +declare module "@salesforce/schema/Opportunity.AccountId" { + const AccountId:any; + export default AccountId; +} +declare module "@salesforce/schema/Opportunity.IsPrivate" { + const IsPrivate:boolean; + export default IsPrivate; +} +declare module "@salesforce/schema/Opportunity.Name" { + const Name:string; + export default Name; +} +declare module "@salesforce/schema/Opportunity.Description" { + const Description:string; + export default Description; +} +declare module "@salesforce/schema/Opportunity.StageName" { + const StageName:string; + export default StageName; +} +declare module "@salesforce/schema/Opportunity.Amount" { + const Amount:number; + export default Amount; +} +declare module "@salesforce/schema/Opportunity.Probability" { + const Probability:number; + export default Probability; +} +declare module "@salesforce/schema/Opportunity.ExpectedRevenue" { + const ExpectedRevenue:number; + export default ExpectedRevenue; +} +declare module "@salesforce/schema/Opportunity.TotalOpportunityQuantity" { + const TotalOpportunityQuantity:number; + export default TotalOpportunityQuantity; +} +declare module "@salesforce/schema/Opportunity.CloseDate" { + const CloseDate:any; + export default CloseDate; +} +declare module "@salesforce/schema/Opportunity.Type" { + const Type:string; + export default Type; +} +declare module "@salesforce/schema/Opportunity.NextStep" { + const NextStep:string; + export default NextStep; +} +declare module "@salesforce/schema/Opportunity.LeadSource" { + const LeadSource:string; + export default LeadSource; +} +declare module "@salesforce/schema/Opportunity.IsClosed" { + const IsClosed:boolean; + export default IsClosed; +} +declare module "@salesforce/schema/Opportunity.IsWon" { + const IsWon:boolean; + export default IsWon; +} +declare module "@salesforce/schema/Opportunity.ForecastCategory" { + const ForecastCategory:string; + export default ForecastCategory; +} +declare module "@salesforce/schema/Opportunity.ForecastCategoryName" { + const ForecastCategoryName:string; + export default ForecastCategoryName; +} +declare module "@salesforce/schema/Opportunity.Campaign" { + const Campaign:any; + export default Campaign; +} +declare module "@salesforce/schema/Opportunity.CampaignId" { + const CampaignId:any; + export default CampaignId; +} +declare module "@salesforce/schema/Opportunity.HasOpportunityLineItem" { + const HasOpportunityLineItem:boolean; + export default HasOpportunityLineItem; +} +declare module "@salesforce/schema/Opportunity.Pricebook2" { + const Pricebook2:any; + export default Pricebook2; +} +declare module "@salesforce/schema/Opportunity.Pricebook2Id" { + const Pricebook2Id:any; + export default Pricebook2Id; +} +declare module "@salesforce/schema/Opportunity.Owner" { + const Owner:any; + export default Owner; +} +declare module "@salesforce/schema/Opportunity.OwnerId" { + const OwnerId:any; + export default OwnerId; +} +declare module "@salesforce/schema/Opportunity.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Opportunity.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Opportunity.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Opportunity.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Opportunity.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Opportunity.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Opportunity.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/Opportunity.LastActivityDate" { + const LastActivityDate:any; + export default LastActivityDate; +} +declare module "@salesforce/schema/Opportunity.PushCount" { + const PushCount:number; + export default PushCount; +} +declare module "@salesforce/schema/Opportunity.LastStageChangeDate" { + const LastStageChangeDate:any; + export default LastStageChangeDate; +} +declare module "@salesforce/schema/Opportunity.FiscalQuarter" { + const FiscalQuarter:number; + export default FiscalQuarter; +} +declare module "@salesforce/schema/Opportunity.FiscalYear" { + const FiscalYear:number; + export default FiscalYear; +} +declare module "@salesforce/schema/Opportunity.Fiscal" { + const Fiscal:string; + export default Fiscal; +} +declare module "@salesforce/schema/Opportunity.Contact" { + const Contact:any; + export default Contact; +} +declare module "@salesforce/schema/Opportunity.ContactId" { + const ContactId:any; + export default ContactId; +} +declare module "@salesforce/schema/Opportunity.LastViewedDate" { + const LastViewedDate:any; + export default LastViewedDate; +} +declare module "@salesforce/schema/Opportunity.LastReferencedDate" { + const LastReferencedDate:any; + export default LastReferencedDate; +} +declare module "@salesforce/schema/Opportunity.HasOpenActivity" { + const HasOpenActivity:boolean; + export default HasOpenActivity; +} +declare module "@salesforce/schema/Opportunity.HasOverdueTask" { + const HasOverdueTask:boolean; + export default HasOverdueTask; +} +declare module "@salesforce/schema/Opportunity.LastAmountChangedHistory" { + const LastAmountChangedHistory:any; + export default LastAmountChangedHistory; +} +declare module "@salesforce/schema/Opportunity.LastAmountChangedHistoryId" { + const LastAmountChangedHistoryId:any; + export default LastAmountChangedHistoryId; +} +declare module "@salesforce/schema/Opportunity.LastCloseDateChangedHistory" { + const LastCloseDateChangedHistory:any; + export default LastCloseDateChangedHistory; +} +declare module "@salesforce/schema/Opportunity.LastCloseDateChangedHistoryId" { + const LastCloseDateChangedHistoryId:any; + export default LastCloseDateChangedHistoryId; +} diff --git a/.sfdx/typings/lwc/sobjects/Order.d.ts b/.sfdx/typings/lwc/sobjects/Order.d.ts new file mode 100644 index 0000000..cdf44e0 --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Order.d.ts @@ -0,0 +1,260 @@ +declare module "@salesforce/schema/Order.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Order.Owner" { + const Owner:any; + export default Owner; +} +declare module "@salesforce/schema/Order.OwnerId" { + const OwnerId:any; + export default OwnerId; +} +declare module "@salesforce/schema/Order.Contract" { + const Contract:any; + export default Contract; +} +declare module "@salesforce/schema/Order.ContractId" { + const ContractId:any; + export default ContractId; +} +declare module "@salesforce/schema/Order.Account" { + const Account:any; + export default Account; +} +declare module "@salesforce/schema/Order.AccountId" { + const AccountId:any; + export default AccountId; +} +declare module "@salesforce/schema/Order.Pricebook2" { + const Pricebook2:any; + export default Pricebook2; +} +declare module "@salesforce/schema/Order.Pricebook2Id" { + const Pricebook2Id:any; + export default Pricebook2Id; +} +declare module "@salesforce/schema/Order.OriginalOrder" { + const OriginalOrder:any; + export default OriginalOrder; +} +declare module "@salesforce/schema/Order.OriginalOrderId" { + const OriginalOrderId:any; + export default OriginalOrderId; +} +declare module "@salesforce/schema/Order.EffectiveDate" { + const EffectiveDate:any; + export default EffectiveDate; +} +declare module "@salesforce/schema/Order.EndDate" { + const EndDate:any; + export default EndDate; +} +declare module "@salesforce/schema/Order.IsReductionOrder" { + const IsReductionOrder:boolean; + export default IsReductionOrder; +} +declare module "@salesforce/schema/Order.Status" { + const Status:string; + export default Status; +} +declare module "@salesforce/schema/Order.Description" { + const Description:string; + export default Description; +} +declare module "@salesforce/schema/Order.CustomerAuthorizedBy" { + const CustomerAuthorizedBy:any; + export default CustomerAuthorizedBy; +} +declare module "@salesforce/schema/Order.CustomerAuthorizedById" { + const CustomerAuthorizedById:any; + export default CustomerAuthorizedById; +} +declare module "@salesforce/schema/Order.CustomerAuthorizedDate" { + const CustomerAuthorizedDate:any; + export default CustomerAuthorizedDate; +} +declare module "@salesforce/schema/Order.CompanyAuthorizedBy" { + const CompanyAuthorizedBy:any; + export default CompanyAuthorizedBy; +} +declare module "@salesforce/schema/Order.CompanyAuthorizedById" { + const CompanyAuthorizedById:any; + export default CompanyAuthorizedById; +} +declare module "@salesforce/schema/Order.CompanyAuthorizedDate" { + const CompanyAuthorizedDate:any; + export default CompanyAuthorizedDate; +} +declare module "@salesforce/schema/Order.Type" { + const Type:string; + export default Type; +} +declare module "@salesforce/schema/Order.BillingStreet" { + const BillingStreet:string; + export default BillingStreet; +} +declare module "@salesforce/schema/Order.BillingCity" { + const BillingCity:string; + export default BillingCity; +} +declare module "@salesforce/schema/Order.BillingState" { + const BillingState:string; + export default BillingState; +} +declare module "@salesforce/schema/Order.BillingPostalCode" { + const BillingPostalCode:string; + export default BillingPostalCode; +} +declare module "@salesforce/schema/Order.BillingCountry" { + const BillingCountry:string; + export default BillingCountry; +} +declare module "@salesforce/schema/Order.BillingLatitude" { + const BillingLatitude:number; + export default BillingLatitude; +} +declare module "@salesforce/schema/Order.BillingLongitude" { + const BillingLongitude:number; + export default BillingLongitude; +} +declare module "@salesforce/schema/Order.BillingGeocodeAccuracy" { + const BillingGeocodeAccuracy:string; + export default BillingGeocodeAccuracy; +} +declare module "@salesforce/schema/Order.BillingAddress" { + const BillingAddress:any; + export default BillingAddress; +} +declare module "@salesforce/schema/Order.ShippingStreet" { + const ShippingStreet:string; + export default ShippingStreet; +} +declare module "@salesforce/schema/Order.ShippingCity" { + const ShippingCity:string; + export default ShippingCity; +} +declare module "@salesforce/schema/Order.ShippingState" { + const ShippingState:string; + export default ShippingState; +} +declare module "@salesforce/schema/Order.ShippingPostalCode" { + const ShippingPostalCode:string; + export default ShippingPostalCode; +} +declare module "@salesforce/schema/Order.ShippingCountry" { + const ShippingCountry:string; + export default ShippingCountry; +} +declare module "@salesforce/schema/Order.ShippingLatitude" { + const ShippingLatitude:number; + export default ShippingLatitude; +} +declare module "@salesforce/schema/Order.ShippingLongitude" { + const ShippingLongitude:number; + export default ShippingLongitude; +} +declare module "@salesforce/schema/Order.ShippingGeocodeAccuracy" { + const ShippingGeocodeAccuracy:string; + export default ShippingGeocodeAccuracy; +} +declare module "@salesforce/schema/Order.ShippingAddress" { + const ShippingAddress:any; + export default ShippingAddress; +} +declare module "@salesforce/schema/Order.Name" { + const Name:string; + export default Name; +} +declare module "@salesforce/schema/Order.PoDate" { + const PoDate:any; + export default PoDate; +} +declare module "@salesforce/schema/Order.PoNumber" { + const PoNumber:string; + export default PoNumber; +} +declare module "@salesforce/schema/Order.OrderReferenceNumber" { + const OrderReferenceNumber:string; + export default OrderReferenceNumber; +} +declare module "@salesforce/schema/Order.BillToContact" { + const BillToContact:any; + export default BillToContact; +} +declare module "@salesforce/schema/Order.BillToContactId" { + const BillToContactId:any; + export default BillToContactId; +} +declare module "@salesforce/schema/Order.ShipToContact" { + const ShipToContact:any; + export default ShipToContact; +} +declare module "@salesforce/schema/Order.ShipToContactId" { + const ShipToContactId:any; + export default ShipToContactId; +} +declare module "@salesforce/schema/Order.ActivatedDate" { + const ActivatedDate:any; + export default ActivatedDate; +} +declare module "@salesforce/schema/Order.ActivatedBy" { + const ActivatedBy:any; + export default ActivatedBy; +} +declare module "@salesforce/schema/Order.ActivatedById" { + const ActivatedById:any; + export default ActivatedById; +} +declare module "@salesforce/schema/Order.StatusCode" { + const StatusCode:string; + export default StatusCode; +} +declare module "@salesforce/schema/Order.OrderNumber" { + const OrderNumber:string; + export default OrderNumber; +} +declare module "@salesforce/schema/Order.TotalAmount" { + const TotalAmount:number; + export default TotalAmount; +} +declare module "@salesforce/schema/Order.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Order.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Order.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Order.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Order.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Order.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Order.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/Order.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/Order.LastViewedDate" { + const LastViewedDate:any; + export default LastViewedDate; +} +declare module "@salesforce/schema/Order.LastReferencedDate" { + const LastReferencedDate:any; + export default LastReferencedDate; +} diff --git a/.sfdx/typings/lwc/sobjects/Pricebook2.d.ts b/.sfdx/typings/lwc/sobjects/Pricebook2.d.ts new file mode 100644 index 0000000..844f83a --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Pricebook2.d.ts @@ -0,0 +1,64 @@ +declare module "@salesforce/schema/Pricebook2.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Pricebook2.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/Pricebook2.Name" { + const Name:string; + export default Name; +} +declare module "@salesforce/schema/Pricebook2.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Pricebook2.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Pricebook2.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Pricebook2.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Pricebook2.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Pricebook2.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Pricebook2.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/Pricebook2.LastViewedDate" { + const LastViewedDate:any; + export default LastViewedDate; +} +declare module "@salesforce/schema/Pricebook2.LastReferencedDate" { + const LastReferencedDate:any; + export default LastReferencedDate; +} +declare module "@salesforce/schema/Pricebook2.IsActive" { + const IsActive:boolean; + export default IsActive; +} +declare module "@salesforce/schema/Pricebook2.IsArchived" { + const IsArchived:boolean; + export default IsArchived; +} +declare module "@salesforce/schema/Pricebook2.Description" { + const Description:string; + export default Description; +} +declare module "@salesforce/schema/Pricebook2.IsStandard" { + const IsStandard:boolean; + export default IsStandard; +} diff --git a/.sfdx/typings/lwc/sobjects/PricebookEntry.d.ts b/.sfdx/typings/lwc/sobjects/PricebookEntry.d.ts new file mode 100644 index 0000000..c853b68 --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/PricebookEntry.d.ts @@ -0,0 +1,76 @@ +declare module "@salesforce/schema/PricebookEntry.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/PricebookEntry.Name" { + const Name:string; + export default Name; +} +declare module "@salesforce/schema/PricebookEntry.Pricebook2" { + const Pricebook2:any; + export default Pricebook2; +} +declare module "@salesforce/schema/PricebookEntry.Pricebook2Id" { + const Pricebook2Id:any; + export default Pricebook2Id; +} +declare module "@salesforce/schema/PricebookEntry.Product2" { + const Product2:any; + export default Product2; +} +declare module "@salesforce/schema/PricebookEntry.Product2Id" { + const Product2Id:any; + export default Product2Id; +} +declare module "@salesforce/schema/PricebookEntry.UnitPrice" { + const UnitPrice:number; + export default UnitPrice; +} +declare module "@salesforce/schema/PricebookEntry.IsActive" { + const IsActive:boolean; + export default IsActive; +} +declare module "@salesforce/schema/PricebookEntry.UseStandardPrice" { + const UseStandardPrice:boolean; + export default UseStandardPrice; +} +declare module "@salesforce/schema/PricebookEntry.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/PricebookEntry.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/PricebookEntry.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/PricebookEntry.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/PricebookEntry.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/PricebookEntry.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/PricebookEntry.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/PricebookEntry.ProductCode" { + const ProductCode:string; + export default ProductCode; +} +declare module "@salesforce/schema/PricebookEntry.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/PricebookEntry.IsArchived" { + const IsArchived:boolean; + export default IsArchived; +} diff --git a/.sfdx/typings/lwc/sobjects/Product2.d.ts b/.sfdx/typings/lwc/sobjects/Product2.d.ts new file mode 100644 index 0000000..de6d8a5 --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Product2.d.ts @@ -0,0 +1,96 @@ +declare module "@salesforce/schema/Product2.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Product2.Name" { + const Name:string; + export default Name; +} +declare module "@salesforce/schema/Product2.ProductCode" { + const ProductCode:string; + export default ProductCode; +} +declare module "@salesforce/schema/Product2.Description" { + const Description:string; + export default Description; +} +declare module "@salesforce/schema/Product2.IsActive" { + const IsActive:boolean; + export default IsActive; +} +declare module "@salesforce/schema/Product2.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Product2.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Product2.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Product2.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Product2.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Product2.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Product2.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/Product2.Family" { + const Family:string; + export default Family; +} +declare module "@salesforce/schema/Product2.IsSerialized" { + const IsSerialized:boolean; + export default IsSerialized; +} +declare module "@salesforce/schema/Product2.ExternalDataSource" { + const ExternalDataSource:any; + export default ExternalDataSource; +} +declare module "@salesforce/schema/Product2.ExternalDataSourceId" { + const ExternalDataSourceId:any; + export default ExternalDataSourceId; +} +declare module "@salesforce/schema/Product2.ExternalId" { + const ExternalId:string; + export default ExternalId; +} +declare module "@salesforce/schema/Product2.DisplayUrl" { + const DisplayUrl:string; + export default DisplayUrl; +} +declare module "@salesforce/schema/Product2.QuantityUnitOfMeasure" { + const QuantityUnitOfMeasure:string; + export default QuantityUnitOfMeasure; +} +declare module "@salesforce/schema/Product2.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/Product2.IsArchived" { + const IsArchived:boolean; + export default IsArchived; +} +declare module "@salesforce/schema/Product2.LastViewedDate" { + const LastViewedDate:any; + export default LastViewedDate; +} +declare module "@salesforce/schema/Product2.LastReferencedDate" { + const LastReferencedDate:any; + export default LastReferencedDate; +} +declare module "@salesforce/schema/Product2.StockKeepingUnit" { + const StockKeepingUnit:string; + export default StockKeepingUnit; +} diff --git a/.sfdx/typings/lwc/sobjects/RecordType.d.ts b/.sfdx/typings/lwc/sobjects/RecordType.d.ts new file mode 100644 index 0000000..f4f98c3 --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/RecordType.d.ts @@ -0,0 +1,64 @@ +declare module "@salesforce/schema/RecordType.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/RecordType.Name" { + const Name:string; + export default Name; +} +declare module "@salesforce/schema/RecordType.DeveloperName" { + const DeveloperName:string; + export default DeveloperName; +} +declare module "@salesforce/schema/RecordType.NamespacePrefix" { + const NamespacePrefix:string; + export default NamespacePrefix; +} +declare module "@salesforce/schema/RecordType.Description" { + const Description:string; + export default Description; +} +declare module "@salesforce/schema/RecordType.BusinessProcess" { + const BusinessProcess:any; + export default BusinessProcess; +} +declare module "@salesforce/schema/RecordType.BusinessProcessId" { + const BusinessProcessId:any; + export default BusinessProcessId; +} +declare module "@salesforce/schema/RecordType.SobjectType" { + const SobjectType:string; + export default SobjectType; +} +declare module "@salesforce/schema/RecordType.IsActive" { + const IsActive:boolean; + export default IsActive; +} +declare module "@salesforce/schema/RecordType.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/RecordType.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/RecordType.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/RecordType.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/RecordType.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/RecordType.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/RecordType.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} diff --git a/.sfdx/typings/lwc/sobjects/Report.d.ts b/.sfdx/typings/lwc/sobjects/Report.d.ts new file mode 100644 index 0000000..0140126 --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Report.d.ts @@ -0,0 +1,80 @@ +declare module "@salesforce/schema/Report.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Report.Owner" { + const Owner:any; + export default Owner; +} +declare module "@salesforce/schema/Report.OwnerId" { + const OwnerId:any; + export default OwnerId; +} +declare module "@salesforce/schema/Report.FolderName" { + const FolderName:string; + export default FolderName; +} +declare module "@salesforce/schema/Report.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Report.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Report.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Report.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Report.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Report.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Report.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/Report.Name" { + const Name:string; + export default Name; +} +declare module "@salesforce/schema/Report.Description" { + const Description:string; + export default Description; +} +declare module "@salesforce/schema/Report.DeveloperName" { + const DeveloperName:string; + export default DeveloperName; +} +declare module "@salesforce/schema/Report.NamespacePrefix" { + const NamespacePrefix:string; + export default NamespacePrefix; +} +declare module "@salesforce/schema/Report.LastRunDate" { + const LastRunDate:any; + export default LastRunDate; +} +declare module "@salesforce/schema/Report.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/Report.Format" { + const Format:string; + export default Format; +} +declare module "@salesforce/schema/Report.LastViewedDate" { + const LastViewedDate:any; + export default LastViewedDate; +} +declare module "@salesforce/schema/Report.LastReferencedDate" { + const LastReferencedDate:any; + export default LastReferencedDate; +} diff --git a/.sfdx/typings/lwc/sobjects/Task.d.ts b/.sfdx/typings/lwc/sobjects/Task.d.ts new file mode 100644 index 0000000..8462536 --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/Task.d.ts @@ -0,0 +1,184 @@ +declare module "@salesforce/schema/Task.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/Task.Who" { + const Who:any; + export default Who; +} +declare module "@salesforce/schema/Task.WhoId" { + const WhoId:any; + export default WhoId; +} +declare module "@salesforce/schema/Task.What" { + const What:any; + export default What; +} +declare module "@salesforce/schema/Task.WhatId" { + const WhatId:any; + export default WhatId; +} +declare module "@salesforce/schema/Task.Subject" { + const Subject:string; + export default Subject; +} +declare module "@salesforce/schema/Task.ActivityDate" { + const ActivityDate:any; + export default ActivityDate; +} +declare module "@salesforce/schema/Task.Status" { + const Status:string; + export default Status; +} +declare module "@salesforce/schema/Task.Priority" { + const Priority:string; + export default Priority; +} +declare module "@salesforce/schema/Task.IsHighPriority" { + const IsHighPriority:boolean; + export default IsHighPriority; +} +declare module "@salesforce/schema/Task.Owner" { + const Owner:any; + export default Owner; +} +declare module "@salesforce/schema/Task.OwnerId" { + const OwnerId:any; + export default OwnerId; +} +declare module "@salesforce/schema/Task.Description" { + const Description:string; + export default Description; +} +declare module "@salesforce/schema/Task.IsDeleted" { + const IsDeleted:boolean; + export default IsDeleted; +} +declare module "@salesforce/schema/Task.Account" { + const Account:any; + export default Account; +} +declare module "@salesforce/schema/Task.AccountId" { + const AccountId:any; + export default AccountId; +} +declare module "@salesforce/schema/Task.IsClosed" { + const IsClosed:boolean; + export default IsClosed; +} +declare module "@salesforce/schema/Task.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/Task.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/Task.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/Task.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/Task.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/Task.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/Task.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/Task.IsArchived" { + const IsArchived:boolean; + export default IsArchived; +} +declare module "@salesforce/schema/Task.CallDurationInSeconds" { + const CallDurationInSeconds:number; + export default CallDurationInSeconds; +} +declare module "@salesforce/schema/Task.CallType" { + const CallType:string; + export default CallType; +} +declare module "@salesforce/schema/Task.CallDisposition" { + const CallDisposition:string; + export default CallDisposition; +} +declare module "@salesforce/schema/Task.CallObject" { + const CallObject:string; + export default CallObject; +} +declare module "@salesforce/schema/Task.ReminderDateTime" { + const ReminderDateTime:any; + export default ReminderDateTime; +} +declare module "@salesforce/schema/Task.IsReminderSet" { + const IsReminderSet:boolean; + export default IsReminderSet; +} +declare module "@salesforce/schema/Task.RecurrenceActivity" { + const RecurrenceActivity:any; + export default RecurrenceActivity; +} +declare module "@salesforce/schema/Task.RecurrenceActivityId" { + const RecurrenceActivityId:any; + export default RecurrenceActivityId; +} +declare module "@salesforce/schema/Task.IsRecurrence" { + const IsRecurrence:boolean; + export default IsRecurrence; +} +declare module "@salesforce/schema/Task.RecurrenceStartDateOnly" { + const RecurrenceStartDateOnly:any; + export default RecurrenceStartDateOnly; +} +declare module "@salesforce/schema/Task.RecurrenceEndDateOnly" { + const RecurrenceEndDateOnly:any; + export default RecurrenceEndDateOnly; +} +declare module "@salesforce/schema/Task.RecurrenceTimeZoneSidKey" { + const RecurrenceTimeZoneSidKey:string; + export default RecurrenceTimeZoneSidKey; +} +declare module "@salesforce/schema/Task.RecurrenceType" { + const RecurrenceType:string; + export default RecurrenceType; +} +declare module "@salesforce/schema/Task.RecurrenceInterval" { + const RecurrenceInterval:number; + export default RecurrenceInterval; +} +declare module "@salesforce/schema/Task.RecurrenceDayOfWeekMask" { + const RecurrenceDayOfWeekMask:number; + export default RecurrenceDayOfWeekMask; +} +declare module "@salesforce/schema/Task.RecurrenceDayOfMonth" { + const RecurrenceDayOfMonth:number; + export default RecurrenceDayOfMonth; +} +declare module "@salesforce/schema/Task.RecurrenceInstance" { + const RecurrenceInstance:string; + export default RecurrenceInstance; +} +declare module "@salesforce/schema/Task.RecurrenceMonthOfYear" { + const RecurrenceMonthOfYear:string; + export default RecurrenceMonthOfYear; +} +declare module "@salesforce/schema/Task.RecurrenceRegeneratedType" { + const RecurrenceRegeneratedType:string; + export default RecurrenceRegeneratedType; +} +declare module "@salesforce/schema/Task.TaskSubtype" { + const TaskSubtype:string; + export default TaskSubtype; +} +declare module "@salesforce/schema/Task.CompletedDateTime" { + const CompletedDateTime:any; + export default CompletedDateTime; +} diff --git a/.sfdx/typings/lwc/sobjects/User.d.ts b/.sfdx/typings/lwc/sobjects/User.d.ts new file mode 100644 index 0000000..ccb2441 --- /dev/null +++ b/.sfdx/typings/lwc/sobjects/User.d.ts @@ -0,0 +1,752 @@ +declare module "@salesforce/schema/User.Id" { + const Id:any; + export default Id; +} +declare module "@salesforce/schema/User.Username" { + const Username:string; + export default Username; +} +declare module "@salesforce/schema/User.LastName" { + const LastName:string; + export default LastName; +} +declare module "@salesforce/schema/User.FirstName" { + const FirstName:string; + export default FirstName; +} +declare module "@salesforce/schema/User.Name" { + const Name:string; + export default Name; +} +declare module "@salesforce/schema/User.CompanyName" { + const CompanyName:string; + export default CompanyName; +} +declare module "@salesforce/schema/User.Division" { + const Division:string; + export default Division; +} +declare module "@salesforce/schema/User.Department" { + const Department:string; + export default Department; +} +declare module "@salesforce/schema/User.Title" { + const Title:string; + export default Title; +} +declare module "@salesforce/schema/User.Street" { + const Street:string; + export default Street; +} +declare module "@salesforce/schema/User.City" { + const City:string; + export default City; +} +declare module "@salesforce/schema/User.State" { + const State:string; + export default State; +} +declare module "@salesforce/schema/User.PostalCode" { + const PostalCode:string; + export default PostalCode; +} +declare module "@salesforce/schema/User.Country" { + const Country:string; + export default Country; +} +declare module "@salesforce/schema/User.Latitude" { + const Latitude:number; + export default Latitude; +} +declare module "@salesforce/schema/User.Longitude" { + const Longitude:number; + export default Longitude; +} +declare module "@salesforce/schema/User.GeocodeAccuracy" { + const GeocodeAccuracy:string; + export default GeocodeAccuracy; +} +declare module "@salesforce/schema/User.Address" { + const Address:any; + export default Address; +} +declare module "@salesforce/schema/User.Email" { + const Email:string; + export default Email; +} +declare module "@salesforce/schema/User.EmailPreferencesAutoBcc" { + const EmailPreferencesAutoBcc:boolean; + export default EmailPreferencesAutoBcc; +} +declare module "@salesforce/schema/User.EmailPreferencesAutoBccStayInTouch" { + const EmailPreferencesAutoBccStayInTouch:boolean; + export default EmailPreferencesAutoBccStayInTouch; +} +declare module "@salesforce/schema/User.EmailPreferencesStayInTouchReminder" { + const EmailPreferencesStayInTouchReminder:boolean; + export default EmailPreferencesStayInTouchReminder; +} +declare module "@salesforce/schema/User.SenderEmail" { + const SenderEmail:string; + export default SenderEmail; +} +declare module "@salesforce/schema/User.SenderName" { + const SenderName:string; + export default SenderName; +} +declare module "@salesforce/schema/User.Signature" { + const Signature:string; + export default Signature; +} +declare module "@salesforce/schema/User.StayInTouchSubject" { + const StayInTouchSubject:string; + export default StayInTouchSubject; +} +declare module "@salesforce/schema/User.StayInTouchSignature" { + const StayInTouchSignature:string; + export default StayInTouchSignature; +} +declare module "@salesforce/schema/User.StayInTouchNote" { + const StayInTouchNote:string; + export default StayInTouchNote; +} +declare module "@salesforce/schema/User.Phone" { + const Phone:string; + export default Phone; +} +declare module "@salesforce/schema/User.Fax" { + const Fax:string; + export default Fax; +} +declare module "@salesforce/schema/User.MobilePhone" { + const MobilePhone:string; + export default MobilePhone; +} +declare module "@salesforce/schema/User.Alias" { + const Alias:string; + export default Alias; +} +declare module "@salesforce/schema/User.CommunityNickname" { + const CommunityNickname:string; + export default CommunityNickname; +} +declare module "@salesforce/schema/User.BadgeText" { + const BadgeText:string; + export default BadgeText; +} +declare module "@salesforce/schema/User.IsActive" { + const IsActive:boolean; + export default IsActive; +} +declare module "@salesforce/schema/User.TimeZoneSidKey" { + const TimeZoneSidKey:string; + export default TimeZoneSidKey; +} +declare module "@salesforce/schema/User.UserRole" { + const UserRole:any; + export default UserRole; +} +declare module "@salesforce/schema/User.UserRoleId" { + const UserRoleId:any; + export default UserRoleId; +} +declare module "@salesforce/schema/User.LocaleSidKey" { + const LocaleSidKey:string; + export default LocaleSidKey; +} +declare module "@salesforce/schema/User.ReceivesInfoEmails" { + const ReceivesInfoEmails:boolean; + export default ReceivesInfoEmails; +} +declare module "@salesforce/schema/User.ReceivesAdminInfoEmails" { + const ReceivesAdminInfoEmails:boolean; + export default ReceivesAdminInfoEmails; +} +declare module "@salesforce/schema/User.EmailEncodingKey" { + const EmailEncodingKey:string; + export default EmailEncodingKey; +} +declare module "@salesforce/schema/User.Profile" { + const Profile:any; + export default Profile; +} +declare module "@salesforce/schema/User.ProfileId" { + const ProfileId:any; + export default ProfileId; +} +declare module "@salesforce/schema/User.UserType" { + const UserType:string; + export default UserType; +} +declare module "@salesforce/schema/User.LanguageLocaleKey" { + const LanguageLocaleKey:string; + export default LanguageLocaleKey; +} +declare module "@salesforce/schema/User.EmployeeNumber" { + const EmployeeNumber:string; + export default EmployeeNumber; +} +declare module "@salesforce/schema/User.DelegatedApprover" { + const DelegatedApprover:any; + export default DelegatedApprover; +} +declare module "@salesforce/schema/User.DelegatedApproverId" { + const DelegatedApproverId:any; + export default DelegatedApproverId; +} +declare module "@salesforce/schema/User.Manager" { + const Manager:any; + export default Manager; +} +declare module "@salesforce/schema/User.ManagerId" { + const ManagerId:any; + export default ManagerId; +} +declare module "@salesforce/schema/User.LastLoginDate" { + const LastLoginDate:any; + export default LastLoginDate; +} +declare module "@salesforce/schema/User.LastPasswordChangeDate" { + const LastPasswordChangeDate:any; + export default LastPasswordChangeDate; +} +declare module "@salesforce/schema/User.CreatedDate" { + const CreatedDate:any; + export default CreatedDate; +} +declare module "@salesforce/schema/User.CreatedBy" { + const CreatedBy:any; + export default CreatedBy; +} +declare module "@salesforce/schema/User.CreatedById" { + const CreatedById:any; + export default CreatedById; +} +declare module "@salesforce/schema/User.LastModifiedDate" { + const LastModifiedDate:any; + export default LastModifiedDate; +} +declare module "@salesforce/schema/User.LastModifiedBy" { + const LastModifiedBy:any; + export default LastModifiedBy; +} +declare module "@salesforce/schema/User.LastModifiedById" { + const LastModifiedById:any; + export default LastModifiedById; +} +declare module "@salesforce/schema/User.SystemModstamp" { + const SystemModstamp:any; + export default SystemModstamp; +} +declare module "@salesforce/schema/User.NumberOfFailedLogins" { + const NumberOfFailedLogins:number; + export default NumberOfFailedLogins; +} +declare module "@salesforce/schema/User.OfflineTrialExpirationDate" { + const OfflineTrialExpirationDate:any; + export default OfflineTrialExpirationDate; +} +declare module "@salesforce/schema/User.OfflinePdaTrialExpirationDate" { + const OfflinePdaTrialExpirationDate:any; + export default OfflinePdaTrialExpirationDate; +} +declare module "@salesforce/schema/User.UserPermissionsMarketingUser" { + const UserPermissionsMarketingUser:boolean; + export default UserPermissionsMarketingUser; +} +declare module "@salesforce/schema/User.UserPermissionsOfflineUser" { + const UserPermissionsOfflineUser:boolean; + export default UserPermissionsOfflineUser; +} +declare module "@salesforce/schema/User.UserPermissionsCallCenterAutoLogin" { + const UserPermissionsCallCenterAutoLogin:boolean; + export default UserPermissionsCallCenterAutoLogin; +} +declare module "@salesforce/schema/User.UserPermissionsSFContentUser" { + const UserPermissionsSFContentUser:boolean; + export default UserPermissionsSFContentUser; +} +declare module "@salesforce/schema/User.UserPermissionsKnowledgeUser" { + const UserPermissionsKnowledgeUser:boolean; + export default UserPermissionsKnowledgeUser; +} +declare module "@salesforce/schema/User.UserPermissionsInteractionUser" { + const UserPermissionsInteractionUser:boolean; + export default UserPermissionsInteractionUser; +} +declare module "@salesforce/schema/User.UserPermissionsSupportUser" { + const UserPermissionsSupportUser:boolean; + export default UserPermissionsSupportUser; +} +declare module "@salesforce/schema/User.UserPermissionsJigsawProspectingUser" { + const UserPermissionsJigsawProspectingUser:boolean; + export default UserPermissionsJigsawProspectingUser; +} +declare module "@salesforce/schema/User.UserPermissionsSiteforceContributorUser" { + const UserPermissionsSiteforceContributorUser:boolean; + export default UserPermissionsSiteforceContributorUser; +} +declare module "@salesforce/schema/User.UserPermissionsSiteforcePublisherUser" { + const UserPermissionsSiteforcePublisherUser:boolean; + export default UserPermissionsSiteforcePublisherUser; +} +declare module "@salesforce/schema/User.UserPermissionsWorkDotComUserFeature" { + const UserPermissionsWorkDotComUserFeature:boolean; + export default UserPermissionsWorkDotComUserFeature; +} +declare module "@salesforce/schema/User.ForecastEnabled" { + const ForecastEnabled:boolean; + export default ForecastEnabled; +} +declare module "@salesforce/schema/User.UserPreferencesActivityRemindersPopup" { + const UserPreferencesActivityRemindersPopup:boolean; + export default UserPreferencesActivityRemindersPopup; +} +declare module "@salesforce/schema/User.UserPreferencesEventRemindersCheckboxDefault" { + const UserPreferencesEventRemindersCheckboxDefault:boolean; + export default UserPreferencesEventRemindersCheckboxDefault; +} +declare module "@salesforce/schema/User.UserPreferencesTaskRemindersCheckboxDefault" { + const UserPreferencesTaskRemindersCheckboxDefault:boolean; + export default UserPreferencesTaskRemindersCheckboxDefault; +} +declare module "@salesforce/schema/User.UserPreferencesReminderSoundOff" { + const UserPreferencesReminderSoundOff:boolean; + export default UserPreferencesReminderSoundOff; +} +declare module "@salesforce/schema/User.UserPreferencesDisableAllFeedsEmail" { + const UserPreferencesDisableAllFeedsEmail:boolean; + export default UserPreferencesDisableAllFeedsEmail; +} +declare module "@salesforce/schema/User.UserPreferencesDisableFollowersEmail" { + const UserPreferencesDisableFollowersEmail:boolean; + export default UserPreferencesDisableFollowersEmail; +} +declare module "@salesforce/schema/User.UserPreferencesDisableProfilePostEmail" { + const UserPreferencesDisableProfilePostEmail:boolean; + export default UserPreferencesDisableProfilePostEmail; +} +declare module "@salesforce/schema/User.UserPreferencesDisableChangeCommentEmail" { + const UserPreferencesDisableChangeCommentEmail:boolean; + export default UserPreferencesDisableChangeCommentEmail; +} +declare module "@salesforce/schema/User.UserPreferencesDisableLaterCommentEmail" { + const UserPreferencesDisableLaterCommentEmail:boolean; + export default UserPreferencesDisableLaterCommentEmail; +} +declare module "@salesforce/schema/User.UserPreferencesDisProfPostCommentEmail" { + const UserPreferencesDisProfPostCommentEmail:boolean; + export default UserPreferencesDisProfPostCommentEmail; +} +declare module "@salesforce/schema/User.UserPreferencesContentNoEmail" { + const UserPreferencesContentNoEmail:boolean; + export default UserPreferencesContentNoEmail; +} +declare module "@salesforce/schema/User.UserPreferencesContentEmailAsAndWhen" { + const UserPreferencesContentEmailAsAndWhen:boolean; + export default UserPreferencesContentEmailAsAndWhen; +} +declare module "@salesforce/schema/User.UserPreferencesApexPagesDeveloperMode" { + const UserPreferencesApexPagesDeveloperMode:boolean; + export default UserPreferencesApexPagesDeveloperMode; +} +declare module "@salesforce/schema/User.UserPreferencesReceiveNoNotificationsAsApprover" { + const UserPreferencesReceiveNoNotificationsAsApprover:boolean; + export default UserPreferencesReceiveNoNotificationsAsApprover; +} +declare module "@salesforce/schema/User.UserPreferencesReceiveNotificationsAsDelegatedApprover" { + const UserPreferencesReceiveNotificationsAsDelegatedApprover:boolean; + export default UserPreferencesReceiveNotificationsAsDelegatedApprover; +} +declare module "@salesforce/schema/User.UserPreferencesHideCSNGetChatterMobileTask" { + const UserPreferencesHideCSNGetChatterMobileTask:boolean; + export default UserPreferencesHideCSNGetChatterMobileTask; +} +declare module "@salesforce/schema/User.UserPreferencesDisableMentionsPostEmail" { + const UserPreferencesDisableMentionsPostEmail:boolean; + export default UserPreferencesDisableMentionsPostEmail; +} +declare module "@salesforce/schema/User.UserPreferencesDisMentionsCommentEmail" { + const UserPreferencesDisMentionsCommentEmail:boolean; + export default UserPreferencesDisMentionsCommentEmail; +} +declare module "@salesforce/schema/User.UserPreferencesHideCSNDesktopTask" { + const UserPreferencesHideCSNDesktopTask:boolean; + export default UserPreferencesHideCSNDesktopTask; +} +declare module "@salesforce/schema/User.UserPreferencesHideChatterOnboardingSplash" { + const UserPreferencesHideChatterOnboardingSplash:boolean; + export default UserPreferencesHideChatterOnboardingSplash; +} +declare module "@salesforce/schema/User.UserPreferencesHideSecondChatterOnboardingSplash" { + const UserPreferencesHideSecondChatterOnboardingSplash:boolean; + export default UserPreferencesHideSecondChatterOnboardingSplash; +} +declare module "@salesforce/schema/User.UserPreferencesDisCommentAfterLikeEmail" { + const UserPreferencesDisCommentAfterLikeEmail:boolean; + export default UserPreferencesDisCommentAfterLikeEmail; +} +declare module "@salesforce/schema/User.UserPreferencesDisableLikeEmail" { + const UserPreferencesDisableLikeEmail:boolean; + export default UserPreferencesDisableLikeEmail; +} +declare module "@salesforce/schema/User.UserPreferencesSortFeedByComment" { + const UserPreferencesSortFeedByComment:boolean; + export default UserPreferencesSortFeedByComment; +} +declare module "@salesforce/schema/User.UserPreferencesDisableMessageEmail" { + const UserPreferencesDisableMessageEmail:boolean; + export default UserPreferencesDisableMessageEmail; +} +declare module "@salesforce/schema/User.UserPreferencesJigsawListUser" { + const UserPreferencesJigsawListUser:boolean; + export default UserPreferencesJigsawListUser; +} +declare module "@salesforce/schema/User.UserPreferencesDisableBookmarkEmail" { + const UserPreferencesDisableBookmarkEmail:boolean; + export default UserPreferencesDisableBookmarkEmail; +} +declare module "@salesforce/schema/User.UserPreferencesDisableSharePostEmail" { + const UserPreferencesDisableSharePostEmail:boolean; + export default UserPreferencesDisableSharePostEmail; +} +declare module "@salesforce/schema/User.UserPreferencesEnableAutoSubForFeeds" { + const UserPreferencesEnableAutoSubForFeeds:boolean; + export default UserPreferencesEnableAutoSubForFeeds; +} +declare module "@salesforce/schema/User.UserPreferencesDisableFileShareNotificationsForApi" { + const UserPreferencesDisableFileShareNotificationsForApi:boolean; + export default UserPreferencesDisableFileShareNotificationsForApi; +} +declare module "@salesforce/schema/User.UserPreferencesShowTitleToExternalUsers" { + const UserPreferencesShowTitleToExternalUsers:boolean; + export default UserPreferencesShowTitleToExternalUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowManagerToExternalUsers" { + const UserPreferencesShowManagerToExternalUsers:boolean; + export default UserPreferencesShowManagerToExternalUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowEmailToExternalUsers" { + const UserPreferencesShowEmailToExternalUsers:boolean; + export default UserPreferencesShowEmailToExternalUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowWorkPhoneToExternalUsers" { + const UserPreferencesShowWorkPhoneToExternalUsers:boolean; + export default UserPreferencesShowWorkPhoneToExternalUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowMobilePhoneToExternalUsers" { + const UserPreferencesShowMobilePhoneToExternalUsers:boolean; + export default UserPreferencesShowMobilePhoneToExternalUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowFaxToExternalUsers" { + const UserPreferencesShowFaxToExternalUsers:boolean; + export default UserPreferencesShowFaxToExternalUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowStreetAddressToExternalUsers" { + const UserPreferencesShowStreetAddressToExternalUsers:boolean; + export default UserPreferencesShowStreetAddressToExternalUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowCityToExternalUsers" { + const UserPreferencesShowCityToExternalUsers:boolean; + export default UserPreferencesShowCityToExternalUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowStateToExternalUsers" { + const UserPreferencesShowStateToExternalUsers:boolean; + export default UserPreferencesShowStateToExternalUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowPostalCodeToExternalUsers" { + const UserPreferencesShowPostalCodeToExternalUsers:boolean; + export default UserPreferencesShowPostalCodeToExternalUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowCountryToExternalUsers" { + const UserPreferencesShowCountryToExternalUsers:boolean; + export default UserPreferencesShowCountryToExternalUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowProfilePicToGuestUsers" { + const UserPreferencesShowProfilePicToGuestUsers:boolean; + export default UserPreferencesShowProfilePicToGuestUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowTitleToGuestUsers" { + const UserPreferencesShowTitleToGuestUsers:boolean; + export default UserPreferencesShowTitleToGuestUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowCityToGuestUsers" { + const UserPreferencesShowCityToGuestUsers:boolean; + export default UserPreferencesShowCityToGuestUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowStateToGuestUsers" { + const UserPreferencesShowStateToGuestUsers:boolean; + export default UserPreferencesShowStateToGuestUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowPostalCodeToGuestUsers" { + const UserPreferencesShowPostalCodeToGuestUsers:boolean; + export default UserPreferencesShowPostalCodeToGuestUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowCountryToGuestUsers" { + const UserPreferencesShowCountryToGuestUsers:boolean; + export default UserPreferencesShowCountryToGuestUsers; +} +declare module "@salesforce/schema/User.UserPreferencesDisableFeedbackEmail" { + const UserPreferencesDisableFeedbackEmail:boolean; + export default UserPreferencesDisableFeedbackEmail; +} +declare module "@salesforce/schema/User.UserPreferencesDisableWorkEmail" { + const UserPreferencesDisableWorkEmail:boolean; + export default UserPreferencesDisableWorkEmail; +} +declare module "@salesforce/schema/User.UserPreferencesShowForecastingChangeSignals" { + const UserPreferencesShowForecastingChangeSignals:boolean; + export default UserPreferencesShowForecastingChangeSignals; +} +declare module "@salesforce/schema/User.UserPreferencesHideS1BrowserUI" { + const UserPreferencesHideS1BrowserUI:boolean; + export default UserPreferencesHideS1BrowserUI; +} +declare module "@salesforce/schema/User.UserPreferencesDisableEndorsementEmail" { + const UserPreferencesDisableEndorsementEmail:boolean; + export default UserPreferencesDisableEndorsementEmail; +} +declare module "@salesforce/schema/User.UserPreferencesPathAssistantCollapsed" { + const UserPreferencesPathAssistantCollapsed:boolean; + export default UserPreferencesPathAssistantCollapsed; +} +declare module "@salesforce/schema/User.UserPreferencesCacheDiagnostics" { + const UserPreferencesCacheDiagnostics:boolean; + export default UserPreferencesCacheDiagnostics; +} +declare module "@salesforce/schema/User.UserPreferencesShowEmailToGuestUsers" { + const UserPreferencesShowEmailToGuestUsers:boolean; + export default UserPreferencesShowEmailToGuestUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowManagerToGuestUsers" { + const UserPreferencesShowManagerToGuestUsers:boolean; + export default UserPreferencesShowManagerToGuestUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowWorkPhoneToGuestUsers" { + const UserPreferencesShowWorkPhoneToGuestUsers:boolean; + export default UserPreferencesShowWorkPhoneToGuestUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowMobilePhoneToGuestUsers" { + const UserPreferencesShowMobilePhoneToGuestUsers:boolean; + export default UserPreferencesShowMobilePhoneToGuestUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowFaxToGuestUsers" { + const UserPreferencesShowFaxToGuestUsers:boolean; + export default UserPreferencesShowFaxToGuestUsers; +} +declare module "@salesforce/schema/User.UserPreferencesShowStreetAddressToGuestUsers" { + const UserPreferencesShowStreetAddressToGuestUsers:boolean; + export default UserPreferencesShowStreetAddressToGuestUsers; +} +declare module "@salesforce/schema/User.UserPreferencesLightningExperiencePreferred" { + const UserPreferencesLightningExperiencePreferred:boolean; + export default UserPreferencesLightningExperiencePreferred; +} +declare module "@salesforce/schema/User.UserPreferencesPreviewLightning" { + const UserPreferencesPreviewLightning:boolean; + export default UserPreferencesPreviewLightning; +} +declare module "@salesforce/schema/User.UserPreferencesHideEndUserOnboardingAssistantModal" { + const UserPreferencesHideEndUserOnboardingAssistantModal:boolean; + export default UserPreferencesHideEndUserOnboardingAssistantModal; +} +declare module "@salesforce/schema/User.UserPreferencesHideLightningMigrationModal" { + const UserPreferencesHideLightningMigrationModal:boolean; + export default UserPreferencesHideLightningMigrationModal; +} +declare module "@salesforce/schema/User.UserPreferencesHideSfxWelcomeMat" { + const UserPreferencesHideSfxWelcomeMat:boolean; + export default UserPreferencesHideSfxWelcomeMat; +} +declare module "@salesforce/schema/User.UserPreferencesHideBiggerPhotoCallout" { + const UserPreferencesHideBiggerPhotoCallout:boolean; + export default UserPreferencesHideBiggerPhotoCallout; +} +declare module "@salesforce/schema/User.UserPreferencesGlobalNavBarWTShown" { + const UserPreferencesGlobalNavBarWTShown:boolean; + export default UserPreferencesGlobalNavBarWTShown; +} +declare module "@salesforce/schema/User.UserPreferencesGlobalNavGridMenuWTShown" { + const UserPreferencesGlobalNavGridMenuWTShown:boolean; + export default UserPreferencesGlobalNavGridMenuWTShown; +} +declare module "@salesforce/schema/User.UserPreferencesCreateLEXAppsWTShown" { + const UserPreferencesCreateLEXAppsWTShown:boolean; + export default UserPreferencesCreateLEXAppsWTShown; +} +declare module "@salesforce/schema/User.UserPreferencesFavoritesWTShown" { + const UserPreferencesFavoritesWTShown:boolean; + export default UserPreferencesFavoritesWTShown; +} +declare module "@salesforce/schema/User.UserPreferencesRecordHomeSectionCollapseWTShown" { + const UserPreferencesRecordHomeSectionCollapseWTShown:boolean; + export default UserPreferencesRecordHomeSectionCollapseWTShown; +} +declare module "@salesforce/schema/User.UserPreferencesRecordHomeReservedWTShown" { + const UserPreferencesRecordHomeReservedWTShown:boolean; + export default UserPreferencesRecordHomeReservedWTShown; +} +declare module "@salesforce/schema/User.UserPreferencesFavoritesShowTopFavorites" { + const UserPreferencesFavoritesShowTopFavorites:boolean; + export default UserPreferencesFavoritesShowTopFavorites; +} +declare module "@salesforce/schema/User.UserPreferencesExcludeMailAppAttachments" { + const UserPreferencesExcludeMailAppAttachments:boolean; + export default UserPreferencesExcludeMailAppAttachments; +} +declare module "@salesforce/schema/User.UserPreferencesSuppressTaskSFXReminders" { + const UserPreferencesSuppressTaskSFXReminders:boolean; + export default UserPreferencesSuppressTaskSFXReminders; +} +declare module "@salesforce/schema/User.UserPreferencesSuppressEventSFXReminders" { + const UserPreferencesSuppressEventSFXReminders:boolean; + export default UserPreferencesSuppressEventSFXReminders; +} +declare module "@salesforce/schema/User.UserPreferencesPreviewCustomTheme" { + const UserPreferencesPreviewCustomTheme:boolean; + export default UserPreferencesPreviewCustomTheme; +} +declare module "@salesforce/schema/User.UserPreferencesHasCelebrationBadge" { + const UserPreferencesHasCelebrationBadge:boolean; + export default UserPreferencesHasCelebrationBadge; +} +declare module "@salesforce/schema/User.UserPreferencesUserDebugModePref" { + const UserPreferencesUserDebugModePref:boolean; + export default UserPreferencesUserDebugModePref; +} +declare module "@salesforce/schema/User.UserPreferencesSRHOverrideActivities" { + const UserPreferencesSRHOverrideActivities:boolean; + export default UserPreferencesSRHOverrideActivities; +} +declare module "@salesforce/schema/User.UserPreferencesNewLightningReportRunPageEnabled" { + const UserPreferencesNewLightningReportRunPageEnabled:boolean; + export default UserPreferencesNewLightningReportRunPageEnabled; +} +declare module "@salesforce/schema/User.UserPreferencesReverseOpenActivitiesView" { + const UserPreferencesReverseOpenActivitiesView:boolean; + export default UserPreferencesReverseOpenActivitiesView; +} +declare module "@salesforce/schema/User.UserPreferencesShowTerritoryTimeZoneShifts" { + const UserPreferencesShowTerritoryTimeZoneShifts:boolean; + export default UserPreferencesShowTerritoryTimeZoneShifts; +} +declare module "@salesforce/schema/User.UserPreferencesHasSentWarningEmail" { + const UserPreferencesHasSentWarningEmail:boolean; + export default UserPreferencesHasSentWarningEmail; +} +declare module "@salesforce/schema/User.UserPreferencesHasSentWarningEmail238" { + const UserPreferencesHasSentWarningEmail238:boolean; + export default UserPreferencesHasSentWarningEmail238; +} +declare module "@salesforce/schema/User.UserPreferencesHasSentWarningEmail240" { + const UserPreferencesHasSentWarningEmail240:boolean; + export default UserPreferencesHasSentWarningEmail240; +} +declare module "@salesforce/schema/User.UserPreferencesNativeEmailClient" { + const UserPreferencesNativeEmailClient:boolean; + export default UserPreferencesNativeEmailClient; +} +declare module "@salesforce/schema/User.UserPreferencesSendListEmailThroughExternalService" { + const UserPreferencesSendListEmailThroughExternalService:boolean; + export default UserPreferencesSendListEmailThroughExternalService; +} +declare module "@salesforce/schema/User.Contact" { + const Contact:any; + export default Contact; +} +declare module "@salesforce/schema/User.ContactId" { + const ContactId:any; + export default ContactId; +} +declare module "@salesforce/schema/User.Account" { + const Account:any; + export default Account; +} +declare module "@salesforce/schema/User.AccountId" { + const AccountId:any; + export default AccountId; +} +declare module "@salesforce/schema/User.CallCenter" { + const CallCenter:any; + export default CallCenter; +} +declare module "@salesforce/schema/User.CallCenterId" { + const CallCenterId:any; + export default CallCenterId; +} +declare module "@salesforce/schema/User.Extension" { + const Extension:string; + export default Extension; +} +declare module "@salesforce/schema/User.FederationIdentifier" { + const FederationIdentifier:string; + export default FederationIdentifier; +} +declare module "@salesforce/schema/User.AboutMe" { + const AboutMe:string; + export default AboutMe; +} +declare module "@salesforce/schema/User.FullPhotoUrl" { + const FullPhotoUrl:string; + export default FullPhotoUrl; +} +declare module "@salesforce/schema/User.SmallPhotoUrl" { + const SmallPhotoUrl:string; + export default SmallPhotoUrl; +} +declare module "@salesforce/schema/User.IsExtIndicatorVisible" { + const IsExtIndicatorVisible:boolean; + export default IsExtIndicatorVisible; +} +declare module "@salesforce/schema/User.OutOfOfficeMessage" { + const OutOfOfficeMessage:string; + export default OutOfOfficeMessage; +} +declare module "@salesforce/schema/User.MediumPhotoUrl" { + const MediumPhotoUrl:string; + export default MediumPhotoUrl; +} +declare module "@salesforce/schema/User.DigestFrequency" { + const DigestFrequency:string; + export default DigestFrequency; +} +declare module "@salesforce/schema/User.DefaultGroupNotificationFrequency" { + const DefaultGroupNotificationFrequency:string; + export default DefaultGroupNotificationFrequency; +} +declare module "@salesforce/schema/User.JigsawImportLimitOverride" { + const JigsawImportLimitOverride:number; + export default JigsawImportLimitOverride; +} +declare module "@salesforce/schema/User.LastViewedDate" { + const LastViewedDate:any; + export default LastViewedDate; +} +declare module "@salesforce/schema/User.LastReferencedDate" { + const LastReferencedDate:any; + export default LastReferencedDate; +} +declare module "@salesforce/schema/User.BannerPhotoUrl" { + const BannerPhotoUrl:string; + export default BannerPhotoUrl; +} +declare module "@salesforce/schema/User.SmallBannerPhotoUrl" { + const SmallBannerPhotoUrl:string; + export default SmallBannerPhotoUrl; +} +declare module "@salesforce/schema/User.MediumBannerPhotoUrl" { + const MediumBannerPhotoUrl:string; + export default MediumBannerPhotoUrl; +} +declare module "@salesforce/schema/User.IsProfilePhotoActive" { + const IsProfilePhotoActive:boolean; + export default IsProfilePhotoActive; +} +declare module "@salesforce/schema/User.Individual" { + const Individual:any; + export default Individual; +} +declare module "@salesforce/schema/User.IndividualId" { + const IndividualId:any; + export default IndividualId; +} diff --git a/backend/.env.example b/backend/.env.example index 361c297..d1e4c16 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -39,3 +39,10 @@ PDF_FILE=output/vagas_remoto.pdf HEADLESS=false VIEWPORT_WIDTH=1280 VIEWPORT_HEIGHT=800 + +GOOGLE_CLIENT_ID=seu_client_id +GOOGLE_CLIENT_SECRET=seu_client_secret +LINKEDIN_CLIENT_ID=seu_client_id +LINKEDIN_CLIENT_SECRET=seu_client_secret +GITHUB_CLIENT_ID=seu_client_id +GITHUB_CLIENT_SECRET=seu_client_secret \ No newline at end of file diff --git a/backend/drizzle.config.js b/backend/drizzle.config.js new file mode 100644 index 0000000..506f0db --- /dev/null +++ b/backend/drizzle.config.js @@ -0,0 +1,20 @@ +/** @type {import('drizzle-kit').Config} */ +export default { + schema: "./src/db/schema/index.js", + out: "./drizzle", + dialect: "postgresql", + dbCredentials: { + url: process.env.DATABASE_URL, + }, +}; + +// import { defineConfig } from "drizzle-kit"; + +// export default defineConfig({ +// schema: "./src/db/schema/index.js", +// out: "./src/db/migrations", +// dialect: "postgresql", +// dbCredentials: { +// url: process.env.DATABASE_URL, +// }, +// }); diff --git a/backend/drizzle/0000_talented_obadiah_stane.sql b/backend/drizzle/0000_talented_obadiah_stane.sql new file mode 100644 index 0000000..f81607b --- /dev/null +++ b/backend/drizzle/0000_talented_obadiah_stane.sql @@ -0,0 +1,15 @@ +CREATE TABLE "users" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "first_name" text, + "last_name" text, + "display_name" text, + "username" text NOT NULL, + "email" text, + "email_verified" boolean DEFAULT false NOT NULL, + "avatar_url" text, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE UNIQUE INDEX "users_username_unique" ON "users" USING btree ("username");--> statement-breakpoint +CREATE UNIQUE INDEX "users_email_unique" ON "users" USING btree ("email"); \ No newline at end of file diff --git a/backend/drizzle/0001_organic_groot.sql b/backend/drizzle/0001_organic_groot.sql new file mode 100644 index 0000000..65e111b --- /dev/null +++ b/backend/drizzle/0001_organic_groot.sql @@ -0,0 +1,13 @@ +CREATE TABLE "accounts" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "user_id" uuid NOT NULL, + "provider" text NOT NULL, + "provider_account_id" text NOT NULL, + "access_token" text, + "refresh_token" text, + "expires_at" timestamp, + "created_at" timestamp DEFAULT now() NOT NULL +); +--> statement-breakpoint +ALTER TABLE "accounts" ADD CONSTRAINT "accounts_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +CREATE UNIQUE INDEX "accounts_provider_unique" ON "accounts" USING btree ("provider","provider_account_id"); \ No newline at end of file diff --git a/backend/drizzle/0002_woozy_tigra.sql b/backend/drizzle/0002_woozy_tigra.sql new file mode 100644 index 0000000..9612771 --- /dev/null +++ b/backend/drizzle/0002_woozy_tigra.sql @@ -0,0 +1,35 @@ +CREATE TABLE "saved_jobs" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "user_id" uuid NOT NULL, + "job_link" text NOT NULL, + "job_title" text, + "company" text, + "location" text, + "source" text, + "keyword" text, + "status" varchar(50) DEFAULT 'saved' NOT NULL, + "applied_at" timestamp, + "notes" text, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "user_preferences" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "user_id" uuid NOT NULL, + "keywords" text[] DEFAULT '{}', + "search_location" text, + "search_language" varchar(10), + "remote_only" boolean DEFAULT true, + "job_types" text[] DEFAULT '{}', + "email_notifications" boolean DEFAULT false, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "user_preferences_user_id_unique" UNIQUE("user_id") +); +--> statement-breakpoint +ALTER TABLE "users" ALTER COLUMN "username" DROP NOT NULL;--> statement-breakpoint +ALTER TABLE "accounts" ADD COLUMN "token_type" text;--> statement-breakpoint +ALTER TABLE "accounts" ADD COLUMN "scope" text;--> statement-breakpoint +ALTER TABLE "saved_jobs" ADD CONSTRAINT "saved_jobs_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "user_preferences" ADD CONSTRAINT "user_preferences_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action; \ No newline at end of file diff --git a/backend/drizzle/meta/0000_snapshot.json b/backend/drizzle/meta/0000_snapshot.json new file mode 100644 index 0000000..686ef53 --- /dev/null +++ b/backend/drizzle/meta/0000_snapshot.json @@ -0,0 +1,127 @@ +{ + "id": "ef5952db-cdad-4fda-87ff-00dc4bc96155", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "first_name": { + "name": "first_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_name": { + "name": "last_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "display_name": { + "name": "display_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "avatar_url": { + "name": "avatar_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "users_username_unique": { + "name": "users_username_unique", + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "users_email_unique": { + "name": "users_email_unique", + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/backend/drizzle/meta/0001_snapshot.json b/backend/drizzle/meta/0001_snapshot.json new file mode 100644 index 0000000..0b0b29c --- /dev/null +++ b/backend/drizzle/meta/0001_snapshot.json @@ -0,0 +1,226 @@ +{ + "id": "5b469b42-bbaf-44a5-8316-99b73f6490cf", + "prevId": "ef5952db-cdad-4fda-87ff-00dc4bc96155", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.accounts": { + "name": "accounts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_account_id": { + "name": "provider_account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "accounts_provider_unique": { + "name": "accounts_provider_unique", + "columns": [ + { + "expression": "provider", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "provider_account_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "accounts_user_id_users_id_fk": { + "name": "accounts_user_id_users_id_fk", + "tableFrom": "accounts", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "first_name": { + "name": "first_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_name": { + "name": "last_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "display_name": { + "name": "display_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "avatar_url": { + "name": "avatar_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "users_username_unique": { + "name": "users_username_unique", + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "users_email_unique": { + "name": "users_email_unique", + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/backend/drizzle/meta/0002_snapshot.json b/backend/drizzle/meta/0002_snapshot.json new file mode 100644 index 0000000..e6a3114 --- /dev/null +++ b/backend/drizzle/meta/0002_snapshot.json @@ -0,0 +1,449 @@ +{ + "id": "4bda0dff-d87c-4a6b-a8a1-76a1a0c6b6bf", + "prevId": "5b469b42-bbaf-44a5-8316-99b73f6490cf", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.accounts": { + "name": "accounts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_account_id": { + "name": "provider_account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "token_type": { + "name": "token_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "accounts_provider_unique": { + "name": "accounts_provider_unique", + "columns": [ + { + "expression": "provider", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "provider_account_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "accounts_user_id_users_id_fk": { + "name": "accounts_user_id_users_id_fk", + "tableFrom": "accounts", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.saved_jobs": { + "name": "saved_jobs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "job_link": { + "name": "job_link", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "job_title": { + "name": "job_title", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "company": { + "name": "company", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "location": { + "name": "location", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "source": { + "name": "source", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "keyword": { + "name": "keyword", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true, + "default": "'saved'" + }, + "applied_at": { + "name": "applied_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "notes": { + "name": "notes", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "saved_jobs_user_id_users_id_fk": { + "name": "saved_jobs_user_id_users_id_fk", + "tableFrom": "saved_jobs", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_preferences": { + "name": "user_preferences", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "keywords": { + "name": "keywords", + "type": "text[]", + "primaryKey": false, + "notNull": false, + "default": "'{}'" + }, + "search_location": { + "name": "search_location", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "search_language": { + "name": "search_language", + "type": "varchar(10)", + "primaryKey": false, + "notNull": false + }, + "remote_only": { + "name": "remote_only", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "job_types": { + "name": "job_types", + "type": "text[]", + "primaryKey": false, + "notNull": false, + "default": "'{}'" + }, + "email_notifications": { + "name": "email_notifications", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "user_preferences_user_id_users_id_fk": { + "name": "user_preferences_user_id_users_id_fk", + "tableFrom": "user_preferences", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_preferences_user_id_unique": { + "name": "user_preferences_user_id_unique", + "nullsNotDistinct": false, + "columns": [ + "user_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "first_name": { + "name": "first_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_name": { + "name": "last_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "display_name": { + "name": "display_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "avatar_url": { + "name": "avatar_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "users_username_unique": { + "name": "users_username_unique", + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "users_email_unique": { + "name": "users_email_unique", + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/backend/drizzle/meta/_journal.json b/backend/drizzle/meta/_journal.json new file mode 100644 index 0000000..10a6dc1 --- /dev/null +++ b/backend/drizzle/meta/_journal.json @@ -0,0 +1,27 @@ +{ + "version": "7", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "7", + "when": 1775964742816, + "tag": "0000_talented_obadiah_stane", + "breakpoints": true + }, + { + "idx": 1, + "version": "7", + "when": 1775964954453, + "tag": "0001_organic_groot", + "breakpoints": true + }, + { + "idx": 2, + "version": "7", + "when": 1775970054624, + "tag": "0002_woozy_tigra", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/backend/package.json b/backend/package.json index 4279d0d..14e6b45 100644 --- a/backend/package.json +++ b/backend/package.json @@ -13,7 +13,10 @@ "test": "vitest run", "test:coverage": "vitest run --coverage", "test:watch": "vitest --watch", - "validate": "npm test" + "validate": "npm test", + "db:generate": "drizzle-kit generate", + "db:migrate": "drizzle-kit migrate", + "db:push": "drizzle-kit push" }, "keywords": [ "linkedin", @@ -46,9 +49,12 @@ "node": ">=22.0.0" }, "devDependencies": { + "@types/node": "^25.6.0", + "@types/pg": "^8.20.0", "@vitest/coverage-v8": "^3.2.4", "nodemon": "^3.1.14", "supertest": "^7.1.4", + "typescript": "^6.0.2", "vitest": "^3.2.4" } } diff --git a/backend/src/db/client.ts b/backend/src/db/client.ts new file mode 100644 index 0000000..9215710 --- /dev/null +++ b/backend/src/db/client.ts @@ -0,0 +1,13 @@ +import { drizzle } from "drizzle-orm/node-postgres"; +import { Pool } from "pg"; +import * as schema from "./schema"; + +const pool = new Pool({ + connectionString: process.env.DATABASE_URL!, +}); + +export const db = drizzle(pool, { schema }); + +export type DB = typeof db; + +export { pool }; diff --git a/backend/src/db/environment.json b/backend/src/db/environment.json index 7b4d508..0948f5c 100644 --- a/backend/src/db/environment.json +++ b/backend/src/db/environment.json @@ -1,8 +1,179 @@ +// { +// "KEYWORDS": [ +// "Java", +// "Spring", +// "RabbitMQ", +// "Docker" +// ] +// } + { "KEYWORDS": [ - "Java", - "Spring", + "UX Designer", + "UI Designer", + "UX/UI Designer", + "Product Designer", + "Interaction Designer", + "Visual Designer", + "Service Designer", + "Design Lead", + "Product Manager", + "Product Owner", + "Product Analyst", + "Growth Product Manager", + "Technical Product Manager", + + "Frontend Developer", + "Frontend Engineer", + "Web Developer", + "React Developer", + "Next.js Developer", + "Vue Developer", + "Angular Developer", + "JavaScript Developer", + "TypeScript Developer", + "UI Engineer", + "Frontend Architect", + + "Backend Developer", + "Backend Engineer", + "Node.js Developer", + "NestJS Developer", + "Java Developer", + "Spring Boot Developer", + "Python Developer", + "Django Developer", + "Flask Developer", + "Ruby Developer", + "Rails Developer", + "PHP Developer", + "Laravel Developer", + "Go Developer", + "Golang Developer", + "Rust Developer", + ".NET Developer", + "C# Developer", + + "Fullstack Developer", + "Fullstack Engineer", + "Software Engineer", + "Software Developer", + "Application Developer", + "Platform Engineer", + + "Mobile Developer", + "iOS Developer", + "Android Developer", + "React Native Developer", + "Flutter Developer", + "Mobile Engineer", + + "Data Engineer", + "Data Analyst", + "Data Scientist", + "Machine Learning Engineer", + "ML Engineer", + "AI Engineer", + "Analytics Engineer", + "BI Analyst", + "Business Intelligence Developer", + + "DevOps Engineer", + "Site Reliability Engineer", + "SRE", + "Cloud Engineer", + "Platform Engineer", + "Infrastructure Engineer", + "Systems Engineer", + + "Security Engineer", + "Application Security Engineer", + "Cybersecurity Analyst", + "Information Security Engineer", + "DevSecOps Engineer", + + "QA Engineer", + "Test Engineer", + "Automation Engineer", + "QA Analyst", + "Software Tester", + "SDET", + + "Game Developer", + "Unity Developer", + "Unreal Developer", + + "Embedded Engineer", + "Firmware Engineer", + "Hardware Engineer", + "IoT Developer", + + "Blockchain Developer", + "Web3 Developer", + "Smart Contract Developer", + "Solidity Developer", + + "AR Developer", + "VR Developer", + "XR Developer", + + "Technical Lead", + "Tech Lead", + "Engineering Manager", + "Head of Engineering", + "CTO", + + "Startup Engineer", + "Founding Engineer", + + "Intern Software Engineer", + "Junior Developer", + "Mid-level Developer", + "Senior Developer", + "Lead Developer", + "Principal Engineer", + "Staff Engineer", + + "Remote Developer", + "Remote Software Engineer", + "Remote Frontend Developer", + "Remote Backend Developer", + + "Docker", + "Kubernetes", + "Terraform", + "Ansible", + "CI/CD", + "GitHub Actions", + "GitLab CI", + "Jenkins", + "Microservices", + "Distributed Systems", + "REST API", + "GraphQL", + "gRPC", + + "AWS", + "Azure", + "Google Cloud", + "GCP", + "Serverless", + "Lambda", + "Cloud Functions", + + "PostgreSQL", + "MySQL", + "MongoDB", + "Redis", + "Elasticsearch", + "Kafka", "RabbitMQ", - "Docker" + "DynamoDB", + + "Agile", + "Scrum", + "Kanban", + "Lean", + "XP" ] -} \ No newline at end of file +} diff --git a/backend/src/db/keywordsStore.js b/backend/src/db/keywordsStore.js deleted file mode 100644 index 616e934..0000000 --- a/backend/src/db/keywordsStore.js +++ /dev/null @@ -1,83 +0,0 @@ -import { getRedisClient } from "../cache/redisConnection.js"; - -function getKeywordsRedisKey() { - const configuredKey = process.env.KEYWORDS_REDIS_KEY?.trim(); - if (configuredKey) { - return configuredKey; - } - - const prefix = process.env.REDIS_KEY_PREFIX?.trim() || "vagas-full"; - return `${prefix}:keywords`; -} - -export function normalizeKeywords(keywords) { - if (!Array.isArray(keywords)) { - return null; - } - - return [...new Set(keywords.map((item) => String(item ?? "").trim()).filter(Boolean))]; -} - -function parseKeywordsFromEnv(value) { - return normalizeKeywords( - String(value ?? "") - .split(",") - .map((item) => item.trim()) - .filter(Boolean), - ) ?? []; -} - -function getFallbackKeywords(fallback = []) { - const envKeywords = parseKeywordsFromEnv(process.env.SEARCH_KEYWORDS); - if (envKeywords.length > 0) { - return envKeywords; - } - - return normalizeKeywords(fallback) ?? []; -} - -export async function loadKeywords(fallback = []) { - const fallbackKeywords = getFallbackKeywords(fallback); - const client = await getRedisClient(); - - if (!client) { - return fallbackKeywords; - } - - try { - const raw = await client.get(getKeywordsRedisKey()); - if (!raw) { - return fallbackKeywords; - } - - const parsed = JSON.parse(raw); - - if (Array.isArray(parsed)) { - return normalizeKeywords(parsed) ?? []; - } - - if (Array.isArray(parsed?.KEYWORDS)) { - return normalizeKeywords(parsed.KEYWORDS) ?? []; - } - } catch { - // fallback below - } - - return fallbackKeywords; -} - -export async function saveKeywords(keywords) { - const normalizedKeywords = normalizeKeywords(keywords); - - if (normalizedKeywords === null) { - return null; - } - - const client = await getRedisClient(); - if (!client) { - throw new Error("Redis indisponivel para salvar keywords."); - } - - await client.set(getKeywordsRedisKey(), JSON.stringify(normalizedKeywords)); - return normalizedKeywords; -} diff --git a/backend/src/db/keywordsStore.ts b/backend/src/db/keywordsStore.ts new file mode 100644 index 0000000..c00ff6d --- /dev/null +++ b/backend/src/db/keywordsStore.ts @@ -0,0 +1,113 @@ +import { getRedisClient } from "../cache/redisConnection"; + +type Keyword = string; + +// 🔑 key builder +function getKeywordsRedisKey(): string { + const configuredKey = process.env.KEYWORDS_REDIS_KEY?.trim(); + if (configuredKey) return configuredKey; + + const prefix = process.env.REDIS_KEY_PREFIX?.trim() || "vagas-full"; + return `${prefix}:keywords`; +} + +// 🧹 normalização +export function normalizeKeywords( + keywords: unknown +): Keyword[] | null { + if (!Array.isArray(keywords)) { + return null; + } + + return [ + ...new Set( + keywords + .map((item) => String(item ?? "").trim()) + .filter(Boolean) + ), + ]; +} + +// 🌱 env parsing +function parseKeywordsFromEnv(value: unknown): Keyword[] { + return ( + normalizeKeywords( + String(value ?? "") + .split(",") + .map((item) => item.trim()) + .filter(Boolean) + ) ?? [] + ); +} + +// 🔁 fallback inteligente +function getFallbackKeywords(fallback: Keyword[] = []): Keyword[] { + const envKeywords = parseKeywordsFromEnv(process.env.SEARCH_KEYWORDS); + + if (envKeywords.length > 0) { + return envKeywords; + } + + return normalizeKeywords(fallback) ?? []; +} + +// 📥 load (com Redis) +export async function loadKeywords( + fallback: Keyword[] = [] +): Promise { + const fallbackKeywords = getFallbackKeywords(fallback); + const client = await getRedisClient(); + + if (!client) { + return fallbackKeywords; + } + + try { + const raw = await client.get(getKeywordsRedisKey()); + if (!raw) { + return fallbackKeywords; + } + + const parsed: unknown = JSON.parse(raw); + + if (Array.isArray(parsed)) { + return normalizeKeywords(parsed) ?? []; + } + + if ( + typeof parsed === "object" && + parsed !== null && + Array.isArray((parsed as any).KEYWORDS) + ) { + return normalizeKeywords((parsed as any).KEYWORDS) ?? []; + } + } catch { + // fallback silencioso + } + + return fallbackKeywords; +} + +// 📤 save +export async function saveKeywords( + keywords: unknown +): Promise { + const normalizedKeywords = normalizeKeywords(keywords); + + if (normalizedKeywords === null) { + return null; + } + + const client = await getRedisClient(); + + if (!client) { + throw new Error("Redis indisponivel para salvar keywords."); + } + + await client.set( + getKeywordsRedisKey(), + JSON.stringify(normalizedKeywords) + ); + + return normalizedKeywords; +} \ No newline at end of file diff --git a/backend/src/db/schema/accounts.ts b/backend/src/db/schema/accounts.ts new file mode 100644 index 0000000..044ed14 --- /dev/null +++ b/backend/src/db/schema/accounts.ts @@ -0,0 +1,84 @@ +// import { +// pgTable, +// text, +// timestamp, +// uniqueIndex, +// uuid, +// } from "drizzle-orm/pg-core"; + +// import { users } from "./users.js"; + +// export const accounts = pgTable( +// "accounts", +// { +// id: uuid("id").defaultRandom().primaryKey(), + +// userId: uuid("user_id") +// .notNull() +// .references(() => users.id, { onDelete: "cascade" }), + +// provider: text("provider").notNull(), // google, facebook, etc. +// providerAccountId: text("provider_account_id").notNull(), + +// accessToken: text("access_token"), +// refreshToken: text("refresh_token"), + +// tokenType: text("token_type"), // 'Bearer' +// scope: text("scope"), + +// expiresAt: timestamp("expires_at"), + +// createdAt: timestamp("created_at").defaultNow().notNull(), +// }, +// (table) => ({ +// providerAccountUnique: uniqueIndex("accounts_provider_unique").on( +// table.provider, +// table.providerAccountId, +// ), +// }), +// ); + +import { + pgTable, + text, + timestamp, + uniqueIndex, + uuid, +} from "drizzle-orm/pg-core"; + +import { InferInsertModel, InferSelectModel } from "drizzle-orm"; +import { users } from "./users"; + +export const accounts = pgTable( + "accounts", + { + id: uuid("id").defaultRandom().primaryKey(), + + userId: uuid("user_id") + .notNull() + .references(() => users.id, { onDelete: "cascade" }), + + provider: text("provider").notNull(), + providerAccountId: text("provider_account_id").notNull(), + + accessToken: text("access_token"), + refreshToken: text("refresh_token"), + + tokenType: text("token_type"), + scope: text("scope"), + + expiresAt: timestamp("expires_at"), + + createdAt: timestamp("created_at").defaultNow().notNull(), + }, + (table) => ({ + providerAccountUnique: uniqueIndex("accounts_provider_unique").on( + table.provider, + table.providerAccountId + ), + }) +); + +// 🔥 TIPOS +export type Account = InferSelectModel; +export type NewAccount = InferInsertModel; \ No newline at end of file diff --git a/backend/src/db/schema/index.ts b/backend/src/db/schema/index.ts new file mode 100644 index 0000000..8168ab8 --- /dev/null +++ b/backend/src/db/schema/index.ts @@ -0,0 +1,10 @@ +// export { accounts } from "./accounts"; +// export { savedJobs } from "./savedJobs"; +// export { userPreferences } from "./userPreferences"; +// export { users } from "./users"; + +export * from "./accounts"; +export * from "./savedJobs"; +export * from "./userPreferences"; +export * from "./users"; + diff --git a/backend/src/db/schema/savedJobs.ts b/backend/src/db/schema/savedJobs.ts new file mode 100644 index 0000000..07f19da --- /dev/null +++ b/backend/src/db/schema/savedJobs.ts @@ -0,0 +1,39 @@ +import { InferInsertModel, InferSelectModel } from "drizzle-orm"; +import { pgTable, text, timestamp, uuid, varchar } from "drizzle-orm/pg-core"; +import { users } from "./users"; + +export const jobStatusEnum = [ + "saved", + "applied", + "interviewing", + "rejected", + "accepted", +] as const; + +export type JobStatus = (typeof jobStatusEnum)[number]; + +export const savedJobs = pgTable("saved_jobs", { + id: uuid("id").defaultRandom().primaryKey(), + + userId: uuid("user_id") + .notNull() + .references(() => users.id, { onDelete: "cascade" }), + + jobLink: text("job_link").notNull(), + jobTitle: text("job_title"), + company: text("company"), + location: text("location"), + source: text("source"), + keyword: text("keyword"), + + status: varchar("status", { length: 50 }).default("saved").notNull(), + + appliedAt: timestamp("applied_at"), + notes: text("notes"), + + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export type SavedJob = InferSelectModel; +export type NewSavedJob = InferInsertModel; diff --git a/backend/src/db/schema/userPreferences.ts b/backend/src/db/schema/userPreferences.ts new file mode 100644 index 0000000..558bdbf --- /dev/null +++ b/backend/src/db/schema/userPreferences.ts @@ -0,0 +1,35 @@ +import { + boolean, + pgTable, + text, + timestamp, + uuid, + varchar, +} from "drizzle-orm/pg-core"; + +import { InferInsertModel, InferSelectModel } from "drizzle-orm"; +import { users } from "./users"; + +export const userPreferences = pgTable("user_preferences", { + id: uuid("id").defaultRandom().primaryKey(), + + userId: uuid("user_id") + .notNull() + .unique() + .references(() => users.id, { onDelete: "cascade" }), + + keywords: text("keywords").array().default([]), + searchLocation: text("search_location"), + searchLanguage: varchar("search_language", { length: 10 }), + + remoteOnly: boolean("remote_only").default(true), + jobTypes: text("job_types").array().default([]), + + emailNotifications: boolean("email_notifications").default(false), + + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +export type UserPreferences = InferSelectModel; +export type NewUserPreferences = InferInsertModel; diff --git a/backend/src/db/schema/users.ts b/backend/src/db/schema/users.ts new file mode 100644 index 0000000..cb1f357 --- /dev/null +++ b/backend/src/db/schema/users.ts @@ -0,0 +1,39 @@ +import { + boolean, + pgTable, + text, + timestamp, + uniqueIndex, + uuid, +} from "drizzle-orm/pg-core"; + +import { InferInsertModel, InferSelectModel } from "drizzle-orm"; + +export const users = pgTable( + "users", + { + id: uuid("id").defaultRandom().primaryKey(), + + firstName: text("first_name"), + lastName: text("last_name"), + + displayName: text("display_name"), + username: text("username"), + + email: text("email"), + emailVerified: boolean("email_verified").default(false).notNull(), + + avatarUrl: text("avatar_url"), + + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), + }, + (table) => ({ + usernameUnique: uniqueIndex("users_username_unique").on(table.username), + emailUnique: uniqueIndex("users_email_unique").on(table.email), + }), +); + +// 🔥 TIPOS AUTOMÁTICOS +export type User = InferSelectModel; +export type NewUser = InferInsertModel; diff --git a/backend/src/db/types/types.ts b/backend/src/db/types/types.ts new file mode 100644 index 0000000..d9f87dc --- /dev/null +++ b/backend/src/db/types/types.ts @@ -0,0 +1,21 @@ +// import { NodePgDatabase } from "drizzle-orm/node-postgres"; +// import * as schema from "../schema"; + +// export type Tx = NodePgDatabase; + +// import { db } from "../client"; + +// export type DB = typeof db; + +import { ExtractTablesWithRelations } from "drizzle-orm"; +import { NodePgDatabase, NodePgQueryResultHKT } from "drizzle-orm/node-postgres"; +import { PgTransaction } from "drizzle-orm/pg-core"; +import * as schema from "../schema"; + +export type DB = + | NodePgDatabase + | PgTransaction< + NodePgQueryResultHKT, + typeof schema, + ExtractTablesWithRelations + >; \ No newline at end of file diff --git a/backend/src/modules/auth/auth.service.ts b/backend/src/modules/auth/auth.service.ts new file mode 100644 index 0000000..f8e9acd --- /dev/null +++ b/backend/src/modules/auth/auth.service.ts @@ -0,0 +1,61 @@ +import type { + AuthCallbackParams, + OAuthProfile, + OAuthProvider, + Session, +} from "../types/auth.types"; +import { findOrCreateUser } from "../users/findOrCreateUser"; +import { providers } from "./providers/auth.provider"; + +export class AuthService { + async getAuthUrl(provider: OAuthProvider, state: string): Promise { + const providerImpl = providers[provider]; + + if (!providerImpl) { + throw new Error("Provider inválido"); + } + + return providerImpl.getAuthUrl(state); + } + + async handleCallback({ provider, code, state }: AuthCallbackParams): Promise<{ + user: any; // vamos melhorar isso depois + session: Session; + }> { + const profile = await this.getProfileFromProvider({ + provider, + code, + state, + }); + + const user = await findOrCreateUser({ + provider, + profile, + }); + + const session = await this.createSession(user); + + return { user, session }; + } + + async getProfileFromProvider({ + provider, + code, + state, + }: AuthCallbackParams): Promise { + const providerImpl = providers[provider]; + + if (!providerImpl) { + throw new Error("Provider inválido"); + } + + return providerImpl.exchangeCode({ code, state }); + } + + async createSession(user: { id: string }): Promise { + return { + accessToken: "jwt-aqui", + userId: user.id, + }; + } +} diff --git a/backend/src/modules/auth/providers/auth.provider.ts b/backend/src/modules/auth/providers/auth.provider.ts new file mode 100644 index 0000000..9e17d61 --- /dev/null +++ b/backend/src/modules/auth/providers/auth.provider.ts @@ -0,0 +1,25 @@ +import { OAuthProvider } from "../../types/auth.types"; +import { exchangeGithubCode, getGithubAuthUrl } from "./github"; +import { exchangeGoogleCode, getGoogleAuthUrl } from "./google"; +import { exchangeLinkedinCode, getLinkedinAuthUrl } from "./linkedin"; + +export const providers = { + github: { + getAuthUrl: getGithubAuthUrl, + exchangeCode: exchangeGithubCode, + }, + google: { + getAuthUrl: getGoogleAuthUrl, + exchangeCode: exchangeGoogleCode, + }, + linkedin: { + getAuthUrl: getLinkedinAuthUrl, + exchangeCode: exchangeLinkedinCode, + }, +} satisfies Record< + OAuthProvider, + { + getAuthUrl: (state: string) => Promise; + exchangeCode: (params: any) => Promise; + } +>; diff --git a/backend/src/modules/auth/providers/github.ts b/backend/src/modules/auth/providers/github.ts new file mode 100644 index 0000000..9f7f6d0 --- /dev/null +++ b/backend/src/modules/auth/providers/github.ts @@ -0,0 +1,57 @@ +import { OAuthProfile } from "../../types/auth.types"; + +export async function getGithubAuthUrl(state: string): Promise { + const params = new URLSearchParams({ + client_id: process.env.GITHUB_CLIENT_ID!, + redirect_uri: `${process.env.APP_URL}/auth/github/callback`, + scope: "read:user user:email", + state, + }); + + return `https://github.com/login/oauth/authorize?${params}`; +} + +export async function exchangeGithubCode({ + code, +}: { + code: string; +}): Promise { + const tokenRes = await fetch("https://github.com/login/oauth/access_token", { + method: "POST", + headers: { + Accept: "application/json", + "Content-Type": "application/json", + }, + body: JSON.stringify({ + client_id: process.env.GITHUB_CLIENT_ID!, + client_secret: process.env.GITHUB_CLIENT_SECRET!, + code, + redirect_uri: `${process.env.APP_URL}/auth/github/callback`, + }), + }); + + const { access_token } = await tokenRes.json(); + + const [userRes, emailsRes] = await Promise.all([ + fetch("https://api.github.com/user", { + headers: { Authorization: `Bearer ${access_token}` }, + }), + fetch("https://api.github.com/user/emails", { + headers: { Authorization: `Bearer ${access_token}` }, + }), + ]); + + const user = await userRes.json(); + const emails: any[] = await emailsRes.json(); + + const primaryEmail = emails.find((e) => e.primary && e.verified)?.email; + + return { + id: String(user.id), + email: primaryEmail ?? user.email, + name: user.name ?? user.login, + username: user.login, + picture: user.avatar_url, + access_token, + }; +} diff --git a/backend/src/modules/auth/providers/google.ts b/backend/src/modules/auth/providers/google.ts new file mode 100644 index 0000000..5673467 --- /dev/null +++ b/backend/src/modules/auth/providers/google.ts @@ -0,0 +1,80 @@ +import { + authorizationCodeGrant, + buildAuthorizationUrl, + discovery, +} from "openid-client"; +import { OAuthProfile } from "../../types/auth.types.js"; + + +let _config: Awaited> | null = null; + +async function getConfig() { + if (_config) return _config; + + _config = await discovery( + new URL("https://accounts.google.com"), + process.env.GOOGLE_CLIENT_ID!, + process.env.GOOGLE_CLIENT_SECRET!, + ); + + return _config; +} + +export async function getGoogleAuthUrl(state: string): Promise { + const config = await getConfig(); + + const url = buildAuthorizationUrl(config, { + redirect_uri: `${process.env.APP_URL}/auth/google/callback`, + scope: "openid email profile", + state, + }); + + return url.href; +} + +export async function exchangeGoogleCode({ + code, + state, +}: { + code: string; + state: string; +}): Promise { + const config = await getConfig(); + + const tokens = await authorizationCodeGrant( + config, + new URL( + `${process.env.APP_URL}/auth/google/callback?code=${code}&state=${state}`, + ), + ); + + const claims = tokens.claims(); + + if (!claims || typeof claims !== "object") { + throw new Error("Invalid Google claims"); + } + + // helper + const getString = (value: unknown): string | undefined => + typeof value === "string" ? value : undefined; + + const getNumber = (value: unknown): number | undefined => + typeof value === "number" ? value : undefined; + + return { + id: getString(claims.sub) ?? "", + + email: getString(claims.email), + name: getString(claims.name), + + given_name: getString(claims.given_name), + family_name: getString(claims.family_name), + + picture: getString(claims.picture), + + access_token: tokens.access_token, + refresh_token: tokens.refresh_token, + + expires_at: getNumber(claims.exp), + }; +} diff --git a/backend/src/modules/auth/providers/linkedin.ts b/backend/src/modules/auth/providers/linkedin.ts new file mode 100644 index 0000000..c535a80 --- /dev/null +++ b/backend/src/modules/auth/providers/linkedin.ts @@ -0,0 +1,78 @@ +import { + authorizationCodeGrant, + buildAuthorizationUrl, + discovery, +} from "openid-client"; +import { OAuthProfile } from "../../types/auth.types"; + +let _config: Awaited> | null = null; + +async function getConfig() { + if (_config) return _config; + + _config = await discovery( + new URL("https://www.linkedin.com/oauth"), + process.env.LINKEDIN_CLIENT_ID!, + process.env.LINKEDIN_CLIENT_SECRET!, + ); + + return _config; +} + +export async function getLinkedinAuthUrl(state: string): Promise { + const config = await getConfig(); + + const url = buildAuthorizationUrl(config, { + redirect_uri: `${process.env.APP_URL}/auth/linkedin/callback`, + scope: "openid profile email", + state, + }); + + return url.href; +} + +export async function exchangeLinkedinCode({ + code, + state, +}: { + code: string; + state: string; +}): Promise { + const config = await getConfig(); + + const tokens = await authorizationCodeGrant( + config, + new URL( + `${process.env.APP_URL}/auth/linkedin/callback?code=${code}&state=${state}`, + ), + ); + + const claims = tokens.claims(); + + if (!claims || typeof claims !== "object") { + throw new Error("Invalid LinkedIn claims"); + } + + const getString = (value: unknown): string | undefined => + typeof value === "string" ? value : undefined; + + const getNumber = (value: unknown): number | undefined => + typeof value === "number" ? value : undefined; + + return { + id: getString(claims.sub) ?? "", + + email: getString(claims.email), + name: getString(claims.name), + + given_name: getString(claims.given_name), + family_name: getString(claims.family_name), + + picture: getString(claims.picture), + + access_token: tokens.access_token, + refresh_token: tokens.refresh_token, + + expires_at: getNumber(claims.exp), + }; +} diff --git a/backend/src/modules/types/auth.types.ts b/backend/src/modules/types/auth.types.ts new file mode 100644 index 0000000..d952c73 --- /dev/null +++ b/backend/src/modules/types/auth.types.ts @@ -0,0 +1,26 @@ +export type OAuthProvider = "github" | "google" | "linkedin"; + +export type OAuthProfile = { + id: string; + email?: string | null; + name?: string; + username?: string; + given_name?: string; + family_name?: string; + picture?: string; + access_token?: string; + refresh_token?: string; + expires_at?: number; +}; + + +export type AuthCallbackParams = { + provider: OAuthProvider; + code: string; + state: string; +}; + +export type Session = { + accessToken: string; + userId: string; +}; diff --git a/backend/src/modules/types/user.types.ts b/backend/src/modules/types/user.types.ts new file mode 100644 index 0000000..e307c30 --- /dev/null +++ b/backend/src/modules/types/user.types.ts @@ -0,0 +1,19 @@ +// import type { InferSelectModel } from "drizzle-orm"; +// import { users } from "../../db/schema"; + +// export type User = InferSelectModel; + +import { InferInsertModel, InferSelectModel } from "drizzle-orm"; +import { userPreferences } from "../../db/schema/userPreferences.js"; +import { users } from "../../db/schema/users.js"; + +export type User = InferSelectModel; +export type NewUser = InferInsertModel; +export type UserPreferences = InferSelectModel; + +export type UpdateProfileData = Partial< + Pick< + NewUser, + "displayName" | "firstName" | "lastName" | "avatarUrl" | "username" + > +>; diff --git a/backend/src/modules/users/createAccount.ts b/backend/src/modules/users/createAccount.ts new file mode 100644 index 0000000..c7fd569 --- /dev/null +++ b/backend/src/modules/users/createAccount.ts @@ -0,0 +1,33 @@ +import { db } from "../../db/client.js"; +import { accounts } from "../../db/schema/accounts.js"; +import { DB } from "../../db/types/types.js"; +import { OAuthProfile } from "../types/auth.types.js"; + + +type CreateAccountParams = { + userId: string; + provider: string; + profile: OAuthProfile; +}; + +export async function createAccount( + { userId, provider, profile }: CreateAccountParams, + tx: DB = db, +): Promise { + try { + await tx.insert(accounts).values({ + userId, + provider, + providerAccountId: profile.id, + accessToken: profile.access_token ?? null, + refreshToken: profile.refresh_token ?? null, + expiresAt: profile.expires_at + ? new Date(profile.expires_at * 1000) + : null, + }); + } catch (err: any) { + if (err.code !== "23505") { + throw err; + } + } +} diff --git a/backend/src/modules/users/createUser.ts b/backend/src/modules/users/createUser.ts new file mode 100644 index 0000000..c8614e6 --- /dev/null +++ b/backend/src/modules/users/createUser.ts @@ -0,0 +1,44 @@ +import { db } from "../../db/client.js"; +import { users } from "../../db/schema/users.js"; +import { DB } from "../../db/types/types.js"; +import { generateUsername } from "../../utils/generateUsername.js"; +import { OAuthProfile } from "../types/auth.types.js"; +import { findUserByEmail } from "./findUsers.js"; + +type CreateUserParams = { + profile: OAuthProfile; +}; + +export async function createUser({ profile }: CreateUserParams, tx: DB = db) { + const baseName = + profile.username || profile.name || profile.email?.split("@")[0] || "user"; + + const username = await generateUsername(baseName, tx); + + try { + const result = await tx + .insert(users) + .values({ + email: profile.email ?? null, + displayName: profile.name ?? null, + firstName: profile.given_name ?? null, + lastName: profile.family_name ?? null, + avatarUrl: profile.picture ?? null, + username, + }) + .returning(); + + return result[0]; + } catch (err: any) { + if (err.code === "23505") { + if (!profile.email) throw err; + + const existingUser = await findUserByEmail(profile.email, tx); + if (!existingUser) throw err; + + return existingUser; + } + + throw err; + } +} diff --git a/backend/src/modules/users/findOrCreateUser.ts b/backend/src/modules/users/findOrCreateUser.ts new file mode 100644 index 0000000..dcd6f1a --- /dev/null +++ b/backend/src/modules/users/findOrCreateUser.ts @@ -0,0 +1,56 @@ +import { db } from "../../db/client.js"; +import { OAuthProfile } from "../types/auth.types.js"; +import { createAccount } from "./createAccount.js"; +import { createUser } from "./createUser.js"; +import { findUserByEmail, findUserByProvider } from "./findUsers.js"; + + + +type FindOrCreateUserParams = { + provider: string; + profile: OAuthProfile; +}; + +export async function findOrCreateUser({ + provider, + profile, +}: FindOrCreateUserParams) { + return db.transaction(async (tx) => { + const existingByProvider = await findUserByProvider( + { provider, providerAccountId: profile.id }, + tx, + ); + + if (existingByProvider) return existingByProvider; + + if (profile.email) { + const existingByEmail = await findUserByEmail(profile.email, tx); + + if (existingByEmail) { + await createAccount( + { + userId: existingByEmail.id, + provider, + profile, + }, + tx, + ); + + return existingByEmail; + } + } + + const newUser = await createUser({ profile }, tx); + + await createAccount( + { + userId: newUser.id, + provider, + profile, + }, + tx, + ); + + return newUser; + }); +} diff --git a/backend/src/modules/users/findUsers.ts b/backend/src/modules/users/findUsers.ts new file mode 100644 index 0000000..5c78533 --- /dev/null +++ b/backend/src/modules/users/findUsers.ts @@ -0,0 +1,30 @@ +import { db } from "../../db/client.js"; +import { DB } from "../../db/types/types.js"; + +export async function findUserByProvider( + { + provider, + providerAccountId, + }: { provider: string; providerAccountId: string }, + tx: DB = db, +) { + const existingAccount = await tx.query.accounts.findFirst({ + where: (acc, { eq, and }) => + and( + eq(acc.provider, provider), + eq(acc.providerAccountId, providerAccountId), + ), + }); + + if (!existingAccount) return null; + + return tx.query.users.findFirst({ + where: (u, { eq }) => eq(u.id, existingAccount.userId), + }); +} + +export async function findUserByEmail(email: string, tx: DB = db) { + return tx.query.users.findFirst({ + where: (u, { eq }) => eq(u.email, email), + }); +} diff --git a/backend/src/modules/users/user.service.ts b/backend/src/modules/users/user.service.ts new file mode 100644 index 0000000..195b0f2 --- /dev/null +++ b/backend/src/modules/users/user.service.ts @@ -0,0 +1,36 @@ +import { eq } from "drizzle-orm"; +import { db } from "../../db/client"; +import { userPreferences, users } from "../../db/schema"; +import { DB } from "../../db/types/types"; +import { UpdateProfileData, User } from "../types/user.types"; + +export class UserService { + constructor(private readonly tx: DB = db) {} + + async getUserById(id: string): Promise { + return this.tx.query.users.findFirst({ + where: (u, { eq }) => eq(u.id, id), + }); + } + + async updateProfile(userId: string, data: UpdateProfileData): Promise { + const result = await this.tx + .update(users) + .set({ + ...data, + updatedAt: new Date(), + }) + .where(eq(users.id, userId)) + .returning(); + + if (!result[0]) { + throw new Error(`Usuário ${userId} não encontrado`); + } + + return result[0]; + } + + async createDefaultPreferences(userId: string): Promise { + await this.tx.insert(userPreferences).values({ userId }); + } +} diff --git a/backend/src/utils/generateUsername.ts b/backend/src/utils/generateUsername.ts new file mode 100644 index 0000000..a8b05d2 --- /dev/null +++ b/backend/src/utils/generateUsername.ts @@ -0,0 +1,45 @@ +import { DB } from "../db/types/types"; + + +export async function generateUsername( + base: string | undefined, + dbOrTx: DB, +): Promise { + const normalizedBase = normalize(base); + + const safeBase = normalizedBase || "user"; + + const exists = await dbOrTx.query.users.findFirst({ + where: (u, { eq }) => eq(u.username, safeBase), + }); + + if (!exists) return safeBase; + + const MAX_ATTEMPTS = 20; + + for (let i = 1; i <= MAX_ATTEMPTS; i++) { + const username = `${safeBase}_${i}`; + + const existing = await dbOrTx.query.users.findFirst({ + where: (u, { eq }) => eq(u.username, username), + }); + + if (!existing) return username; + } + + const randomSuffix = Math.floor(Math.random() * 10000); + + return `${safeBase}_${randomSuffix}`; +} + +function normalize(str?: string): string { + return ( + str + ?.toLowerCase() + .normalize("NFD") + .replace(/[\u0300-\u036f]/g, "") + .replace(/\s+/g, "") + .replace(/[^a-z0-9_]/g, "") + .slice(0, 20) || "" + ); +} diff --git a/backend/tsconfig.json b/backend/tsconfig.json new file mode 100644 index 0000000..6ec6236 --- /dev/null +++ b/backend/tsconfig.json @@ -0,0 +1,59 @@ +// { +// // Visit https://aka.ms/tsconfig to read more about this file +// "compilerOptions": { +// // File Layout +// // "rootDir": "./src", +// // "outDir": "./dist", + +// // Environment Settings +// // See also https://aka.ms/tsconfig/module +// "module": "nodenext", +// "target": "esnext", +// "types": [], +// // For nodejs: +// // "lib": ["esnext"], +// // "types": ["node"], +// // and npm install -D @types/node + +// // Other Outputs +// "sourceMap": true, +// "declaration": true, +// "declarationMap": true, + +// // Stricter Typechecking Options +// "noUncheckedIndexedAccess": true, +// "exactOptionalPropertyTypes": true, + +// // Style Options +// // "noImplicitReturns": true, +// // "noImplicitOverride": true, +// // "noUnusedLocals": true, +// // "noUnusedParameters": true, +// // "noFallthroughCasesInSwitch": true, +// // "noPropertyAccessFromIndexSignature": true, + +// // Recommended Options +// "strict": true, +// "jsx": "react-jsx", +// "verbatimModuleSyntax": true, +// "isolatedModules": true, +// "noUncheckedSideEffectImports": true, +// "moduleDetection": "force", +// "skipLibCheck": true, +// } +// } +{ + "compilerOptions": { + "target": "ES2022", + "module": "CommonJS", + "moduleResolution": "Node", + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9692281..3574e3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,16 +16,23 @@ "cheerio": "^1.2.0", "cors": "^2.8.6", "dotenv": "^17.3.1", + "drizzle-orm": "^0.45.2", "express": "^5.2.1", + "openid-client": "^6.8.2", "pdfkit": "^0.18.0", + "pg": "^8.20.0", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.1", "xlsx": "^0.18.5" }, "devDependencies": { + "@types/node": "^25.6.0", + "@types/pg": "^8.20.0", "concurrently": "^9.2.1", + "drizzle-kit": "^0.31.10", "electron": "^33.0.0", - "electron-builder": "^25.0.0" + "electron-builder": "^25.0.0", + "typescript": "^6.0.2" } }, "backend": { @@ -44,9 +51,12 @@ "xlsx": "^0.18.5" }, "devDependencies": { + "@types/node": "^25.6.0", + "@types/pg": "^8.20.0", "@vitest/coverage-v8": "^3.2.4", "nodemon": "^3.1.14", "supertest": "^7.1.4", + "typescript": "^6.0.2", "vitest": "^3.2.4" }, "engines": { @@ -86,6 +96,20 @@ "vite": "^8.0.1" } }, + "frontend/node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/@adobe/css-tools": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", @@ -595,6 +619,13 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/@drizzle-team/brocli": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@drizzle-team/brocli/-/brocli-0.10.2.tgz", + "integrity": "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/@electron/asar": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", @@ -994,27 +1025,22 @@ "tslib": "^2.4.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", - "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", - "cpu": [ - "ppc64" - ], + "node_modules/@esbuild-kit/core-utils": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz", + "integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==", + "deprecated": "Merged into tsx: https://tsx.is", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" + "dependencies": { + "esbuild": "~0.18.20", + "source-map-support": "^0.5.21" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", - "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", "cpu": [ "arm" ], @@ -1025,13 +1051,13 @@ "android" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", - "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", "cpu": [ "arm64" ], @@ -1042,13 +1068,13 @@ "android" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", - "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", "cpu": [ "x64" ], @@ -1059,13 +1085,13 @@ "android" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", - "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", "cpu": [ "arm64" ], @@ -1076,13 +1102,13 @@ "darwin" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", - "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", "cpu": [ "x64" ], @@ -1093,13 +1119,13 @@ "darwin" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", - "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", "cpu": [ "arm64" ], @@ -1110,13 +1136,13 @@ "freebsd" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", - "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", "cpu": [ "x64" ], @@ -1127,13 +1153,13 @@ "freebsd" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", - "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", "cpu": [ "arm" ], @@ -1144,13 +1170,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", - "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", "cpu": [ "arm64" ], @@ -1161,13 +1187,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", - "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", "cpu": [ "ia32" ], @@ -1178,13 +1204,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", - "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", "cpu": [ "loong64" ], @@ -1195,13 +1221,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", - "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", "cpu": [ "mips64el" ], @@ -1212,13 +1238,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", - "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", "cpu": [ "ppc64" ], @@ -1229,13 +1255,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", - "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", "cpu": [ "riscv64" ], @@ -1246,13 +1272,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", - "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", "cpu": [ "s390x" ], @@ -1263,13 +1289,13 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", - "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", "cpu": [ "x64" ], @@ -1280,15 +1306,15 @@ "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", - "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", @@ -1297,13 +1323,13 @@ "netbsd" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", - "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", "cpu": [ "x64" ], @@ -1311,16 +1337,33 @@ "license": "MIT", "optional": true, "os": [ - "netbsd" + "openbsd" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", - "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", "cpu": [ "arm64" ], @@ -1328,101 +1371,151 @@ "license": "MIT", "optional": true, "os": [ - "openbsd" + "win32" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", - "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", "cpu": [ - "x64" + "ia32" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "openbsd" + "win32" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", - "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "openharmony" + "win32" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/sunos-x64": { + "node_modules/@esbuild-kit/core-utils/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@esbuild-kit/esm-loader": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz", + "integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==", + "deprecated": "Merged into tsx: https://tsx.is", + "dev": true, + "license": "MIT", + "dependencies": { + "@esbuild-kit/core-utils": "^3.3.2", + "get-tsconfig": "^4.7.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", - "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", + "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", "cpu": [ - "x64" + "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "sunos" + "aix" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/win32-arm64": { + "node_modules/@esbuild/android-arm": { "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", - "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", + "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", "cpu": [ - "arm64" + "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/win32-ia32": { + "node_modules/@esbuild/android-arm64": { "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", - "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", + "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", "cpu": [ - "ia32" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/win32-x64": { + "node_modules/@esbuild/android-x64": { "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", - "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", + "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", "cpu": [ "x64" ], @@ -1430,23 +1523,397 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", + "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", + "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", + "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", + "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", + "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", + "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", + "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", + "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", + "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", + "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", + "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", + "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", + "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", + "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", + "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", + "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", + "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", + "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", + "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", + "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", + "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", + "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -3002,13 +3469,25 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.19.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz", - "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==", - "dev": true, + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", + "devOptional": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.19.0" + } + }, + "node_modules/@types/pg": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.20.0.tgz", + "integrity": "sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" } }, "node_modules/@types/plist": { @@ -3072,182 +3551,15 @@ "@types/node": "*" } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz", - "integrity": "sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/type-utils": "8.57.2", - "@typescript-eslint/utils": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.57.2", - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.2.tgz", - "integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz", - "integrity": "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.57.2", - "@typescript-eslint/types": "^8.57.2", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz", - "integrity": "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz", - "integrity": "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.2.tgz", - "integrity": "sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/utils": "8.57.2", - "debug": "^4.4.3", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz", - "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz", - "integrity": "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz", + "integrity": "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.57.2", - "@typescript-eslint/tsconfig-utils": "8.57.2", "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", - "debug": "^4.4.3", - "minimatch": "^10.2.2", - "semver": "^7.7.3", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.4.0" + "@typescript-eslint/visitor-keys": "8.57.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3255,46 +3567,20 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { + "node_modules/@typescript-eslint/types": { "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz", - "integrity": "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz", + "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==", "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2" - }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { @@ -3924,85 +4210,312 @@ "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=12" + } + }, + "node_modules/ast-v8-to-istanbul": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.12.tgz", + "integrity": "sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "estree-walker": "^3.0.3", + "js-tokens": "^10.0.0" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001774", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", + "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/backend": { + "resolved": "backend", + "link": true + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.10", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.10.tgz", + "integrity": "sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/bluebird-lst": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bluebird": "^3.5.5" + } + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/ast-v8-to-istanbul": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.12.tgz", - "integrity": "sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g==", - "dev": true, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.31", - "estree-walker": "^3.0.3", - "js-tokens": "^10.0.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", - "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "dev": true, "license": "MIT", - "optional": true, + "dependencies": { + "balanced-match": "^4.0.2" + }, "engines": { - "node": ">=8" + "node": "18 || 20 || >=22" } }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, - "node_modules/async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, "engines": { - "node": ">=0.12.0" + "node": ">=8" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 4.0.0" + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.1.2" } }, - "node_modules/autoprefixer": { - "version": "10.4.27", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", - "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" + "url": "https://tidelift.com/funding/github/npm/browserslist" }, { "type": "github", @@ -4011,51 +4524,24 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.28.1", - "caniuse-lite": "^1.0.30001774", - "fraction.js": "^5.3.4", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { - "autoprefixer": "bin/autoprefixer" + "browserslist": "cli.js" }, "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/axios": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", - "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.11", - "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/backend": { - "resolved": "backend", - "link": true - }, - "node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -4070,1722 +4556,2161 @@ "url": "https://feross.org/support" } ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, "license": "MIT" }, - "node_modules/baseline-browser-mapping": { - "version": "2.10.10", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.10.tgz", - "integrity": "sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==", + "node_modules/builder-util": { + "version": "25.1.7", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-25.1.7.tgz", + "integrity": "sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==", "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.6", + "7zip-bin": "~5.2.0", + "app-builder-bin": "5.0.0-alpha.10", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "9.2.10", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.2.10", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz", + "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/builder-util/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/builder-util/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">= 10.0.0" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "node_modules/cacache/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, - "node_modules/bluebird-lst": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", - "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { - "bluebird": "^3.5.5" + "balanced-match": "^1.0.0" } }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "license": "MIT", + "node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "license": "MIT", + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=10" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" - }, - "node_modules/boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, "license": "MIT", - "optional": true + "engines": { + "node": ">=10.6.0" + } }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^4.0.2" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=8" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { - "fill-range": "^7.1.1" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { - "base64-js": "^1.1.2" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "license": "MIT" + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" - }, - "bin": { - "browserslist": "cli.js" - }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=6" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001781", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz", + "integrity": "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "github", + "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", + "license": "CC-BY-4.0" + }, + "node_modules/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "license": "Apache-2.0", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", "dev": true, "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, "engines": { - "node": "*" + "node": ">=18" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/builder-util": { - "version": "25.1.7", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-25.1.7.tgz", - "integrity": "sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==", + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "@types/debug": "^4.1.6", - "7zip-bin": "~5.2.0", - "app-builder-bin": "5.0.0-alpha.10", - "bluebird-lst": "^1.0.9", - "builder-util-runtime": "9.2.10", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "debug": "^4.3.4", - "fs-extra": "^10.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "is-ci": "^3.0.0", - "js-yaml": "^4.1.0", - "source-map-support": "^0.5.19", - "stat-mode": "^1.0.0", - "temp-file": "^3.4.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/builder-util-runtime": { - "version": "9.2.10", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz", - "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==", + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=8" } }, - "node_modules/builder-util/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/cheerio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.19.0", + "whatwg-mimetype": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=20.18.1" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, - "node_modules/builder-util/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", "dependencies": { - "universalify": "^2.0.0" + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/builder-util/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, "engines": { - "node": ">= 10.0.0" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">= 0.8" + "node": ">= 6" } }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, + "license": "MIT" + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/cacache/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=6" } }, - "node_modules/cacache/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=12" + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cacache/node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "license": "MIT", "engines": { - "node": ">=10.6.0" + "node": ">=0.8" } }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "license": "MIT", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "mimic-response": "^1.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=7.0.0" } }, - "node_modules/call-me-maybe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true, "license": "MIT", "engines": { "node": ">= 6" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001781", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz", - "integrity": "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==", + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/cfb": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", - "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", - "license": "Apache-2.0", - "dependencies": { - "adler-32": "~1.3.0", - "crc-32": "~1.2.0" - }, + "license": "MIT", "engines": { - "node": ">=0.8" + "node": ">=0.10.0" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chai": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">=18" + "node": ">= 10" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", + "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.3", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/config-file-ts": { + "version": "0.2.8-rc1", + "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.8-rc1.tgz", + "integrity": "sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "glob": "^10.3.12", + "typescript": "^5.4.3" } }, - "node_modules/check-error": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", - "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "node_modules/config-file-ts/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } + "license": "MIT" }, - "node_modules/cheerio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", - "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "node_modules/config-file-ts/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "license": "MIT", "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "encoding-sniffer": "^0.2.1", - "htmlparser2": "^10.1.0", - "parse5": "^7.3.0", - "parse5-htmlparser2-tree-adapter": "^7.1.0", - "parse5-parser-stream": "^7.1.2", - "undici": "^7.19.0", - "whatwg-mimetype": "^4.0.0" - }, - "engines": { - "node": ">=20.18.1" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + "balanced-match": "^1.0.0" } }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "license": "BSD-2-Clause", + "node_modules/config-file-ts/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/config-file-ts/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "brace-expansion": "^2.0.2" }, "engines": { - "node": ">= 8.10.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/config-file-ts/node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 6" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/config-file-ts/node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=10" + "node": ">=14.17" } }, - "node_modules/chromium-pickle-js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", - "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], + "node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/class-variance-authority": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", - "license": "Apache-2.0", - "dependencies": { - "clsx": "^2.1.1" + "node": ">=18" }, "funding": { - "url": "https://polar.sh/cva" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, "engines": { - "node": ">=8" + "node": ">=6.6.0" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "dev": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, "engines": { - "node": ">=6" + "node": ">= 0.10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "buffer": "^5.1.0" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", "dev": true, - "license": "ISC", + "license": "MIT", + "peer": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" }, "engines": { - "node": ">=12" + "node": ">= 10" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, "engines": { - "node": ">=0.8" + "node": ">= 8" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "license": "MIT", + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", "dependencies": { - "mimic-response": "^1.0.0" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", "engines": { - "node": ">=6" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.10.0" - } + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" }, - "node_modules/codepage": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", - "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", - "license": "Apache-2.0", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, "engines": { - "node": ">=0.8" + "node": ">=4" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=18" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", "dev": true, "license": "MIT" }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "dev": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } + "license": "MIT" }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=18" } }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">= 6" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/compare-version": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", - "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, "license": "MIT", + "engines": { + "node": ">=10" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/compress-commons": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", - "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, "engines": { - "node": ">= 10" + "node": ">=6" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, "license": "MIT" }, - "node_modules/concurrently": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", - "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "4.1.2", - "rxjs": "7.8.2", - "shell-quote": "1.8.3", - "supports-color": "8.1.1", - "tree-kill": "1.2.2", - "yargs": "17.7.2" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, - "engines": { - "node": ">=18" + "clone": "^1.0.2" }, "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/config-file-ts": { - "version": "0.2.8-rc1", - "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.8-rc1.tgz", - "integrity": "sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==", + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "license": "MIT", - "dependencies": { - "glob": "^10.3.12", - "typescript": "^5.4.3" + "engines": { + "node": ">=0.8" } }, - "node_modules/config-file-ts/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/config-file-ts/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=10" } }, - "node_modules/config-file-ts/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/config-file-ts/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true, "dependencies": { - "brace-expansion": "^2.0.2" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/config-file-ts/node_modules/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=0.4.0" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">= 0.8" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=6.6.0" - } + "optional": true }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", "license": "MIT" }, - "node_modules/core-util-is": { + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dir-compare": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", + "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5", + "p-limit": "^3.1.0 " + } + }, + "node_modules/dir-compare/node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, - "node_modules/cors": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", - "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "node_modules/dir-compare/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, "license": "MIT", "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "node_modules/dir-compare/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "license": "MIT", - "optional": true, + "license": "ISC", "dependencies": { - "buffer": "^5.1.0" - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.8" + "node": "*" } }, - "node_modules/crc32-stream": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", - "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dmg-builder": { + "version": "25.1.8", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-25.1.8.tgz", + "integrity": "sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" + "app-builder-lib": "25.1.8", + "builder-util": "25.1.7", + "builder-util-runtime": "9.2.10", + "fs-extra": "^10.1.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" }, - "engines": { - "node": ">= 10" + "optionalDependencies": { + "dmg-license": "^1.0.11" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/dmg-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 8" + "node": ">=12" } }, - "node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", - "license": "BSD-2-Clause", + "node_modules/dmg-builder/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "license": "BSD-2-Clause", + "node_modules/dmg-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "node": ">= 10.0.0" } }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, "bin": { - "cssesc": "bin/cssesc" + "dmg-license": "bin/dmg-license.js" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/cssstyle": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", - "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", - "dev": true, - "license": "MIT", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "license": "Apache-2.0", "dependencies": { - "@asamuzakjp/css-color": "^3.2.0", - "rrweb-cssom": "^0.8.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=18" + "node": ">=6.0.0" } }, - "node_modules/cssstyle/node_modules/rrweb-cssom": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", - "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", - "dev": true, - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", - "dev": true, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "license": "MIT", "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" }, "engines": { - "node": ">=18" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", "dependencies": { - "ms": "^2.1.3" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", + "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "license": "BSD-2-Clause", "engines": { - "node": ">=6.0" + "node": ">=12" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", - "dev": true, - "license": "MIT" - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "mimic-response": "^3.1.0" + "dotenv": "^16.4.5" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://dotenvx.com" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "node_modules/dotenv-expand/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "url": "https://dotenvx.com" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "node_modules/drizzle-kit": { + "version": "0.31.10", + "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.10.tgz", + "integrity": "sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw==", "dev": true, "license": "MIT", "dependencies": { - "clone": "^1.0.2" + "@drizzle-team/brocli": "^0.10.2", + "@esbuild-kit/esm-loader": "^2.5.5", + "esbuild": "^0.25.4", + "tsx": "^4.21.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "drizzle-kit": "bin.cjs" } }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "node_modules/drizzle-kit/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=0.8" + "node": ">=18" } }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "node_modules/drizzle-kit/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/drizzle-kit/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", "optional": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, + "os": [ + "android" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/drizzle-kit/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", "optional": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, + "os": [ + "android" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/drizzle-kit/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.4.0" + "node": ">=18" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "node_modules/drizzle-kit/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.8" + "node": ">=18" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "optional": true - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/dfa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", - "license": "MIT" - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/dir-compare": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", - "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", + "node_modules/drizzle-kit/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "minimatch": "^3.0.5", - "p-limit": "^3.1.0 " + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/dir-compare/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/drizzle-kit/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/dir-compare/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/drizzle-kit/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/dir-compare/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/drizzle-kit/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "*" + "node": ">=18" } }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "node_modules/drizzle-kit/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/dmg-builder": { - "version": "25.1.8", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-25.1.8.tgz", - "integrity": "sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ==", + "node_modules/drizzle-kit/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], "dev": true, "license": "MIT", - "dependencies": { - "app-builder-lib": "25.1.8", - "builder-util": "25.1.7", - "builder-util-runtime": "9.2.10", - "fs-extra": "^10.1.0", - "iconv-lite": "^0.6.2", - "js-yaml": "^4.1.0" - }, - "optionalDependencies": { - "dmg-license": "^1.0.11" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/dmg-builder/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/drizzle-kit/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/dmg-builder/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/drizzle-kit/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/dmg-builder/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/drizzle-kit/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 10.0.0" + "node": ">=18" } }, - "node_modules/dmg-license": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", - "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "node_modules/drizzle-kit/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "openbsd" ], - "dependencies": { - "@types/plist": "^3.0.1", - "@types/verror": "^1.10.3", - "ajv": "^6.10.0", - "crc": "^3.8.0", - "iconv-corefoundation": "^1.1.7", - "plist": "^3.0.4", - "smart-buffer": "^4.0.2", - "verror": "^1.10.0" - }, - "bin": { - "dmg-license": "bin/dmg-license.js" - }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, + "node_modules/drizzle-kit/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=6.0.0" + "node": ">=18" } }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "node_modules/drizzle-kit/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "peer": true + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "node_modules/drizzle-kit/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } + "node_modules/drizzle-kit/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "node": ">=18" } }, - "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", - "license": "BSD-2-Clause", + "node_modules/drizzle-kit/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" + "node": ">=18" } }, - "node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "node_modules/drizzle-kit/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dotenv": "^16.4.5" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" + "node": ">=18" } }, - "node_modules/dotenv-expand/node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "node_modules/drizzle-kit/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "dev": true, - "license": "BSD-2-Clause", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://dotenvx.com" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/drizzle-orm": { + "version": "0.45.2", + "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.45.2.tgz", + "integrity": "sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q==", + "license": "Apache-2.0", + "peerDependencies": { + "@aws-sdk/client-rds-data": ">=3", + "@cloudflare/workers-types": ">=4", + "@electric-sql/pglite": ">=0.2.0", + "@libsql/client": ">=0.10.0", + "@libsql/client-wasm": ">=0.10.0", + "@neondatabase/serverless": ">=0.10.0", + "@op-engineering/op-sqlite": ">=2", + "@opentelemetry/api": "^1.4.1", + "@planetscale/database": ">=1.13", + "@prisma/client": "*", + "@tidbcloud/serverless": "*", + "@types/better-sqlite3": "*", + "@types/pg": "*", + "@types/sql.js": "*", + "@upstash/redis": ">=1.34.7", + "@vercel/postgres": ">=0.8.0", + "@xata.io/client": "*", + "better-sqlite3": ">=7", + "bun-types": "*", + "expo-sqlite": ">=14.0.0", + "gel": ">=2", + "knex": "*", + "kysely": "*", + "mysql2": ">=2", + "pg": ">=8", + "postgres": ">=3", + "sql.js": ">=1", + "sqlite3": ">=5" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-rds-data": { + "optional": true + }, + "@cloudflare/workers-types": { + "optional": true + }, + "@electric-sql/pglite": { + "optional": true + }, + "@libsql/client": { + "optional": true + }, + "@libsql/client-wasm": { + "optional": true + }, + "@neondatabase/serverless": { + "optional": true + }, + "@op-engineering/op-sqlite": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@prisma/client": { + "optional": true + }, + "@tidbcloud/serverless": { + "optional": true + }, + "@types/better-sqlite3": { + "optional": true + }, + "@types/pg": { + "optional": true + }, + "@types/sql.js": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/postgres": { + "optional": true + }, + "@xata.io/client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "bun-types": { + "optional": true + }, + "expo-sqlite": { + "optional": true + }, + "gel": { + "optional": true + }, + "knex": { + "optional": true + }, + "kysely": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "postgres": { + "optional": true + }, + "prisma": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + } } }, "node_modules/dunder-proto": { @@ -6030,6 +6955,23 @@ "dev": true, "license": "ISC" }, + "node_modules/electron/node_modules/@types/node": { + "version": "20.19.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.39.tgz", + "integrity": "sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/electron/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -7103,6 +8045,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-tsconfig": { + "version": "4.13.7", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz", + "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -7923,6 +8878,15 @@ "jiti": "bin/jiti.js" } }, + "node_modules/jose": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.2.tgz", + "integrity": "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-md5": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.8.3.tgz", @@ -9322,6 +10286,15 @@ "dev": true, "license": "MIT" }, + "node_modules/oauth4webapi": { + "version": "3.8.5", + "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.5.tgz", + "integrity": "sha512-A8jmyUckVhRJj5lspguklcl90Ydqk61H3dcU0oLhH3Yv13KpAliKTt5hknpGGPZSSfOwGyraNEFmofDYH+1kSg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -9408,6 +10381,19 @@ "license": "MIT", "peer": true }, + "node_modules/openid-client": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.8.2.tgz", + "integrity": "sha512-uOvTCndr4udZsKihJ68H9bUICrriHdUVJ6Az+4Ns6cW55rwM5h0bjVIzDz2SxgOI84LKjFyjOFvERLzdTUROGA==", + "license": "MIT", + "dependencies": { + "jose": "^6.1.3", + "oauth4webapi": "^3.8.4" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -9663,9 +10649,9 @@ } }, "node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", "license": "MIT", "funding": { "type": "opencollective", @@ -9725,6 +10711,95 @@ "dev": true, "license": "MIT" }, + "node_modules/pg": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz", + "integrity": "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==", + "license": "MIT", + "dependencies": { + "pg-connection-string": "^2.12.0", + "pg-pool": "^3.13.0", + "pg-protocol": "^1.13.0", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "engines": { + "node": ">= 16.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.3.0" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz", + "integrity": "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.12.0.tgz", + "integrity": "sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==", + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.13.0.tgz", + "integrity": "sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==", + "license": "MIT", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz", + "integrity": "sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "license": "MIT", + "dependencies": { + "split2": "^4.1.0" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -9921,33 +10996,72 @@ "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", + "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", "license": "MIT", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "xtend": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -10041,10 +11155,13 @@ } }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/pstree.remy": { "version": "1.1.8", @@ -10393,6 +11510,16 @@ "node": ">=4" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/responselike": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", @@ -11032,6 +12159,15 @@ "source-map": "^0.6.0" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -11620,9 +12756,9 @@ "license": "MIT" }, "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -11942,6 +13078,26 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11984,9 +13140,9 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -12021,6 +13177,199 @@ "typescript": ">=4.8.4 <6.0.0" } }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz", + "integrity": "sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.57.2", + "@typescript-eslint/type-utils": "8.57.2", + "@typescript-eslint/utils": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.57.2", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.2.tgz", + "integrity": "sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/typescript-estree": "8.57.2", + "@typescript-eslint/utils": "8.57.2", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.2.tgz", + "integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.57.2", + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/typescript-estree": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz", + "integrity": "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.57.2", + "@typescript-eslint/tsconfig-utils": "8.57.2", + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/project-service": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz", + "integrity": "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.57.2", + "@typescript-eslint/types": "^8.57.2", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz", + "integrity": "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz", + "integrity": "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.57.2", + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/typescript-estree": "8.57.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/typescript-eslint/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -12038,10 +13387,10 @@ } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", + "devOptional": true, "license": "MIT" }, "node_modules/unicode-properties": { @@ -12331,9 +13680,9 @@ } }, "node_modules/vite-node/node_modules/vite": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", - "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz", + "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==", "dev": true, "license": "MIT", "dependencies": { @@ -12846,9 +14195,9 @@ } }, "node_modules/vitest/node_modules/vite": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", - "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz", + "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==", "dev": true, "license": "MIT", "dependencies": { @@ -13173,6 +14522,15 @@ "dev": true, "license": "MIT" }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 505ab5e..9335cd7 100644 --- a/package.json +++ b/package.json @@ -22,23 +22,33 @@ "validate": "npm run test --workspace=backend && npm run lint --workspace=frontend && npm run build --workspace=frontend", "electron": "electron .", "electron:dev": "npm run build:frontend && electron .", - "dist": "npm run build:frontend && electron-builder" + "dist": "npm run build:frontend && electron-builder", + "db:generate": "drizzle-kit generate", + "db:migrate": "drizzle-kit migrate", + "db:push": "drizzle-kit push" }, "dependencies": { "axios": "^1.13.6", "cheerio": "^1.2.0", "cors": "^2.8.6", "dotenv": "^17.3.1", + "drizzle-orm": "^0.45.2", "express": "^5.2.1", + "openid-client": "^6.8.2", "pdfkit": "^0.18.0", + "pg": "^8.20.0", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.1", "xlsx": "^0.18.5" }, "devDependencies": { + "@types/node": "^25.6.0", + "@types/pg": "^8.20.0", "concurrently": "^9.2.1", + "drizzle-kit": "^0.31.10", "electron": "^33.0.0", - "electron-builder": "^25.0.0" + "electron-builder": "^25.0.0", + "typescript": "^6.0.2" }, "build": { "appId": "com.benetesla.vagas-full", From 026c6aa806a8b0c69f23c0a3e71f6de06601aac5 Mon Sep 17 00:00:00 2001 From: hltav Date: Tue, 12 May 2026 11:10:57 -0300 Subject: [PATCH 2/5] Migra motor de scraping do Node.js para Go MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - migra toda a pipeline de scraping do backend Node.js para o serviço scraper-go - centraliza gerenciamento de cache dentro do serviço Go - implementa providers de cache em memória e Redis no Go - adiciona factory de cache com fallback automático para Redis - implementa helpers genéricos de cache usando generics do Go - adiciona deduplicação de requisições com singleflight - migra lógica de searchJobsWithCache para pipeline em Go - migra orquestração do scrapeAllSources para Go - adiciona normalização de cache keys e geração determinística de chaves - implementa normalização e persistência de keywords no Go - adiciona suporte a armazenamento de keywords via Redis - adiciona loader JSON para keywords padrão - cria pacote keywords com separação entre store/defaults/normalize - remove responsabilidade de scraping do backend Node.js - transforma backend Node.js em camada de API/auth/adapters - mantém compatibilidade com frontend usando adapter pattern - mantém endpoints de keywords no Node delegando persistência ao Go - melhora separação entre API de negócio e engine de scraping - melhora escalabilidade para scraping concorrente - melhora limites arquiteturais entre backend e scraper - reduz responsabilidade de processamento e memória do Node.js - prepara infraestrutura para escalar scrapers distribuídos - reorganiza módulos internos do scraper-go: - adapters - cache - dedup - inflight - keywords - pipeline - adiciona sistema de registry para adapters - melhora integração Docker do serviço scraper-go - padroniza logs e relatórios de execução - remove responsabilidades obsoletas de cache do backend Node - simplifica responsabilidades do backend para: - autenticação - módulos de usuário/domínio - gateway de API - integração com frontend - swagger/documentação Evolução arquitetural: o backend Node.js agora atua como camada de aplicação/API, enquanto o Go se tornou a engine dedicada de scraping de alta performance." --- .cspell/custom-dictionary-workspace.txt | 292 + .dockerignore | 21 + backend/Dockerfile | 18 +- backend/drizzle.config.js | 11 - backend/package.json | 18 +- backend/src/adapters/adzuna.js | 84 - backend/src/adapters/goKeywords.ts | 68 + backend/src/adapters/goScraper.ts | 38 + backend/src/adapters/greenhouse.js | 33 - backend/src/adapters/lever.js | 36 - backend/src/adapters/linkedin.js | 148 - backend/src/adapters/theMuse.js | 63 - backend/src/adapters/types/scraper.types.ts | 31 + backend/src/app.js | 27 - backend/src/browser.js | 30 - backend/src/cache/cache.js | 288 - backend/src/cache/cacheFactory.js | 14 - backend/src/cache/cacheStatus.js | 11 - backend/src/cache/memoryCache.js | 39 - backend/src/cache/redisCache.js | 103 - backend/src/cache/redisConnection.js | 59 - backend/src/config.js | 101 - backend/src/config.ts | 114 + .../db/{environment.json => keywords.json} | 9 - backend/src/db/keywordsStore.ts | 113 - backend/src/db/schema/accounts.ts | 46 +- backend/src/db/schema/index.ts | 6 - backend/src/db/types/types.ts | 16 +- backend/src/exporter.js | 154 - backend/src/interface/greenhouse.interface.js | 59 - backend/src/interface/index.js | 7 - backend/src/interface/lever.interface.js | 51 - backend/src/jobsApiApp.js | 371 - backend/src/jobsApiApp.ts | 205 + backend/src/logger.js | 11 - backend/src/logger.ts | 18 + backend/src/modules/types/user.types.ts | 5 - backend/src/pipeline/requestDedup.js | 10 - backend/src/pipeline/scrapeAllSources.js | 185 - backend/src/pipeline/searchJobsWithCache.js | 67 - backend/src/server.js | 68 - backend/src/server.ts | 31 + backend/src/sources/green_lever_builder.js | 15 - backend/src/sources/index.js | 18 - backend/src/{swagger.js => swagger.ts} | 8 +- backend/tests/integration/jobsApi.test.js | 91 +- .../unit/services/adapters/adzuna.test.js | 431 - .../unit/services/adapters/greenhouse.test.js | 189 - .../unit/services/adapters/lever.test.js | 320 - .../unit/services/adapters/linkedin.test.js | 168 - .../unit/services/adapters/theMuse.test.js | 396 - backend/tests/unit/services/browser.test.js | 53 - backend/tsconfig.json | 46 +- backend/vitest.config.js | 21 - docker-compose.infra.yml | 34 + docker-compose.yml | 38 +- frontend/Dockerfile | 10 +- frontend/src/services/jobsService.ts | 35 +- package-lock.json | 1115 ++- package.json | 8 + scraper-go/Dockerfile | 33 + scraper-go/cmd/server/adapters.go | 96 + scraper-go/cmd/server/handlers.go | 108 + scraper-go/cmd/server/main.go | 16 + scraper-go/cmd/server/server.go | 133 + scraper-go/cmd/server/summary.go | 27 + scraper-go/go.mod | 20 + scraper-go/go.sum | 99 + scraper-go/internal/adapters/adapter.go | 17 + scraper-go/internal/adapters/adzuna.go | 197 + scraper-go/internal/adapters/greehouse.go | 182 + scraper-go/internal/adapters/jooble.go | 98 + scraper-go/internal/adapters/lever.go | 157 + scraper-go/internal/adapters/linkedin.go | 229 + scraper-go/internal/adapters/registry.go | 45 + scraper-go/internal/adapters/themuse.go | 161 + scraper-go/internal/cache/cache.go | 10 + scraper-go/internal/cache/factory.go | 21 + scraper-go/internal/cache/helpers.go | 20 + scraper-go/internal/cache/memory.go | 86 + scraper-go/internal/cache/redis.go | 68 + scraper-go/internal/cache/status.go | 5 + scraper-go/internal/dedup/dedup.go | 158 + scraper-go/internal/dedup/normalize.go | 29 + scraper-go/internal/inflight/inflight.go | 28 + .../interfaces/greenhouseCompanies.json | 34 + .../internal/interfaces/leverCompanies.json | 36 + scraper-go/internal/keywords/defaults.go | 45 + scraper-go/internal/keywords/keywords.json | 170 + scraper-go/internal/keywords/normalize.go | 25 + scraper-go/internal/keywords/store.go | 81 + scraper-go/internal/models/job.go | 40 + scraper-go/internal/pipeline/cache_key.go | 34 + scraper-go/internal/pipeline/pipeline.go | 85 + scraper-go/internal/pipeline/scrape.go | 46 + scraper-go/internal/pipeline/search.go | 56 + .../PuerkitoBio/goquery/.gitattributes | 1 + .../github.com/PuerkitoBio/goquery/.gitignore | 16 + .../github.com/PuerkitoBio/goquery/LICENSE | 12 + .../github.com/PuerkitoBio/goquery/README.md | 218 + .../github.com/PuerkitoBio/goquery/array.go | 124 + .../github.com/PuerkitoBio/goquery/doc.go | 123 + .../github.com/PuerkitoBio/goquery/expand.go | 70 + .../github.com/PuerkitoBio/goquery/filter.go | 163 + .../PuerkitoBio/goquery/iteration.go | 61 + .../PuerkitoBio/goquery/manipulation.go | 679 ++ .../PuerkitoBio/goquery/property.go | 275 + .../github.com/PuerkitoBio/goquery/query.go | 49 + .../PuerkitoBio/goquery/traversal.go | 704 ++ .../github.com/PuerkitoBio/goquery/type.go | 203 + .../PuerkitoBio/goquery/utilities.go | 177 + .../andybalholm/cascadia/.travis.yml | 14 + .../github.com/andybalholm/cascadia/LICENSE | 24 + .../github.com/andybalholm/cascadia/README.md | 144 + .../github.com/andybalholm/cascadia/parser.go | 889 ++ .../andybalholm/cascadia/pseudo_classes.go | 458 + .../andybalholm/cascadia/selector.go | 586 ++ .../andybalholm/cascadia/serialize.go | 176 + .../andybalholm/cascadia/specificity.go | 26 + .../github.com/cespare/xxhash/v2/LICENSE.txt | 22 + .../github.com/cespare/xxhash/v2/README.md | 74 + .../github.com/cespare/xxhash/v2/testall.sh | 10 + .../github.com/cespare/xxhash/v2/xxhash.go | 243 + .../cespare/xxhash/v2/xxhash_amd64.s | 209 + .../cespare/xxhash/v2/xxhash_arm64.s | 183 + .../cespare/xxhash/v2/xxhash_asm.go | 15 + .../cespare/xxhash/v2/xxhash_other.go | 76 + .../cespare/xxhash/v2/xxhash_safe.go | 16 + .../cespare/xxhash/v2/xxhash_unsafe.go | 58 + .../github.com/joho/godotenv/.gitignore | 1 + .../vendor/github.com/joho/godotenv/LICENCE | 23 + .../vendor/github.com/joho/godotenv/README.md | 202 + .../github.com/joho/godotenv/godotenv.go | 228 + .../vendor/github.com/joho/godotenv/parser.go | 271 + .../github.com/redis/go-redis/v9/.gitignore | 19 + .../redis/go-redis/v9/.golangci.yml | 36 + .../redis/go-redis/v9/.prettierrc.yml | 4 + .../redis/go-redis/v9/CONTRIBUTING.md | 118 + .../github.com/redis/go-redis/v9/LICENSE | 25 + .../github.com/redis/go-redis/v9/Makefile | 122 + .../github.com/redis/go-redis/v9/README.md | 618 ++ .../redis/go-redis/v9/RELEASE-NOTES.md | 950 ++ .../github.com/redis/go-redis/v9/RELEASING.md | 146 + .../redis/go-redis/v9/acl_commands.go | 116 + .../github.com/redis/go-redis/v9/adapters.go | 118 + .../github.com/redis/go-redis/v9/auth/auth.go | 79 + .../v9/auth/reauth_credentials_listener.go | 47 + .../redis/go-redis/v9/bitmap_commands.go | 197 + .../redis/go-redis/v9/cluster_commands.go | 205 + .../github.com/redis/go-redis/v9/command.go | 8433 +++++++++++++++++ .../go-redis/v9/command_policy_resolver.go | 209 + .../github.com/redis/go-redis/v9/commands.go | 819 ++ .../redis/go-redis/v9/dial_retry_backoff.go | 39 + .../github.com/redis/go-redis/v9/doc.go | 4 + .../redis/go-redis/v9/docker-compose.yml | 176 + .../github.com/redis/go-redis/v9/error.go | 377 + .../redis/go-redis/v9/generic_commands.go | 392 + .../redis/go-redis/v9/geo_commands.go | 161 + .../redis/go-redis/v9/hash_commands.go | 626 ++ .../redis/go-redis/v9/hotkeys_commands.go | 122 + .../redis/go-redis/v9/hyperloglog_commands.go | 42 + .../redis/go-redis/v9/internal/arg.go | 58 + .../conn_reauth_credentials_listener.go | 100 + .../internal/auth/streaming/cred_listeners.go | 77 + .../v9/internal/auth/streaming/manager.go | 137 + .../v9/internal/auth/streaming/pool_hook.go | 241 + .../go-redis/v9/internal/hashtag/hashtag.go | 90 + .../v9/internal/hashtag/rendezvous.go | 54 + .../redis/go-redis/v9/internal/hscan/hscan.go | 207 + .../go-redis/v9/internal/hscan/structmap.go | 127 + .../v9/internal/interfaces/interfaces.go | 59 + .../redis/go-redis/v9/internal/internal.go | 29 + .../redis/go-redis/v9/internal/log.go | 79 + .../maintnotifications/logs/log_messages.go | 663 ++ .../redis/go-redis/v9/internal/once.go | 63 + .../go-redis/v9/internal/otel/metrics.go | 298 + .../redis/go-redis/v9/internal/pool/conn.go | 990 ++ .../go-redis/v9/internal/pool/conn_check.go | 59 + .../v9/internal/pool/conn_check_dummy.go | 20 + .../go-redis/v9/internal/pool/conn_state.go | 336 + .../redis/go-redis/v9/internal/pool/hooks.go | 165 + .../redis/go-redis/v9/internal/pool/pool.go | 1697 ++++ .../go-redis/v9/internal/pool/pool_single.go | 104 + .../go-redis/v9/internal/pool/pool_sticky.go | 214 + .../redis/go-redis/v9/internal/pool/pubsub.go | 105 + .../go-redis/v9/internal/pool/want_conn.go | 115 + .../go-redis/v9/internal/proto/reader.go | 838 ++ .../v9/internal/proto/redis_errors.go | 539 ++ .../redis/go-redis/v9/internal/proto/scan.go | 185 + .../go-redis/v9/internal/proto/writer.go | 242 + .../redis/go-redis/v9/internal/rand/rand.go | 50 + .../redis/go-redis/v9/internal/redis.go | 3 + .../v9/internal/routing/aggregator.go | 1000 ++ .../go-redis/v9/internal/routing/policy.go | 144 + .../v9/internal/routing/shard_picker.go | 57 + .../redis/go-redis/v9/internal/semaphore.go | 193 + .../redis/go-redis/v9/internal/util.go | 113 + .../go-redis/v9/internal/util/atomic_max.go | 97 + .../go-redis/v9/internal/util/atomic_min.go | 96 + .../go-redis/v9/internal/util/convert.go | 41 + .../redis/go-redis/v9/internal/util/safe.go | 11 + .../go-redis/v9/internal/util/strconv.go | 19 + .../redis/go-redis/v9/internal/util/type.go | 5 + .../redis/go-redis/v9/internal/util/unsafe.go | 17 + .../github.com/redis/go-redis/v9/iterator.go | 66 + .../github.com/redis/go-redis/v9/json.go | 650 ++ .../redis/go-redis/v9/list_commands.go | 297 + .../v9/maintnotifications/FEATURES.md | 235 + .../go-redis/v9/maintnotifications/README.md | 73 + .../v9/maintnotifications/circuit_breaker.go | 353 + .../go-redis/v9/maintnotifications/config.go | 502 + .../go-redis/v9/maintnotifications/errors.go | 76 + .../v9/maintnotifications/example_hooks.go | 101 + .../v9/maintnotifications/handoff_worker.go | 525 + .../go-redis/v9/maintnotifications/hooks.go | 60 + .../go-redis/v9/maintnotifications/manager.go | 362 + .../v9/maintnotifications/pool_hook.go | 182 + .../push_notification_handler.go | 524 + .../go-redis/v9/maintnotifications/state.go | 24 + .../github.com/redis/go-redis/v9/options.go | 822 ++ .../redis/go-redis/v9/osscluster.go | 2488 +++++ .../redis/go-redis/v9/osscluster_commands.go | 109 + .../redis/go-redis/v9/osscluster_router.go | 992 ++ .../github.com/redis/go-redis/v9/otel.go | 235 + .../github.com/redis/go-redis/v9/pipeline.go | 136 + .../redis/go-redis/v9/probabilistic.go | 1481 +++ .../github.com/redis/go-redis/v9/pubsub.go | 817 ++ .../redis/go-redis/v9/pubsub_commands.go | 88 + .../redis/go-redis/v9/push/errors.go | 176 + .../redis/go-redis/v9/push/handler.go | 14 + .../redis/go-redis/v9/push/handler_context.go | 44 + .../redis/go-redis/v9/push/processor.go | 203 + .../github.com/redis/go-redis/v9/push/push.go | 7 + .../redis/go-redis/v9/push/registry.go | 61 + .../redis/go-redis/v9/push_notifications.go | 21 + .../github.com/redis/go-redis/v9/redis.go | 1773 ++++ .../github.com/redis/go-redis/v9/result.go | 196 + .../github.com/redis/go-redis/v9/ring.go | 951 ++ .../github.com/redis/go-redis/v9/script.go | 209 + .../redis/go-redis/v9/scripting_commands.go | 220 + .../redis/go-redis/v9/search_builders.go | 858 ++ .../redis/go-redis/v9/search_commands.go | 3206 +++++++ .../github.com/redis/go-redis/v9/sentinel.go | 1253 +++ .../redis/go-redis/v9/set_commands.go | 356 + .../redis/go-redis/v9/sortedset_commands.go | 813 ++ .../redis/go-redis/v9/stream_commands.go | 601 ++ .../redis/go-redis/v9/string_commands.go | 752 ++ .../redis/go-redis/v9/timeseries_commands.go | 977 ++ .../vendor/github.com/redis/go-redis/v9/tx.go | 152 + .../github.com/redis/go-redis/v9/universal.go | 392 + .../redis/go-redis/v9/vectorset_commands.go | 415 + .../github.com/redis/go-redis/v9/version.go | 6 + .../vendor/go.uber.org/atomic/.codecov.yml | 19 + .../vendor/go.uber.org/atomic/.gitignore | 15 + .../vendor/go.uber.org/atomic/CHANGELOG.md | 127 + .../vendor/go.uber.org/atomic/LICENSE.txt | 19 + scraper-go/vendor/go.uber.org/atomic/Makefile | 79 + .../vendor/go.uber.org/atomic/README.md | 63 + scraper-go/vendor/go.uber.org/atomic/bool.go | 88 + .../vendor/go.uber.org/atomic/bool_ext.go | 53 + scraper-go/vendor/go.uber.org/atomic/doc.go | 23 + .../vendor/go.uber.org/atomic/duration.go | 89 + .../vendor/go.uber.org/atomic/duration_ext.go | 40 + scraper-go/vendor/go.uber.org/atomic/error.go | 72 + .../vendor/go.uber.org/atomic/error_ext.go | 39 + .../vendor/go.uber.org/atomic/float32.go | 77 + .../vendor/go.uber.org/atomic/float32_ext.go | 76 + .../vendor/go.uber.org/atomic/float64.go | 77 + .../vendor/go.uber.org/atomic/float64_ext.go | 76 + scraper-go/vendor/go.uber.org/atomic/gen.go | 27 + scraper-go/vendor/go.uber.org/atomic/int32.go | 109 + scraper-go/vendor/go.uber.org/atomic/int64.go | 109 + scraper-go/vendor/go.uber.org/atomic/nocmp.go | 35 + .../go.uber.org/atomic/pointer_go118.go | 31 + .../atomic/pointer_go118_pre119.go | 60 + .../go.uber.org/atomic/pointer_go119.go | 61 + .../vendor/go.uber.org/atomic/string.go | 72 + .../vendor/go.uber.org/atomic/string_ext.go | 54 + scraper-go/vendor/go.uber.org/atomic/time.go | 55 + .../vendor/go.uber.org/atomic/time_ext.go | 36 + .../vendor/go.uber.org/atomic/uint32.go | 109 + .../vendor/go.uber.org/atomic/uint64.go | 109 + .../vendor/go.uber.org/atomic/uintptr.go | 109 + .../go.uber.org/atomic/unsafe_pointer.go | 65 + scraper-go/vendor/go.uber.org/atomic/value.go | 31 + scraper-go/vendor/golang.org/x/net/LICENSE | 27 + scraper-go/vendor/golang.org/x/net/PATENTS | 22 + .../vendor/golang.org/x/net/html/atom/atom.go | 78 + .../golang.org/x/net/html/atom/table.go | 785 ++ .../vendor/golang.org/x/net/html/const.go | 111 + .../vendor/golang.org/x/net/html/doc.go | 122 + .../vendor/golang.org/x/net/html/doctype.go | 156 + .../vendor/golang.org/x/net/html/entity.go | 2253 +++++ .../vendor/golang.org/x/net/html/escape.go | 339 + .../vendor/golang.org/x/net/html/foreign.go | 221 + .../vendor/golang.org/x/net/html/iter.go | 54 + .../vendor/golang.org/x/net/html/node.go | 230 + .../golang.org/x/net/html/nodetype_string.go | 31 + .../vendor/golang.org/x/net/html/parse.go | 2489 +++++ .../vendor/golang.org/x/net/html/render.go | 293 + .../vendor/golang.org/x/net/html/token.go | 1286 +++ scraper-go/vendor/golang.org/x/sync/LICENSE | 27 + scraper-go/vendor/golang.org/x/sync/PATENTS | 22 + .../x/sync/singleflight/singleflight.go | 214 + scraper-go/vendor/golang.org/x/text/LICENSE | 27 + scraper-go/vendor/golang.org/x/text/PATENTS | 22 + .../golang.org/x/text/transform/transform.go | 709 ++ .../x/text/unicode/norm/composition.go | 512 + .../x/text/unicode/norm/forminfo.go | 289 + .../golang.org/x/text/unicode/norm/input.go | 109 + .../golang.org/x/text/unicode/norm/iter.go | 458 + .../x/text/unicode/norm/normalize.go | 610 ++ .../x/text/unicode/norm/readwriter.go | 125 + .../x/text/unicode/norm/tables15.0.0.go | 7907 ++++++++++++++++ .../x/text/unicode/norm/tables17.0.0.go | 8104 ++++++++++++++++ .../x/text/unicode/norm/transform.go | 88 + .../golang.org/x/text/unicode/norm/trie.go | 54 + scraper-go/vendor/modules.txt | 44 + 318 files changed, 89887 insertions(+), 4419 deletions(-) create mode 100644 .dockerignore delete mode 100644 backend/src/adapters/adzuna.js create mode 100644 backend/src/adapters/goKeywords.ts create mode 100644 backend/src/adapters/goScraper.ts delete mode 100644 backend/src/adapters/greenhouse.js delete mode 100644 backend/src/adapters/lever.js delete mode 100644 backend/src/adapters/linkedin.js delete mode 100644 backend/src/adapters/theMuse.js create mode 100644 backend/src/adapters/types/scraper.types.ts delete mode 100644 backend/src/app.js delete mode 100644 backend/src/browser.js delete mode 100644 backend/src/cache/cache.js delete mode 100644 backend/src/cache/cacheFactory.js delete mode 100644 backend/src/cache/cacheStatus.js delete mode 100644 backend/src/cache/memoryCache.js delete mode 100644 backend/src/cache/redisCache.js delete mode 100644 backend/src/cache/redisConnection.js delete mode 100644 backend/src/config.js create mode 100644 backend/src/config.ts rename backend/src/db/{environment.json => keywords.json} (96%) delete mode 100644 backend/src/db/keywordsStore.ts delete mode 100644 backend/src/exporter.js delete mode 100644 backend/src/interface/greenhouse.interface.js delete mode 100644 backend/src/interface/index.js delete mode 100644 backend/src/interface/lever.interface.js delete mode 100644 backend/src/jobsApiApp.js create mode 100644 backend/src/jobsApiApp.ts delete mode 100644 backend/src/logger.js create mode 100644 backend/src/logger.ts delete mode 100644 backend/src/pipeline/requestDedup.js delete mode 100644 backend/src/pipeline/scrapeAllSources.js delete mode 100644 backend/src/pipeline/searchJobsWithCache.js delete mode 100644 backend/src/server.js create mode 100644 backend/src/server.ts delete mode 100644 backend/src/sources/green_lever_builder.js delete mode 100644 backend/src/sources/index.js rename backend/src/{swagger.js => swagger.ts} (67%) delete mode 100644 backend/tests/unit/services/adapters/adzuna.test.js delete mode 100644 backend/tests/unit/services/adapters/greenhouse.test.js delete mode 100644 backend/tests/unit/services/adapters/lever.test.js delete mode 100644 backend/tests/unit/services/adapters/linkedin.test.js delete mode 100644 backend/tests/unit/services/adapters/theMuse.test.js delete mode 100644 backend/tests/unit/services/browser.test.js create mode 100644 docker-compose.infra.yml create mode 100644 scraper-go/Dockerfile create mode 100644 scraper-go/cmd/server/adapters.go create mode 100644 scraper-go/cmd/server/handlers.go create mode 100644 scraper-go/cmd/server/main.go create mode 100644 scraper-go/cmd/server/server.go create mode 100644 scraper-go/cmd/server/summary.go create mode 100644 scraper-go/go.mod create mode 100644 scraper-go/go.sum create mode 100644 scraper-go/internal/adapters/adapter.go create mode 100644 scraper-go/internal/adapters/adzuna.go create mode 100644 scraper-go/internal/adapters/greehouse.go create mode 100644 scraper-go/internal/adapters/jooble.go create mode 100644 scraper-go/internal/adapters/lever.go create mode 100644 scraper-go/internal/adapters/linkedin.go create mode 100644 scraper-go/internal/adapters/registry.go create mode 100644 scraper-go/internal/adapters/themuse.go create mode 100644 scraper-go/internal/cache/cache.go create mode 100644 scraper-go/internal/cache/factory.go create mode 100644 scraper-go/internal/cache/helpers.go create mode 100644 scraper-go/internal/cache/memory.go create mode 100644 scraper-go/internal/cache/redis.go create mode 100644 scraper-go/internal/cache/status.go create mode 100644 scraper-go/internal/dedup/dedup.go create mode 100644 scraper-go/internal/dedup/normalize.go create mode 100644 scraper-go/internal/inflight/inflight.go create mode 100644 scraper-go/internal/interfaces/greenhouseCompanies.json create mode 100644 scraper-go/internal/interfaces/leverCompanies.json create mode 100644 scraper-go/internal/keywords/defaults.go create mode 100644 scraper-go/internal/keywords/keywords.json create mode 100644 scraper-go/internal/keywords/normalize.go create mode 100644 scraper-go/internal/keywords/store.go create mode 100644 scraper-go/internal/models/job.go create mode 100644 scraper-go/internal/pipeline/cache_key.go create mode 100644 scraper-go/internal/pipeline/pipeline.go create mode 100644 scraper-go/internal/pipeline/scrape.go create mode 100644 scraper-go/internal/pipeline/search.go create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/.gitattributes create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/.gitignore create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/LICENSE create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/README.md create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/array.go create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/doc.go create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/expand.go create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/filter.go create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/iteration.go create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/manipulation.go create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/property.go create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/query.go create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/traversal.go create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/type.go create mode 100644 scraper-go/vendor/github.com/PuerkitoBio/goquery/utilities.go create mode 100644 scraper-go/vendor/github.com/andybalholm/cascadia/.travis.yml create mode 100644 scraper-go/vendor/github.com/andybalholm/cascadia/LICENSE create mode 100644 scraper-go/vendor/github.com/andybalholm/cascadia/README.md create mode 100644 scraper-go/vendor/github.com/andybalholm/cascadia/parser.go create mode 100644 scraper-go/vendor/github.com/andybalholm/cascadia/pseudo_classes.go create mode 100644 scraper-go/vendor/github.com/andybalholm/cascadia/selector.go create mode 100644 scraper-go/vendor/github.com/andybalholm/cascadia/serialize.go create mode 100644 scraper-go/vendor/github.com/andybalholm/cascadia/specificity.go create mode 100644 scraper-go/vendor/github.com/cespare/xxhash/v2/LICENSE.txt create mode 100644 scraper-go/vendor/github.com/cespare/xxhash/v2/README.md create mode 100644 scraper-go/vendor/github.com/cespare/xxhash/v2/testall.sh create mode 100644 scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash.go create mode 100644 scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s create mode 100644 scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s create mode 100644 scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_asm.go create mode 100644 scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_other.go create mode 100644 scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go create mode 100644 scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go create mode 100644 scraper-go/vendor/github.com/joho/godotenv/.gitignore create mode 100644 scraper-go/vendor/github.com/joho/godotenv/LICENCE create mode 100644 scraper-go/vendor/github.com/joho/godotenv/README.md create mode 100644 scraper-go/vendor/github.com/joho/godotenv/godotenv.go create mode 100644 scraper-go/vendor/github.com/joho/godotenv/parser.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/.gitignore create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/.golangci.yml create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/.prettierrc.yml create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/CONTRIBUTING.md create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/LICENSE create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/Makefile create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/README.md create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/RELEASE-NOTES.md create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/RELEASING.md create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/acl_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/adapters.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/auth/auth.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/auth/reauth_credentials_listener.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/bitmap_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/cluster_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/command.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/command_policy_resolver.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/dial_retry_backoff.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/doc.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/docker-compose.yml create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/error.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/generic_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/geo_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/hash_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/hotkeys_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/hyperloglog_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/arg.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/auth/streaming/conn_reauth_credentials_listener.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/auth/streaming/cred_listeners.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/auth/streaming/manager.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/auth/streaming/pool_hook.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/hashtag/hashtag.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/hashtag/rendezvous.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/hscan/hscan.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/hscan/structmap.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/interfaces/interfaces.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/internal.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/log.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/maintnotifications/logs/log_messages.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/once.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/otel/metrics.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/pool/conn.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/pool/conn_check.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/pool/conn_check_dummy.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/pool/conn_state.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/pool/hooks.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/pool/pool.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/pool/pool_single.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/pool/pool_sticky.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/pool/pubsub.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/pool/want_conn.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/proto/reader.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/proto/redis_errors.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/proto/scan.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/proto/writer.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/rand/rand.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/redis.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/routing/aggregator.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/routing/policy.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/routing/shard_picker.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/semaphore.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/util.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/util/atomic_max.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/util/atomic_min.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/util/convert.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/util/safe.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/util/strconv.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/util/type.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/internal/util/unsafe.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/iterator.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/json.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/list_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/maintnotifications/FEATURES.md create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/maintnotifications/README.md create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/maintnotifications/circuit_breaker.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/maintnotifications/config.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/maintnotifications/errors.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/maintnotifications/example_hooks.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/maintnotifications/handoff_worker.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/maintnotifications/hooks.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/maintnotifications/manager.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/maintnotifications/pool_hook.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/maintnotifications/push_notification_handler.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/maintnotifications/state.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/options.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/osscluster.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/osscluster_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/osscluster_router.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/otel.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/pipeline.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/probabilistic.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/pubsub.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/pubsub_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/push/errors.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/push/handler.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/push/handler_context.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/push/processor.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/push/push.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/push/registry.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/push_notifications.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/redis.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/result.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/ring.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/script.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/scripting_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/search_builders.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/search_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/sentinel.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/set_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/sortedset_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/stream_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/string_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/timeseries_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/tx.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/universal.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/vectorset_commands.go create mode 100644 scraper-go/vendor/github.com/redis/go-redis/v9/version.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/.codecov.yml create mode 100644 scraper-go/vendor/go.uber.org/atomic/.gitignore create mode 100644 scraper-go/vendor/go.uber.org/atomic/CHANGELOG.md create mode 100644 scraper-go/vendor/go.uber.org/atomic/LICENSE.txt create mode 100644 scraper-go/vendor/go.uber.org/atomic/Makefile create mode 100644 scraper-go/vendor/go.uber.org/atomic/README.md create mode 100644 scraper-go/vendor/go.uber.org/atomic/bool.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/bool_ext.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/doc.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/duration.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/duration_ext.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/error.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/error_ext.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/float32.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/float32_ext.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/float64.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/float64_ext.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/gen.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/int32.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/int64.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/nocmp.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/pointer_go118.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/pointer_go118_pre119.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/pointer_go119.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/string.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/string_ext.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/time.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/time_ext.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/uint32.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/uint64.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/uintptr.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/unsafe_pointer.go create mode 100644 scraper-go/vendor/go.uber.org/atomic/value.go create mode 100644 scraper-go/vendor/golang.org/x/net/LICENSE create mode 100644 scraper-go/vendor/golang.org/x/net/PATENTS create mode 100644 scraper-go/vendor/golang.org/x/net/html/atom/atom.go create mode 100644 scraper-go/vendor/golang.org/x/net/html/atom/table.go create mode 100644 scraper-go/vendor/golang.org/x/net/html/const.go create mode 100644 scraper-go/vendor/golang.org/x/net/html/doc.go create mode 100644 scraper-go/vendor/golang.org/x/net/html/doctype.go create mode 100644 scraper-go/vendor/golang.org/x/net/html/entity.go create mode 100644 scraper-go/vendor/golang.org/x/net/html/escape.go create mode 100644 scraper-go/vendor/golang.org/x/net/html/foreign.go create mode 100644 scraper-go/vendor/golang.org/x/net/html/iter.go create mode 100644 scraper-go/vendor/golang.org/x/net/html/node.go create mode 100644 scraper-go/vendor/golang.org/x/net/html/nodetype_string.go create mode 100644 scraper-go/vendor/golang.org/x/net/html/parse.go create mode 100644 scraper-go/vendor/golang.org/x/net/html/render.go create mode 100644 scraper-go/vendor/golang.org/x/net/html/token.go create mode 100644 scraper-go/vendor/golang.org/x/sync/LICENSE create mode 100644 scraper-go/vendor/golang.org/x/sync/PATENTS create mode 100644 scraper-go/vendor/golang.org/x/sync/singleflight/singleflight.go create mode 100644 scraper-go/vendor/golang.org/x/text/LICENSE create mode 100644 scraper-go/vendor/golang.org/x/text/PATENTS create mode 100644 scraper-go/vendor/golang.org/x/text/transform/transform.go create mode 100644 scraper-go/vendor/golang.org/x/text/unicode/norm/composition.go create mode 100644 scraper-go/vendor/golang.org/x/text/unicode/norm/forminfo.go create mode 100644 scraper-go/vendor/golang.org/x/text/unicode/norm/input.go create mode 100644 scraper-go/vendor/golang.org/x/text/unicode/norm/iter.go create mode 100644 scraper-go/vendor/golang.org/x/text/unicode/norm/normalize.go create mode 100644 scraper-go/vendor/golang.org/x/text/unicode/norm/readwriter.go create mode 100644 scraper-go/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go create mode 100644 scraper-go/vendor/golang.org/x/text/unicode/norm/tables17.0.0.go create mode 100644 scraper-go/vendor/golang.org/x/text/unicode/norm/transform.go create mode 100644 scraper-go/vendor/golang.org/x/text/unicode/norm/trie.go create mode 100644 scraper-go/vendor/modules.txt diff --git a/.cspell/custom-dictionary-workspace.txt b/.cspell/custom-dictionary-workspace.txt index 4bbcad6..3f79935 100644 --- a/.cspell/custom-dictionary-workspace.txt +++ b/.cspell/custom-dictionary-workspace.txt @@ -4,231 +4,523 @@ Abrir absoluto aceita acentos +acesso +achar +adicionais +Adicionamos adzuna Adzuna +agoda +Aguarda +aguentar ainda +ajuda +AKVGSK aleatório além algumas +Alguns +Alinhado +alinhados +alinhar alternativa +alvo ambiente +amigável andamento +andybalholm Anotações +aparece +apertado aplica +aproveitar +argumento asar +atingido +ativa ativas +ativos atuais +atualizadas +aumentamos +Aumentei automático +autorizadas +avisa baseado benetesla +Benevanio +binário blockdaemon +bloco +blocos +Bloqueia +bostonconsultinggroup brex Buscando +camadas +cancelamento candidatura canva captura +capturados +capturar caracteres carrega +carregadas +carregados +carregamos +cascadia +casos +Certificados +cespare chainalysis chainlink chamada chave +Chaves +checamos +chega +chegam +clientes coleta +colidem +colunas +combinações commitar compartilhado +completa +composta +concluído +concorrência conecta conectado conexao conexão +configuradas configurado +configurados conflito conhecidas +considere +constrói +contagem contém +contentful +conteúdo +continuam +controla Controle +Controles +Converte +corpo +CORREÇÃO corretamente correto criação +criamos criou +crítica +cronômetro +dedupe deduplica deduplicação +deduplicadas deduplicar +definida +Definimos defval +deixa deleta +deliveryoo +departamento +depender depois +descreve +desligando +detalhada +detalhado detecção +devolvido +diacríticos diferenciar diferentes direto +disparado disponível +distinguir +documentação +documentado +dois doordash duplicadas +duplicatas +duração Elementos emite +empresas +encerrando encontra encontrada encontradas encontrados encontrar +enriquece +enriquecer +enriquecimento +enriquecimentos +então +envia +enviado +enviou +equivale +equivalente +ernstandyoung +ernstyouth espaços específica +específico +espelha +Espelha +espelham +espelhando +espelhar esperada +esperar +estavam +estilo Estranha estranho +Estrutura +estruturados +evento +exatamente executa +executar existem existente +existirem expirou +explícito exporta exportacao exportadas +externamente +extrai falhar falhas falhou +feitas ferramentas filtra +filtrada filtro filtros +Finaliza +FINALIZADO fintech fluxo flyio fonte +formatada +Formatando formato +fornecidas +funciona +funcionando garantindo +genérico +goldmark +goquery +greehouse +groot +hintrc hotjar +HSTS huggingface +Identificação Identificador +identificar ignora +ignorado +iguais +implementa +implementados incompleto +independente indisponivel indisponível +inesperado inexistente informada informado +Inicia +iniciado +Inicializa +inicializado Iniciando início instacart +Instancia inteligente +intentando +interessa interrompe +interrupção +Intervalo Inválida isso +jobsglobal jobsglobalscraper +jooble +Jooble KHTML klarna +Krsj +lakefield +lakefieldvet +lakefieldveterinarygroup lança lançam legado +legível +leitura +letras +libera +limita linhas +listagem +localiza Localização +logar +longo lote maior +maioria maiúsculas mantém +manualmente +Mapeando marca +Mczn melhorar MELHORIA memoria memória +mescladas mesma +Mesmos +metadados +MÉTRICA +milissegundos mínimo minúsculas +modelo momentos +mondelezinternational montar Mostrando +motivo muda +mude múltiplas múltiplos +Mvgo Nenhum +nerdwallet +NGJH normaliza +normalizada +normalizado Notificações +novos +Npqgf nsis +números nunca +obrigatória +obrigatório +onde opcionais +Opcional +operação operações organização +Origem +origens +otimizado outra +pacote paginação +páginas +painel palavra palavras +paloaltonetworks +paralelas +paralelo parseia partir +pegar pela pelos +peloton permite +permitida permitindo planetscale +pôde +ponteiro +populada populado +porque positivos possível +pouco +prática +precisam +precisar +preciso +preenche +Preenchendo preenchidos +Prefere Preferências presencial +presentes +Pricebook primeira primeiro +principais +printou +Prioridade processa +Processadas processando processar +procura +propaga Publicacao +publicação +publicadas público +Puerkito +puro +quantas Quebrada +quiser reais reaproveita +receber recente reconecta recupera recuperado recuperar refatorado +registros rejeição rejeita +relativo +RELATÓRIO removendo +requisições resiliência +respeita +respeitando +respeitar +respiro Resultado resultados +RESUMO retornadas +retornamos +retornou reutiliza reutilização +riotgames robinhood +rodam +sairá salario salário +salvas scaleai segunda seguro +sejam +sendo +sensível +separa +separadas +setar silencioso simplificado +simultâneos +sinal +sobjects +sobrecarregar sobrescrever +sobrescrito +sohohouse solicitado +soql +substitui sufixo +sumário supabase Suporte +tabela talvez +temos tenta tentativa teste textuais themuse +tigra tipado titulo tiver trata tratamento travar +trimpath +trocas +TUDO typeform +Uguwk unicas únicas único +unitytechnologies +Unrk unstub usam +úteis útil +utilizando vaga validar validos vamos +várias +variável +varsitytutors vazia +VAZIAS vazio vazios +vercel verdade +versões vierem vindo +vírgula visualizar +Vueh wealthfront weightsbiases +xerrors +xxhash +ZLDS diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3133b25 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,21 @@ +# Node +node_modules +**/node_modules + +# Build outputs +frontend/dist +backend/output + +# Go +scraper-go/vendor + +# Electron +electron + +# Salesforce +.sfdx + +# Misc +.git +coverage +**/*.log \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile index 0617720..a3cb32a 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -2,10 +2,20 @@ FROM node:24-alpine WORKDIR /app +# Copia os package.json da raiz e do backend COPY package*.json ./ -RUN npm ci --omit=dev +COPY backend/package*.json ./backend/ -COPY . . -RUN mkdir -p /app/output +# Instala tudo com workspaces (tsx vem da raiz) +RUN npm ci --workspace=backend --include-workspace-root -CMD ["node", "index.js"] +# Copia o código do backend +COPY backend/ ./backend/ + +RUN mkdir -p /app/backend/output + +EXPOSE 3001 + +# Roda a partir da pasta do workspace +WORKDIR /app/backend +CMD ["npx", "tsx", "src/server.ts"] \ No newline at end of file diff --git a/backend/drizzle.config.js b/backend/drizzle.config.js index 506f0db..be6c527 100644 --- a/backend/drizzle.config.js +++ b/backend/drizzle.config.js @@ -7,14 +7,3 @@ export default { url: process.env.DATABASE_URL, }, }; - -// import { defineConfig } from "drizzle-kit"; - -// export default defineConfig({ -// schema: "./src/db/schema/index.js", -// out: "./src/db/migrations", -// dialect: "postgresql", -// dbCredentials: { -// url: process.env.DATABASE_URL, -// }, -// }); diff --git a/backend/package.json b/backend/package.json index 14e6b45..7e44099 100644 --- a/backend/package.json +++ b/backend/package.json @@ -2,21 +2,22 @@ "name": "backend", "version": "1.0.0", "description": "Backend para scraping e API de vagas do LinkedIn", - "main": "index.js", + "main": "index.ts", "type": "module", "scripts": { - "start": "node src/server.js", - "dev": "node src/server.js", - "scraper": "node index.js", - "scraper:watch": "nodemon index.js", - "api": "node src/server.js", + "start": "tsx src/server.ts", + "dev": "tsx src/server.ts", + "scraper": "tsx index.ts", + "scraper:watch": "nodemon index.ts", + "api": "tsx src/server.ts", "test": "vitest run", "test:coverage": "vitest run --coverage", "test:watch": "vitest --watch", "validate": "npm test", "db:generate": "drizzle-kit generate", "db:migrate": "drizzle-kit migrate", - "db:push": "drizzle-kit push" + "db:push": "drizzle-kit push", + "clear-cache": "tsx src/cache/clearCache.ts" }, "keywords": [ "linkedin", @@ -43,7 +44,8 @@ "redis": "^4.7.1", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.1", - "xlsx": "^0.18.5" + "xlsx": "^0.18.5", + "zod": "^4.4.3" }, "engines": { "node": ">=22.0.0" diff --git a/backend/src/adapters/adzuna.js b/backend/src/adapters/adzuna.js deleted file mode 100644 index b1b5d08..0000000 --- a/backend/src/adapters/adzuna.js +++ /dev/null @@ -1,84 +0,0 @@ -import axios from "axios"; - -function buildAdzunaUrl(keyword, config, page, options) { - const country = String(options.country).trim().toLowerCase(); - - const url = new URL( - `https://api.adzuna.com/v1/api/jobs/${country}/search/${page}`, - ); - - url.searchParams.set("app_id", options.appId); - url.searchParams.set("app_key", options.appKey); - url.searchParams.set("results_per_page", String(config.resultsPerPage || 20)); - url.searchParams.set("what", keyword); - - if (config.searchLocation) { - url.searchParams.set("where", config.searchLocation); - } - - // teste sem isso primeiro - // if (config.remoteOnly) { - // url.searchParams.set("work_from_home", "1"); - // } - - return url.toString(); -} - -export function createAdzunaAdapter(options) { - return { - sourceName: `Adzuna:${String(options.country).toLowerCase()}`, - - async search(keyword, config) { - const allJobs = []; - const maxPages = config.maxPagesPerKeyword || 3; - - for (let page = 1; page <= maxPages; page++) { - const url = buildAdzunaUrl(keyword, config, page, options); - - try { - const response = await axios.get(url, { - timeout: config.pageTimeoutMs || 15000, - headers: { - Accept: "application/json", - }, - }); - - const results = Array.isArray(response.data?.results) - ? response.data.results - : []; - - if (!results.length) { - break; - } - - const normalized = results.map((job) => ({ - source: "Adzuna", - keyword, - titulo: String(job.title || "").trim(), - empresa: String(job.company?.display_name || "").trim(), - local: String(job.location?.display_name || "").trim(), - link: String(job.redirect_url || job.url || "").trim(), - salario: - job.salary_min || job.salary_max - ? `${job.salary_min || ""}-${job.salary_max || ""}` - : "", - dataPublicacao: job.created || "", - })); - - allJobs.push(...normalized); - - await new Promise((resolve) => - setTimeout(resolve, config.waitBetweenSearchesMs || 1000), - ); - } catch (error) { - console.error("Adzuna URL:", url); - console.error("Adzuna status:", error.response?.status); - console.error("Adzuna body:", error.response?.data); - throw error; - } - } - - return allJobs; - }, - }; -} diff --git a/backend/src/adapters/goKeywords.ts b/backend/src/adapters/goKeywords.ts new file mode 100644 index 0000000..0a4b8b3 --- /dev/null +++ b/backend/src/adapters/goKeywords.ts @@ -0,0 +1,68 @@ +import { logWarn } from "../logger"; + +const GO_BASE_URL = + process.env.GO_SCRAPER_URL?.trim() || "http://scraper-go:8080"; + +type Keyword = string; + +export function normalizeKeywords(keywords: unknown): Keyword[] | null { + if (!Array.isArray(keywords)) { + return null; + } + + return [ + ...new Set( + keywords.map((item) => String(item ?? "").trim()).filter(Boolean), + ), + ]; +} + +export async function loadKeywords( + fallback: Keyword[] = [], +): Promise { + try { + const response = await fetch(`${GO_BASE_URL}/api/keywords`); + + if (!response.ok) { + return fallback; + } + + const data = await response.json(); + + return normalizeKeywords(data.keywords) ?? fallback; + } catch (error) { + logWarn("Erro ao carregar keywords do Go", { + error: (error as Error).message, + }); + + return fallback; + } +} + +export async function saveKeywords( + keywords: unknown, +): Promise { + const normalized = normalizeKeywords(keywords); + + if (normalized === null) { + return null; + } + + const response = await fetch(`${GO_BASE_URL}/api/keywords`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + keywords: normalized, + }), + }); + + if (!response.ok) { + throw new Error(`Erro ao salvar keywords no Go`); + } + + const data = await response.json(); + + return normalizeKeywords(data.keywords); +} diff --git a/backend/src/adapters/goScraper.ts b/backend/src/adapters/goScraper.ts new file mode 100644 index 0000000..03357f4 --- /dev/null +++ b/backend/src/adapters/goScraper.ts @@ -0,0 +1,38 @@ +import { logWarn } from "../logger"; +import type { ScrapeParams, ScrapeResponse } from "./types/scraper.types"; +import { + ScrapeParamsSchema, + ScrapeResponseSchema, +} from "./types/scraper.types"; + +export type { ScrapeParams, ScrapeResponse }; + +const GO_SCRAPER_URL = process.env.GO_SCRAPER_URL ?? "http://localhost:8081"; + +export async function searchJobs( + params: ScrapeParams, +): Promise { + const validatedParams = ScrapeParamsSchema.parse(params); + + const res = await fetch(`${GO_SCRAPER_URL}/scrape`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(validatedParams), + }); + + if (!res.ok) { + throw new Error(`Go scraper: ${res.status} ${res.statusText}`); + } + + const raw = await res.json(); + const parsed = ScrapeResponseSchema.safeParse(raw); + + if (!parsed.success) { + logWarn("Go scraper: resposta fora do contrato", { + error: parsed.error.message, + }); + throw new Error("Go scraper: resposta invalida"); + } + + return parsed.data; +} diff --git a/backend/src/adapters/greenhouse.js b/backend/src/adapters/greenhouse.js deleted file mode 100644 index 78c86ba..0000000 --- a/backend/src/adapters/greenhouse.js +++ /dev/null @@ -1,33 +0,0 @@ -import axios from "axios"; - -export function createGreenhouseAdapter(boardToken, companyName) { - return { - sourceName: `Green House:${companyName}`, - - async search(keyword, config) { - const url = `https://boards-api.greenhouse.io/v1/boards/${boardToken}/jobs`; - - const response = await axios.get(url, { - timeout: config.pageTimeoutMs || 15000, - }); - - const jobs = Array.isArray(response.data?.jobs) ? response.data.jobs : []; - - return jobs - .filter((job) => - String(job.title || "") - .toLowerCase() - .includes(String(keyword).toLowerCase()) - ) - .map((job) => ({ - source: "Green House", - keyword, - titulo: String(job.title || "").trim(), - empresa: companyName, - local: String(job.location?.name || "").trim(), - link: String(job.absolute_url || "").trim(), - dataPublicacao: job.updated_at || "", - })); - }, - }; -} \ No newline at end of file diff --git a/backend/src/adapters/lever.js b/backend/src/adapters/lever.js deleted file mode 100644 index 1763374..0000000 --- a/backend/src/adapters/lever.js +++ /dev/null @@ -1,36 +0,0 @@ -import axios from "axios"; - -export function createLeverAdapter(companySlug, companyName) { - return { - sourceName: `Lever:${companyName}`, - - async search(keyword, config) { - const url = `https://api.lever.co/v0/postings/${companySlug}?mode=json`; - - const response = await axios.get(url, { - timeout: config.pageTimeoutMs || 15000, - }); - - const jobs = Array.isArray(response.data) ? response.data : []; - - return jobs - .filter((job) => - String(job.text || "") - .toLowerCase() - .includes(String(keyword).toLowerCase()) - ) - .map((job) => ({ - source: "Lever", - keyword, - titulo: String(job.text || "").trim(), - empresa: companyName, - local: String(job.categories?.location || "").trim(), - link: String(job.hostedUrl || "").trim(), - modalidade: String(job.categories?.commitment || "").trim(), - dataPublicacao: job.createdAt - ? new Date(job.createdAt).toISOString() - : "", - })); - }, - }; -} \ No newline at end of file diff --git a/backend/src/adapters/linkedin.js b/backend/src/adapters/linkedin.js deleted file mode 100644 index 35d0091..0000000 --- a/backend/src/adapters/linkedin.js +++ /dev/null @@ -1,148 +0,0 @@ -import axios from "axios"; -import * as cheerio from "cheerio"; - -import { logInfo, logWarn } from "../logger.js"; - - -function buildSearchUrl(keyword, config, start = 0) { - const url = new URL( - "https://www.linkedin.com/jobs-guest/jobs/api/seeMoreJobPostings/search" - ); - - url.searchParams.set("keywords", keyword); - - if (config.searchLocation) { - url.searchParams.set("location", config.searchLocation); - } - - if (config.searchGeoId) { - url.searchParams.set("geoId", config.searchGeoId); - } - - if (config.searchLanguage) { - url.searchParams.set("lang", config.searchLanguage); - } - - if (config.remoteOnly !== false) { - url.searchParams.set("f_WT", "2"); - } - - if (config.jobTypes) { - url.searchParams.set("f_JT", config.jobTypes); - } - - if (config.timeFilter) { - url.searchParams.set("f_TPR", config.timeFilter); - } - - url.searchParams.set("start", String(start)); - - return url.toString(); -} - -async function fetchJobsChunk(keyword, config, start) { - const url = buildSearchUrl(keyword, config, start); - - const response = await axios.get(url, { - timeout: config.pageTimeoutMs, - headers: { - "user-agent": - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36", - "accept-language": "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7", - }, - }); - - const $ = cheerio.load(response.data); - const jobs = []; - - $(".base-card, .job-search-card").each((_, card) => { - const node = $(card); - - const titulo = - node.find(".base-search-card__title").text().trim() || - node.find("h3").first().text().trim() || - ""; - - const empresa = - node.find(".base-search-card__subtitle").text().trim() || - node.find("h4").first().text().trim() || - ""; - - const local = node.find(".job-search-card__location").text().trim() || ""; - - const link = - node.find("a.base-card__full-link").attr("href") || - node.find("a[href*='/jobs/view/']").attr("href") || - ""; - - jobs.push({ titulo, empresa, local, link }); - }); - - return jobs; -} - -function normalizeJob(keyword, job) { - return { - source: "LinkedIn", - keyword, - titulo: job.titulo?.trim() || "", - empresa: job.empresa?.trim() || "", - local: job.local?.trim() || "", - link: job.link?.trim() || "", - }; -} - -function dedupeJobs(jobs) { - const unique = new Map(); - - for (const job of jobs) { - const key = job.link || `${job.titulo}-${job.empresa}-${job.local}`; - if (!key || unique.has(key)) { - continue; - } - unique.set(key, job); - } - - return [...unique.values()]; -} - -export const linkedinAdapter = { - sourceName: "linkedin", - - async search(keyword, config) { - const allJobs = []; - const maxPagesPerKeyword = config.maxPagesPerKeyword || 5; - const pageStep = 25; - - logInfo(`LinkedIn: buscando vagas para "${keyword}"`); - - for (let pageIndex = 0; pageIndex < maxPagesPerKeyword; pageIndex++) { - const start = pageIndex * pageStep; - let jobs = []; - - try { - jobs = await fetchJobsChunk(keyword, config, start); - } catch (error) { - logWarn( - `LinkedIn: falha HTTP na busca para "${keyword}" (start=${start})`, - error instanceof Error ? error.message : error - ); - } - - if (jobs.length === 0) { - if (pageIndex === 0) { - logWarn(`LinkedIn: elementos de vaga não encontrados para "${keyword}"`); - } - break; - } - - allJobs.push(...jobs.map((job) => normalizeJob(keyword, job))); - - await new Promise((resolve) => - setTimeout(resolve, config.waitBetweenSearchesMs || 1000) - ); - } - - return dedupeJobs(allJobs); - }, -}; \ No newline at end of file diff --git a/backend/src/adapters/theMuse.js b/backend/src/adapters/theMuse.js deleted file mode 100644 index de3050c..0000000 --- a/backend/src/adapters/theMuse.js +++ /dev/null @@ -1,63 +0,0 @@ -import axios from "axios"; - -function buildTheMuseUrl(keyword, config, page = 1) { - const url = new URL("https://www.themuse.com/api/public/jobs"); - - url.searchParams.set("page", String(page)); - url.searchParams.set("descending", "true"); - - if (keyword) { - url.searchParams.set("category", keyword); - } - - if (config.searchLocation) { - url.searchParams.set("location", config.searchLocation); - } - - return url.toString(); -} - -export const theMuseAdapter = { - sourceName: "The Muse", - - async search(keyword, config) { - const allJobs = []; - const maxPages = config.maxPagesPerKeyword || 3; - - for (let page = 1; page <= maxPages; page++) { - const url = buildTheMuseUrl(keyword, config, page); - - const response = await axios.get(url, { - timeout: config.pageTimeoutMs || 15000, - }); - - const results = Array.isArray(response.data?.results) - ? response.data.results - : []; - - if (!results.length) { - break; - } - - const normalized = results.map((job) => ({ - source: "The Muse", - keyword, - titulo: String(job.name || "").trim(), - empresa: String(job.company?.name || "").trim(), - local: Array.isArray(job.locations) - ? job.locations.map((item) => item.name).join(", ") - : "", - link: String(job.refs?.landing_page || "").trim(), - dataPublicacao: job.publication_date || "", - })); - - allJobs.push(...normalized); - - await new Promise((resolve) => - setTimeout(resolve, config.waitBetweenSearchesMs || 1000), - ); - } - - return allJobs; - }, -}; diff --git a/backend/src/adapters/types/scraper.types.ts b/backend/src/adapters/types/scraper.types.ts new file mode 100644 index 0000000..4a63daa --- /dev/null +++ b/backend/src/adapters/types/scraper.types.ts @@ -0,0 +1,31 @@ +import { z } from "zod"; + +export const ScrapeParamsSchema = z.object({ + keywords: z.array(z.string()).min(1), + location: z.string().optional(), + sources: z.array(z.string()).optional(), + page: z.number().int().positive().optional(), + limit: z.number().int().positive().max(100).optional(), +}); + +export const JobSchema = z.object({ + id: z.string(), + title: z.string(), + company: z.string(), + location: z.string(), + url: z.string().url(), + description: z.string().optional(), + salary: z.string().optional(), + source: z.string(), + postedAt: z.string().optional(), +}); + +export const ScrapeResponseSchema = z.object({ + jobs: z.array(JobSchema), + total: z.number(), + cachedAt: z.string(), +}); + +export type ScrapeParams = z.infer; +export type Job = z.infer; +export type ScrapeResponse = z.infer; diff --git a/backend/src/app.js b/backend/src/app.js deleted file mode 100644 index 593f86e..0000000 --- a/backend/src/app.js +++ /dev/null @@ -1,27 +0,0 @@ -import { getConfig } from "./config.js"; -import { loadKeywords } from "./db/keywordsStore.js"; -import { exportToExcel, exportToPDF } from "./exporter.js"; -import { logInfo } from "./logger.js"; -import { searchJobsWithCache } from "./pipeline/searchJobsWithCache.js"; -import { sources } from "./sources/index.js"; - -export async function run() { - const baseConfig = getConfig(); - const config = { - ...baseConfig, - keywords: await loadKeywords(baseConfig.keywords), - }; - - logInfo(`Localização da busca: ${config.searchLocation}`); - logInfo(`Total de palavras-chave: ${config.keywords.length}`); - logInfo(`Total de fontes ativas: ${sources.length}`); - - const { jobs, total, fromCache } = await searchJobsWithCache(sources, config); - - logInfo(`Resultado do cache: ${fromCache ? "HIT" : "MISS"}`); - - exportToExcel(jobs, config.outputFile); - await exportToPDF(jobs, config.pdfFile); - - logInfo(`Total de vagas únicas exportadas: ${total}`); -} diff --git a/backend/src/browser.js b/backend/src/browser.js deleted file mode 100644 index d3b9b8d..0000000 --- a/backend/src/browser.js +++ /dev/null @@ -1,30 +0,0 @@ -import { existsSync } from "node:fs"; -import puppeteer from "puppeteer-core"; - -const CANDIDATE_BROWSERS = [ - process.env.CHROME_PATH, - process.env.PUPPETEER_EXECUTABLE_PATH, - "C:/Program Files/Google/Chrome/Application/chrome.exe", - "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe", - "C:/Program Files/Microsoft/Edge/Application/msedge.exe", - "C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe" -].filter(Boolean); - -export function findBrowserExecutable() { - return CANDIDATE_BROWSERS.find((path) => existsSync(path)); -} - -export async function openBrowser(config) { - const executablePath = findBrowserExecutable(); - - if (!executablePath) { - throw new Error( - "Nenhum Chrome/Edge foi encontrado. Instale o navegador ou defina CHROME_PATH." - ); - } - - return puppeteer.launch({ - headless: config.headless, - executablePath - }); -} diff --git a/backend/src/cache/cache.js b/backend/src/cache/cache.js deleted file mode 100644 index 8d3a35b..0000000 --- a/backend/src/cache/cache.js +++ /dev/null @@ -1,288 +0,0 @@ -// let redisClientPromise = null; -// let redisClientUrl = ""; -// let redisWarningShown = false; - -// const cacheStatus = { -// provider: "memory", -// configured: false, -// connected: false, -// lastError: null, -// }; - -// function readRedisUrl() { -// return process.env.REDIS_URL?.trim() || ""; -// } - -// function syncCacheStatus() { -// const redisUrl = readRedisUrl(); -// cacheStatus.configured = Boolean(redisUrl); -// cacheStatus.provider = redisUrl ? "redis" : "memory"; - -// if (!redisUrl) { -// cacheStatus.connected = false; -// cacheStatus.lastError = null; -// } -// } - -// function warnRedisFallback(message, error) { -// cacheStatus.connected = false; -// cacheStatus.lastError = error instanceof Error ? error.message : null; - -// if (redisWarningShown) { -// return; -// } - -// redisWarningShown = true; - -// const errorMessage = error instanceof Error ? error.message : ""; -// // eslint-disable-next-line no-console -// console.warn(`${message}${errorMessage ? ` (${errorMessage})` : ""}`); -// } - -// export async function getRedisClient() { -// const redisUrl = readRedisUrl(); -// syncCacheStatus(); - -// if (!redisUrl) { -// return null; -// } - -// if (redisClientUrl !== redisUrl) { -// redisClientPromise = null; -// redisClientUrl = redisUrl; -// } - -// if (!redisClientPromise) { -// redisClientPromise = import("redis") -// .then(async ({ createClient }) => { -// const client = createClient({ -// url: redisUrl, -// socket: { -// connectTimeout: 3_000, -// reconnectStrategy(retries) { -// if (retries >= 2) { -// return false; -// } - -// return Math.min((retries + 1) * 100, 500); -// }, -// }, -// }); - -// client.on("ready", () => { -// cacheStatus.connected = true; -// cacheStatus.lastError = null; -// }); - -// client.on("end", () => { -// cacheStatus.connected = false; -// }); - -// client.on("error", (error) => { -// warnRedisFallback("Redis indisponivel, usando cache em memoria.", error); -// }); - -// await client.connect(); -// return client; -// }) -// .catch((error) => { -// warnRedisFallback("Falha ao conectar no Redis, usando cache em memoria.", error); -// redisClientPromise = null; -// return null; -// }); -// } - -// return redisClientPromise; -// } - -// export function getCacheStatus() { -// syncCacheStatus(); -// return { -// ...cacheStatus, -// type: cache.constructor.name, -// }; -// } - -// export async function warmupCache() { -// syncCacheStatus(); - -// if (!cacheStatus.configured) { -// return getCacheStatus(); -// } - -// const client = await getRedisClient(); -// if (!client) { -// return getCacheStatus(); -// } - -// try { -// const pong = await client.ping(); -// cacheStatus.connected = pong === "PONG"; -// cacheStatus.lastError = cacheStatus.connected ? null : "PING sem resposta esperada"; -// } catch (error) { -// warnRedisFallback("Falha ao validar conexao com Redis.", error); -// } - -// return getCacheStatus(); -// } - -// export class MemoryCache { -// constructor() { -// this.store = new Map(); -// } - -// get(key) { -// const entry = this.store.get(key); - -// if (!entry) { -// return null; -// } - -// if (Date.now() > entry.expiresAt) { -// this.store.delete(key); -// return null; -// } - -// return entry.value; -// } - -// set(key, value, ttlMs) { -// this.store.set(key, { -// value, -// expiresAt: Date.now() + ttlMs, -// }); -// } - -// delete(key) { -// this.store.delete(key); -// } - -// clear() { -// this.store.clear(); -// } - -// has(key) { -// return this.get(key) !== null; -// } -// } - -// export class RedisCache { -// constructor(options = {}) { -// this.prefix = options.prefix || process.env.REDIS_KEY_PREFIX?.trim() || "vagas-full"; -// this.memoryFallback = new MemoryCache(); -// } - -// buildKey(key) { -// return `${this.prefix}:${key}`; -// } - -// async get(key) { -// const client = await getRedisClient(); - -// if (!client) { -// return this.memoryFallback.get(key); -// } - -// try { -// const raw = await client.get(this.buildKey(key)); -// return raw ? JSON.parse(raw) : null; -// } catch (error) { -// warnRedisFallback("Erro ao ler do Redis, usando cache em memoria.", error); -// return this.memoryFallback.get(key); -// } -// } - -// async set(key, value, ttlMs) { -// this.memoryFallback.set(key, value, ttlMs); - -// const client = await getRedisClient(); -// if (!client) { -// return; -// } - -// try { -// await client.set(this.buildKey(key), JSON.stringify(value), { -// PX: Math.max(1, Number(ttlMs) || 1), -// }); -// } catch (error) { -// warnRedisFallback("Erro ao salvar no Redis, usando cache em memoria.", error); -// } -// } - -// async delete(key) { -// this.memoryFallback.delete(key); - -// const client = await getRedisClient(); -// if (!client) { -// return; -// } - -// try { -// await client.del(this.buildKey(key)); -// } catch (error) { -// warnRedisFallback("Erro ao remover chave do Redis.", error); -// } -// } - -// async clear() { -// this.memoryFallback.clear(); - -// const client = await getRedisClient(); -// if (!client) { -// return; -// } - -// try { -// const keys = []; -// for await (const key of client.scanIterator({ MATCH: `${this.prefix}:*` })) { -// keys.push(key); -// } - -// if (keys.length > 0) { -// await client.del(keys); -// } -// } catch (error) { -// warnRedisFallback("Erro ao limpar o Redis.", error); -// } -// } - -// async has(key) { -// return (await this.get(key)) !== null; -// } -// } - -// export const cache = process.env.REDIS_URL?.trim() ? new RedisCache() : new MemoryCache(); - -//Código acima refatorado para melhor organização e reutilização de código, além de melhorias na detecção e tratamento de falhas na conexão com o Redis. -//O cache em memória agora é usado como fallback automático em caso de falhas no Redis, garantindo maior resiliência do sistema. -//Abaixo está o facade simplificado para criação do cache, além de um módulo separado para o status do cache e outro para a conexão com o Redis. - -import { cache } from "./cacheFactory.js"; -import { getCacheStatus } from "./cacheStatus.js"; -import { getRedisClient } from "./redisConnection.js"; - -export { cache, getCacheStatus }; - -export async function warmupCache() { - const status = getCacheStatus(); - - if (!status.configured) { - return getCacheStatus(); - } - - const client = await getRedisClient(); - if (!client) { - return getCacheStatus(); - } - - try { - const pong = await client.ping(); - if (pong !== "PONG") { - console.warn("Redis PING sem resposta esperada."); - } - } catch (error) { - console.warn("Falha ao validar conexão com Redis:", error.message); - } - - return getCacheStatus(); -} diff --git a/backend/src/cache/cacheFactory.js b/backend/src/cache/cacheFactory.js deleted file mode 100644 index 451ffa7..0000000 --- a/backend/src/cache/cacheFactory.js +++ /dev/null @@ -1,14 +0,0 @@ -import { MemoryCache } from "./memoryCache.js"; -import { RedisCache } from "./redisCache.js"; - -export function createCache() { - const hasRedis = Boolean(process.env.REDIS_URL?.trim()); - - if (hasRedis) { - return new RedisCache(); - } - - return new MemoryCache(); -} - -export const cache = createCache(); \ No newline at end of file diff --git a/backend/src/cache/cacheStatus.js b/backend/src/cache/cacheStatus.js deleted file mode 100644 index 58fab22..0000000 --- a/backend/src/cache/cacheStatus.js +++ /dev/null @@ -1,11 +0,0 @@ -import { isRedisConnected } from "./redisConnection.js"; - -export function getCacheStatus() { - const hasRedis = Boolean(process.env.REDIS_URL?.trim()); - - return { - provider: hasRedis ? "redis" : "memory", - configured: hasRedis, - connected: hasRedis ? isRedisConnected() : false, - }; -} \ No newline at end of file diff --git a/backend/src/cache/memoryCache.js b/backend/src/cache/memoryCache.js deleted file mode 100644 index 9d10d9e..0000000 --- a/backend/src/cache/memoryCache.js +++ /dev/null @@ -1,39 +0,0 @@ -export class MemoryCache { - constructor() { - this.store = new Map(); - } - - get(key) { - const entry = this.store.get(key); - - if (!entry) return null; - - if (Date.now() > entry.expiresAt) { - this.store.delete(key); - return null; - } - - return entry.value; - } - - set(key, value, ttlMs) { - const ttl = Math.max(1000, Number(ttlMs) || 1000); - - this.store.set(key, { - value, - expiresAt: Date.now() + ttl, - }); - } - - delete(key) { - this.store.delete(key); - } - - clear() { - this.store.clear(); - } - - has(key) { - return this.get(key) !== null; - } -} \ No newline at end of file diff --git a/backend/src/cache/redisCache.js b/backend/src/cache/redisCache.js deleted file mode 100644 index 5b44671..0000000 --- a/backend/src/cache/redisCache.js +++ /dev/null @@ -1,103 +0,0 @@ -import { MemoryCache } from "./memoryCache.js"; -import { getRedisClient } from "./redisConnection.js"; - -export class RedisCache { - constructor(options = {}) { - this.prefix = - options.prefix || process.env.REDIS_KEY_PREFIX?.trim() || "app"; - - this.memory = new MemoryCache(); - } - - buildKey(key) { - return `${this.prefix}:${key}`; - } - - safeParse(value) { - if (!value) return null; - try { - return JSON.parse(value); - } catch { - return null; - } - } - - async get(key) { - const client = await getRedisClient(); - - if (!client) { - return this.memory.get(key); - } - - try { - const raw = await client.get(this.buildKey(key)); - return this.safeParse(raw); - } catch (error) { - console.warn( - "Erro ao ler do Redis, usando cache em memória:", - error.message, - ); - return this.memory.get(key); - } - } - - async set(key, value, ttlMs) { - const ttl = Math.max(1000, Number(ttlMs) || 1000); - const client = await getRedisClient(); - - if (!client) { - this.memory.set(key, value, ttl); - return; - } - - try { - await client.set(this.buildKey(key), JSON.stringify(value), { PX: ttl }); - } catch (error) { - console.warn( - "Erro ao salvar no Redis, usando cache em memória:", - error.message, - ); - this.memory.set(key, value, ttl); - } - } - - async delete(key) { - this.memory.delete(key); - - const client = await getRedisClient(); - if (!client) return; - - try { - await client.del(this.buildKey(key)); - } catch (error) { - console.warn("Erro ao deletar chave do Redis:", error.message); - } - } - - async clear() { - this.memory.clear(); - - const client = await getRedisClient(); - if (!client) return; - - try { - const keys = []; - for await (const key of client.scanIterator({ - MATCH: `${this.prefix}:*`, - COUNT: 100, - })) { - keys.push(key); - } - - if (keys.length > 0) { - await client.del(keys); - } - } catch (error) { - console.warn("Erro ao limpar o Redis:", error.message); - } - } - - async has(key) { - return (await this.get(key)) !== null; - } -} diff --git a/backend/src/cache/redisConnection.js b/backend/src/cache/redisConnection.js deleted file mode 100644 index 45813b4..0000000 --- a/backend/src/cache/redisConnection.js +++ /dev/null @@ -1,59 +0,0 @@ -let client = null; -let currentUrl = null; -let connected = false; - -export function isRedisConnected() { - return connected; -} - -export async function getRedisClient() { - const redisUrl = process.env.REDIS_URL?.trim(); - - if (!redisUrl) return null; - - if (client && currentUrl === redisUrl) { - return client; - } - - currentUrl = redisUrl; - - try { - const { createClient } = await import("redis"); - - const newClient = createClient({ - url: redisUrl, - socket: { - connectTimeout: 3000, - reconnectStrategy(retries) { - if (retries >= 2) return false; - return Math.min((retries + 1) * 100, 500); - }, - }, - }); - - newClient.on("ready", () => { - connected = true; - }); - - newClient.on("error", () => { - connected = false; - client = null; - currentUrl = null; - }); - - newClient.on("end", () => { - connected = false; - }); - - await newClient.connect(); - - client = newClient; - return client; - } catch (error) { - console.warn("Falha ao conectar no Redis:", error.message); - client = null; - currentUrl = null; - connected = false; - return null; - } -} diff --git a/backend/src/config.js b/backend/src/config.js deleted file mode 100644 index 08da524..0000000 --- a/backend/src/config.js +++ /dev/null @@ -1,101 +0,0 @@ -const DEFAULT_KEYWORDS = [ - "Java", - "JavaScript", - "React", - "Node.js", - "Mulesoft", - "Desenvolvedor Junior", - "Desenvolvedor Pleno", -]; - -function parseBoolean(value, fallback) { - if (value === undefined) { - return fallback; - } - - const normalized = String(value).trim().toLowerCase(); - if (["1", "true", "yes", "y", "on"].includes(normalized)) { - return true; - } - if (["0", "false", "no", "n", "off"].includes(normalized)) { - return false; - } - return fallback; -} - -function parseNumber(value, fallback) { - if (value === undefined) { - return fallback; - } - - const parsed = Number(value); - return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback; -} - -function getKeywordsStorageMode() { - const configuredMode = String(process.env.KEYWORDS_STORAGE_MODE ?? "redis") - .trim() - .toLowerCase(); - - return configuredMode === "env" ? "env" : "redis"; -} - -function normalizeKeywords(keywords) { - if (!Array.isArray(keywords)) { - return null; - } - - return [...new Set(keywords.map((item) => String(item ?? "").trim()).filter(Boolean))]; -} - -function parseKeywordsFromEnv(value) { - const keywords = normalizeKeywords( - String(value ?? "") - .split(",") - .map((item) => item.trim()) - .filter(Boolean), - ); - - return keywords?.length ? keywords : null; -} - -function parseKeywords(value) { - return parseKeywordsFromEnv(value) ?? DEFAULT_KEYWORDS; -} - -function parseTimeFilter(value, fallback) { - if (!value) { - return fallback; - } - - const normalized = String(value).trim(); - return /^r\d+$/.test(normalized) ? normalized : fallback; -} - -export function getConfig() { - return { - headless: parseBoolean(process.env.HEADLESS, false), - waitBetweenSearchesMs: parseNumber(process.env.WAIT_BETWEEN_SEARCHES_MS, 5000), - pageTimeoutMs: parseNumber(process.env.PAGE_TIMEOUT_MS, 10000), - maxPagesPerKeyword: parseNumber(process.env.MAX_PAGES_PER_KEYWORD, 5), - viewport: { - width: parseNumber(process.env.VIEWPORT_WIDTH, 1280), - height: parseNumber(process.env.VIEWPORT_HEIGHT, 800), - }, - outputFile: process.env.OUTPUT_FILE || "output/vagas_remoto.xlsx", - pdfFile: process.env.PDF_FILE || "output/vagas_remoto.pdf", - searchLocation: process.env.SEARCH_LOCATION || "Brasil", - searchGeoId: process.env.SEARCH_GEO_ID || "106057199", - searchLanguage: process.env.SEARCH_LANGUAGE || "pt", - remoteOnly: parseBoolean(process.env.REMOTE_ONLY, true), - jobTypes: process.env.JOB_TYPES || "C,F", - // f_TPR examples: r86400 (24h), r604800 (7 dias), r2592000 (30 dias) - timeFilter: parseTimeFilter(process.env.TIME_FILTER, "r604800"), - keywords: parseKeywords(process.env.SEARCH_KEYWORDS), - keywordsStorageMode: getKeywordsStorageMode(), - cacheTtlMs: parseNumber(process.env.CACHE_TTL_MS, 10 * 60 * 1000), - databaseUrl: process.env.DATABASE_URL?.trim() || "", - redisUrl: process.env.REDIS_URL?.trim() || "", - redisKeyPrefix: process.env.REDIS_KEY_PREFIX?.trim() || "vagas-full", - }; -} diff --git a/backend/src/config.ts b/backend/src/config.ts new file mode 100644 index 0000000..1b4be40 --- /dev/null +++ b/backend/src/config.ts @@ -0,0 +1,114 @@ +export interface Viewport { + width: number; + height: number; +} + +export interface AppConfig { + headless: boolean; + waitBetweenSearchesMs: number; + pageTimeoutMs: number; + maxPagesPerKeyword: number; + viewport: Viewport; + outputFile: string; + pdfFile: string; + searchLocation: string; + searchGeoId: string; + searchLanguage: string; + remoteOnly: boolean; + jobTypes: string; + timeFilter: string; + keywords: string[]; + keywordsStorageMode: "redis" | "env"; + cacheTtlMs: number; + databaseUrl: string; + redisUrl: string; + redisKeyPrefix: string; +} + +const DEFAULT_KEYWORDS = [ + "Java", + "JavaScript", + "React", + "Node.js", + "Mulesoft", + "Desenvolvedor Junior", + "Desenvolvedor Pleno", +]; + +function parseBoolean(value: string | undefined, fallback: boolean): boolean { + if (value === undefined) return fallback; + const normalized = value.trim().toLowerCase(); + if (["1", "true", "yes", "y", "on"].includes(normalized)) return true; + if (["0", "false", "no", "n", "off"].includes(normalized)) return false; + return fallback; +} + +function parseNumber(value: string | undefined, fallback: number): number { + if (value === undefined) return fallback; + const parsed = Number(value); + return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback; +} + +function getKeywordsStorageMode(): "redis" | "env" { + const mode = String(process.env.KEYWORDS_STORAGE_MODE ?? "redis") + .trim() + .toLowerCase(); + return mode === "env" ? "env" : "redis"; +} + +function normalizeKeywords(keywords: string[]): string[] | null { + if (!Array.isArray(keywords)) return null; + const result = [ + ...new Set(keywords.map((k) => String(k ?? "").trim()).filter(Boolean)), + ]; + return result.length ? result : null; +} + +function parseKeywordsFromEnv(value: string | undefined): string[] | null { + return normalizeKeywords( + String(value ?? "") + .split(",") + .map((k) => k.trim()) + .filter(Boolean), + ); +} + +function parseKeywords(value: string | undefined): string[] { + return parseKeywordsFromEnv(value) ?? DEFAULT_KEYWORDS; +} + +function parseTimeFilter(value: string | undefined, fallback: string): string { + if (!value) return fallback; + const normalized = value.trim(); + return /^r\d+$/.test(normalized) ? normalized : fallback; +} + +export function getConfig(): AppConfig { + return { + headless: parseBoolean(process.env.HEADLESS, false), + waitBetweenSearchesMs: parseNumber( + process.env.WAIT_BETWEEN_SEARCHES_MS, + 5000, + ), + pageTimeoutMs: parseNumber(process.env.PAGE_TIMEOUT_MS, 10000), + maxPagesPerKeyword: parseNumber(process.env.MAX_PAGES_PER_KEYWORD, 5), + viewport: { + width: parseNumber(process.env.VIEWPORT_WIDTH, 1280), + height: parseNumber(process.env.VIEWPORT_HEIGHT, 800), + }, + outputFile: process.env.OUTPUT_FILE ?? "output/vagas_remoto.xlsx", + pdfFile: process.env.PDF_FILE ?? "output/vagas_remoto.pdf", + searchLocation: process.env.SEARCH_LOCATION ?? "Brasil", + searchGeoId: process.env.SEARCH_GEO_ID ?? "106057199", + searchLanguage: process.env.SEARCH_LANGUAGE ?? "pt", + remoteOnly: parseBoolean(process.env.REMOTE_ONLY, true), + jobTypes: process.env.JOB_TYPES ?? "C,F", + timeFilter: parseTimeFilter(process.env.TIME_FILTER, "r604800"), + keywords: parseKeywords(process.env.SEARCH_KEYWORDS), + keywordsStorageMode: getKeywordsStorageMode(), + cacheTtlMs: parseNumber(process.env.CACHE_TTL_MS, 10 * 60 * 1000), + databaseUrl: process.env.DATABASE_URL?.trim() ?? "", + redisUrl: process.env.REDIS_URL?.trim() ?? "", + redisKeyPrefix: process.env.REDIS_KEY_PREFIX?.trim() ?? "vagas-full", + }; +} diff --git a/backend/src/db/environment.json b/backend/src/db/keywords.json similarity index 96% rename from backend/src/db/environment.json rename to backend/src/db/keywords.json index 0948f5c..f311368 100644 --- a/backend/src/db/environment.json +++ b/backend/src/db/keywords.json @@ -1,12 +1,3 @@ -// { -// "KEYWORDS": [ -// "Java", -// "Spring", -// "RabbitMQ", -// "Docker" -// ] -// } - { "KEYWORDS": [ "UX Designer", diff --git a/backend/src/db/keywordsStore.ts b/backend/src/db/keywordsStore.ts deleted file mode 100644 index c00ff6d..0000000 --- a/backend/src/db/keywordsStore.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { getRedisClient } from "../cache/redisConnection"; - -type Keyword = string; - -// 🔑 key builder -function getKeywordsRedisKey(): string { - const configuredKey = process.env.KEYWORDS_REDIS_KEY?.trim(); - if (configuredKey) return configuredKey; - - const prefix = process.env.REDIS_KEY_PREFIX?.trim() || "vagas-full"; - return `${prefix}:keywords`; -} - -// 🧹 normalização -export function normalizeKeywords( - keywords: unknown -): Keyword[] | null { - if (!Array.isArray(keywords)) { - return null; - } - - return [ - ...new Set( - keywords - .map((item) => String(item ?? "").trim()) - .filter(Boolean) - ), - ]; -} - -// 🌱 env parsing -function parseKeywordsFromEnv(value: unknown): Keyword[] { - return ( - normalizeKeywords( - String(value ?? "") - .split(",") - .map((item) => item.trim()) - .filter(Boolean) - ) ?? [] - ); -} - -// 🔁 fallback inteligente -function getFallbackKeywords(fallback: Keyword[] = []): Keyword[] { - const envKeywords = parseKeywordsFromEnv(process.env.SEARCH_KEYWORDS); - - if (envKeywords.length > 0) { - return envKeywords; - } - - return normalizeKeywords(fallback) ?? []; -} - -// 📥 load (com Redis) -export async function loadKeywords( - fallback: Keyword[] = [] -): Promise { - const fallbackKeywords = getFallbackKeywords(fallback); - const client = await getRedisClient(); - - if (!client) { - return fallbackKeywords; - } - - try { - const raw = await client.get(getKeywordsRedisKey()); - if (!raw) { - return fallbackKeywords; - } - - const parsed: unknown = JSON.parse(raw); - - if (Array.isArray(parsed)) { - return normalizeKeywords(parsed) ?? []; - } - - if ( - typeof parsed === "object" && - parsed !== null && - Array.isArray((parsed as any).KEYWORDS) - ) { - return normalizeKeywords((parsed as any).KEYWORDS) ?? []; - } - } catch { - // fallback silencioso - } - - return fallbackKeywords; -} - -// 📤 save -export async function saveKeywords( - keywords: unknown -): Promise { - const normalizedKeywords = normalizeKeywords(keywords); - - if (normalizedKeywords === null) { - return null; - } - - const client = await getRedisClient(); - - if (!client) { - throw new Error("Redis indisponivel para salvar keywords."); - } - - await client.set( - getKeywordsRedisKey(), - JSON.stringify(normalizedKeywords) - ); - - return normalizedKeywords; -} \ No newline at end of file diff --git a/backend/src/db/schema/accounts.ts b/backend/src/db/schema/accounts.ts index 044ed14..b8bd588 100644 --- a/backend/src/db/schema/accounts.ts +++ b/backend/src/db/schema/accounts.ts @@ -1,43 +1,3 @@ -// import { -// pgTable, -// text, -// timestamp, -// uniqueIndex, -// uuid, -// } from "drizzle-orm/pg-core"; - -// import { users } from "./users.js"; - -// export const accounts = pgTable( -// "accounts", -// { -// id: uuid("id").defaultRandom().primaryKey(), - -// userId: uuid("user_id") -// .notNull() -// .references(() => users.id, { onDelete: "cascade" }), - -// provider: text("provider").notNull(), // google, facebook, etc. -// providerAccountId: text("provider_account_id").notNull(), - -// accessToken: text("access_token"), -// refreshToken: text("refresh_token"), - -// tokenType: text("token_type"), // 'Bearer' -// scope: text("scope"), - -// expiresAt: timestamp("expires_at"), - -// createdAt: timestamp("created_at").defaultNow().notNull(), -// }, -// (table) => ({ -// providerAccountUnique: uniqueIndex("accounts_provider_unique").on( -// table.provider, -// table.providerAccountId, -// ), -// }), -// ); - import { pgTable, text, @@ -74,11 +34,11 @@ export const accounts = pgTable( (table) => ({ providerAccountUnique: uniqueIndex("accounts_provider_unique").on( table.provider, - table.providerAccountId + table.providerAccountId, ), - }) + }), ); // 🔥 TIPOS export type Account = InferSelectModel; -export type NewAccount = InferInsertModel; \ No newline at end of file +export type NewAccount = InferInsertModel; diff --git a/backend/src/db/schema/index.ts b/backend/src/db/schema/index.ts index 8168ab8..1586d07 100644 --- a/backend/src/db/schema/index.ts +++ b/backend/src/db/schema/index.ts @@ -1,10 +1,4 @@ -// export { accounts } from "./accounts"; -// export { savedJobs } from "./savedJobs"; -// export { userPreferences } from "./userPreferences"; -// export { users } from "./users"; - export * from "./accounts"; export * from "./savedJobs"; export * from "./userPreferences"; export * from "./users"; - diff --git a/backend/src/db/types/types.ts b/backend/src/db/types/types.ts index d9f87dc..a8c274f 100644 --- a/backend/src/db/types/types.ts +++ b/backend/src/db/types/types.ts @@ -1,14 +1,8 @@ -// import { NodePgDatabase } from "drizzle-orm/node-postgres"; -// import * as schema from "../schema"; - -// export type Tx = NodePgDatabase; - -// import { db } from "../client"; - -// export type DB = typeof db; - import { ExtractTablesWithRelations } from "drizzle-orm"; -import { NodePgDatabase, NodePgQueryResultHKT } from "drizzle-orm/node-postgres"; +import { + NodePgDatabase, + NodePgQueryResultHKT, +} from "drizzle-orm/node-postgres"; import { PgTransaction } from "drizzle-orm/pg-core"; import * as schema from "../schema"; @@ -18,4 +12,4 @@ export type DB = NodePgQueryResultHKT, typeof schema, ExtractTablesWithRelations - >; \ No newline at end of file + >; diff --git a/backend/src/exporter.js b/backend/src/exporter.js deleted file mode 100644 index e60318e..0000000 --- a/backend/src/exporter.js +++ /dev/null @@ -1,154 +0,0 @@ -import { createWriteStream, mkdirSync } from "fs"; -import { dirname } from "path"; -import PDFDocument from "pdfkit"; -import XLSX from "xlsx"; -import { logInfo } from "./logger.js"; - -function ensureParentDir(filePath) { - const dir = dirname(filePath); - if (dir && dir !== ".") { - mkdirSync(dir, { recursive: true }); - } -} - -export function exportToExcel(rows, outputFile) { - ensureParentDir(outputFile); - const worksheet = XLSX.utils.json_to_sheet(rows); - const workbook = XLSX.utils.book_new(); - XLSX.utils.book_append_sheet(workbook, worksheet, "Vagas"); - XLSX.writeFile(workbook, outputFile); - - logInfo(`Arquivo gerado: ${outputFile}`); -} - -function cleanJobUrl(url) { - try { - const match = url.match(/\/jobs\/view\/[^?#]*-(\d{6,})/); - if (match) return `https://www.linkedin.com/jobs/view/${match[1]}`; - } catch {} - return url; -} - -export function exportToPDF(rows, outputFile) { - ensureParentDir(outputFile); - return new Promise((resolve, reject) => { - const doc = new PDFDocument({ - margin: 30, - size: "A4", - layout: "landscape", - }); - const stream = createWriteStream(outputFile); - - doc.pipe(stream); - stream.on("error", reject); - stream.on("finish", resolve); - - // Título - doc - .fontSize(14) - .font("Helvetica-Bold") - .text("Vagas – Brasil (Remoto)", { align: "center" }); - doc.moveDown(0.5); - doc - .fontSize(9) - .font("Helvetica") - .text(`Total: ${rows.length} vagas`, { align: "center" }); - doc.moveDown(1); - - const cols = [ - { key: "source", label: "Fonte", width: 80 }, - { key: "palavra", label: "Palavra-chave", width: 110 }, - { key: "titulo", label: "Título", width: 160 }, - { key: "empresa", label: "Empresa", width: 130 }, - { key: "local", label: "Local", width: 100 }, - { key: "link", label: "Link", width: 280 }, - ]; - - const rowH = 18; - const startX = doc.page.margins.left; - - function drawRow(rowData, isHeader) { - let x = startX; - const y = doc.y; - - if (isHeader) { - doc - .rect( - x, - y, - cols.reduce((s, c) => s + c.width, 0), - rowH, - ) - .fill("#2c3e50"); - } else { - doc - .rect( - x, - y, - cols.reduce((s, c) => s + c.width, 0), - rowH, - ) - .fillAndStroke("#f9f9f9", "#dddddd"); - } - - doc.font(isHeader ? "Helvetica-Bold" : "Helvetica").fontSize(8); - - for (const col of cols) { - const raw = String(rowData[col.key] ?? ""); - const isLink = col.key === "link" && !isHeader; - const text = isLink ? cleanJobUrl(raw) : raw; - - if (isLink) { - doc.fillColor("#0563C1").text(text, x + 3, y + 4, { - width: col.width - 6, - lineBreak: false, - }); - doc.link(x + 3, y + 4, col.width - 6, 10, text); - } else { - doc - .fillColor(isHeader ? "white" : "#222222") - .text(text, x + 3, y + 4, { - width: col.width - 6, - lineBreak: false, - ellipsis: true, - }); - } - x += col.width; - } - - doc.y = y + rowH; - } - - drawRow( - { - palavra: "Palavra-chave", - titulo: "Título", - empresa: "Empresa", - local: "Local", - link: "Link", - }, - true, - ); - - for (let i = 0; i < rows.length; i++) { - if (doc.y + rowH > doc.page.height - doc.page.margins.bottom) { - doc.addPage(); - drawRow( - { - source: "Fonte", - palavra: "Palavra-chave", - titulo: "Título", - empresa: "Empresa", - local: "Local", - link: "Link", - }, - true, - ); - } - drawRow(rows[i], false); - } - - doc.end(); - logInfo(`PDF gerado: ${outputFile}`); - }); -} diff --git a/backend/src/interface/greenhouse.interface.js b/backend/src/interface/greenhouse.interface.js deleted file mode 100644 index 2fc1732..0000000 --- a/backend/src/interface/greenhouse.interface.js +++ /dev/null @@ -1,59 +0,0 @@ -export const greenhouseCompanies = [ - // Big tech / scale-ups - "stripe", - "airbnb", - "shopify", - "notion", - "figma", - "discord", - "dropbox", - "coinbase", - "openai", - "robinhood", - - // Dev / infra / SaaS - "datadog", - "twilio", - "segment", - "elastic", - "hashicorp", - "docker", - "cloudflare", - "snowflake", - "confluent", - "verily", - - // Startups conhecidas - "brex", - "rippling", - "gusto", - "plaid", - "affirm", - "chime", - "betterment", - "wealthfront", - - // AI / data - "scaleai", - "huggingface", - "weightsbiases", - - // Web3 / fintech - "chainalysis", - "blockdaemon", - - // Produtos / ferramentas - "miro", - "canva", - "grammarly", - - // Outras - "lyft", - "doordash", - "instacart", - "asana", - "intercom", - "zapier", - "calendly", - "coursera", -]; diff --git a/backend/src/interface/index.js b/backend/src/interface/index.js deleted file mode 100644 index 6550ffa..0000000 --- a/backend/src/interface/index.js +++ /dev/null @@ -1,7 +0,0 @@ -// export * from "./greenhouse.interface.js"; -// export * from "./lever.interface.js"; - -// src/interface/index.js -export { greenhouseCompanies } from "./greenhouse.interface.js"; -export { leverCompanies } from "./lever.interface.js"; - diff --git a/backend/src/interface/lever.interface.js b/backend/src/interface/lever.interface.js deleted file mode 100644 index 663a346..0000000 --- a/backend/src/interface/lever.interface.js +++ /dev/null @@ -1,51 +0,0 @@ -export const leverCompanies = [ - // Dev tools / infra - "netlify", - "vercel", - "postman", - "sentry", - "supabase", - "planetscale", - "render", - "railway", - "flyio", - - // SaaS / produto - "typeform", - "hotjar", - "contentful", - "algolia", - "front", - "segment", // (algumas usam ambos em momentos diferentes) - - // Startups fortes - "linear", - "retool", - "loom", - "superhuman", - "pitch", - "mercury", - - // Crypto / web3 - "alchemy", - "chainlink", - "openzeppelin", - - // Data / AI - "replicate", - "twelve-labs", - - // Remote-first - "buffer", - "gitlab", - "automattic", - - // Fintech - "wise", - "klarna", - - // Outras - "glossier", - "patreon", - "robinhood", -]; \ No newline at end of file diff --git a/backend/src/jobsApiApp.js b/backend/src/jobsApiApp.js deleted file mode 100644 index 4c6a9ab..0000000 --- a/backend/src/jobsApiApp.js +++ /dev/null @@ -1,371 +0,0 @@ -import cors from "cors"; -import express from "express"; -import { existsSync, mkdirSync, readdirSync, statSync } from "fs"; -import path from "path"; -import XLSX from "xlsx"; -import { run as runScraper } from "./app.js"; -import { getCacheStatus } from "./cache/cache.js"; -import { getConfig } from "./config.js"; -import { loadKeywords, normalizeKeywords, saveKeywords } from "./db/keywordsStore.js"; -import { searchJobsWithCache } from "./pipeline/searchJobsWithCache.js"; -import { sources } from "./sources/index.js"; - -const DEFAULT_ALLOWED_ORIGINS = [ - "https://painel-vagas-lake.vercel.app", - "https://painel-vagas-m6hbzlqeh-bene-teslas-projects.vercel.app", - "https://jobsglobalscraper.ddns.net", - "http://jobsglobalscraper.ddns.net", - "http://localhost:5173", - "http://localhost:5174", -]; - -function parseAllowedOrigins(value) { - const configuredOrigins = String(value ?? "") - .split(",") - .map((origin) => origin.trim()) - .filter(Boolean); - - return new Set(configuredOrigins.length > 0 ? configuredOrigins : DEFAULT_ALLOWED_ORIGINS); -} - -/** - * @param {{ outputDir?: string }} [options] - */ -export function createJobsApiApp(options = {}) { - const outputDir = options.outputDir ?? path.resolve(process.cwd(), "output"); - const allowedOrigins = parseAllowedOrigins(process.env.CORS_ALLOWED_ORIGINS); - const corsOptions = { - origin(origin, callback) { - if (!origin || allowedOrigins.has(origin)) { - callback(null, true); - return; - } - - callback(new Error("Origin not allowed by CORS")); - }, - methods: ["GET", "POST", "OPTIONS"], - allowedHeaders: ["Content-Type"], - credentials: false, - maxAge: 86400, - }; - const app = express(); - let activeScraperRun = null; - - app.disable("x-powered-by"); - app.use(express.json({ limit: "16kb" })); - app.use((req, res, next) => { - res.setHeader("X-Content-Type-Options", "nosniff"); - res.setHeader("X-Frame-Options", "DENY"); - res.setHeader("Referrer-Policy", "strict-origin-when-cross-origin"); - res.setHeader("Permissions-Policy", "camera=(), microphone=(), geolocation=()"); - - if (req.secure || req.get("x-forwarded-proto") === "https") { - res.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains"); - } - - next(); - }); - app.use(cors(corsOptions)); - app.use(express.json()); - - function listXlsxFiles() { - // Garante que a pasta exista tambem no primeiro boot em ambiente Docker. - mkdirSync(outputDir, { recursive: true }); - - if (!existsSync(outputDir)) { - return []; - } - - return readdirSync(outputDir) - .filter((file) => file.toLowerCase().endsWith(".xlsx")) - .map((file) => { - const fullPath = path.join(outputDir, file); - const stats = statSync(fullPath); - return { - file, - fullPath, - modifiedAt: stats.mtimeMs, - size: stats.size, - }; - }) - .sort((a, b) => b.modifiedAt - a.modifiedAt); - } - - function readJobsFromFile(fullPath) { - const workbook = XLSX.readFile(fullPath); - const firstSheet = workbook.SheetNames[0]; - if (!firstSheet) { - return []; - } - - return XLSX.utils.sheet_to_json(workbook.Sheets[firstSheet], { - defval: "", - raw: false, - }); - } - - /** - * @swagger - * /api/health: - * get: - * summary: Verifica se a API está online - * tags: [System] - * responses: - * 200: - * description: API funcionando corretamente - */ - app.get("/api/health", (_req, res) => { - res.json({ - ok: true, - cache: getCacheStatus(), - }); - }); - - /** - * @swagger - * /api/jobs: - * get: - * summary: Retorna vagas a partir do arquivo mais recente ou de um arquivo específico - * tags: [Jobs] - * parameters: - * - in: query - * name: file - * schema: - * type: string - * description: Nome do arquivo .xlsx - * responses: - * 200: - * description: Lista de vagas - * 404: - * description: Arquivo não encontrado - */ - app.get("/api/jobs/files", (_req, res) => { - const files = listXlsxFiles().map(({ file, modifiedAt, size }) => ({ - file, - modifiedAt, - size, - })); - - res.json({ files }); - }); - - /** - * @swagger - * /api/jobs/search: - * get: - * summary: Busca vagas utilizando cache - * tags: [Jobs] - * parameters: - * - in: query - * name: keywords - * schema: - * type: string - * description: Lista de palavras-chave separadas por vírgula - * responses: - * 200: - * description: Resultado da busca - */ - // Novo endpoint para busca de vagas com cache - app.get("/api/jobs/search", async (req, res) => { - try { - const baseConfig = getConfig(); - const config = { - ...baseConfig, - keywords: req.query.keywords - ? String(req.query.keywords) - .split(",") - .map((k) => k.trim()) - .filter(Boolean) - : await loadKeywords(baseConfig.keywords), - }; - - const ttlMs = baseConfig.cacheTtlMs; - const result = await searchJobsWithCache(sources, config, ttlMs); - - return res.json(result); - } catch (error) { - return res.status(500).json({ - message: "Erro ao buscar vagas.", - error: error?.message || "Erro desconhecido", - }); - } - }); - - /** - * @swagger - * /api/jobs/search: - * get: - * summary: Busca vagas utilizando cache - * tags: [Jobs] - * parameters: - * - in: query - * name: keywords - * schema: - * type: string - * description: Lista de palavras-chave separadas por vírgula - * responses: - * 200: - * description: Resultado da busca - */ - app.get("/api/jobs", (req, res) => { - try { - const files = listXlsxFiles(); - if (files.length === 0) { - return res.status(404).json({ - message: "Nenhum arquivo .xlsx encontrado na pasta output.", - }); - } - - const requested = req.query.file ? String(req.query.file) : null; - const target = requested - ? files.find((item) => item.file === requested) - : files[0]; - - if (!target) { - return res.status(404).json({ - message: "Arquivo solicitado nao encontrado.", - }); - } - - const jobs = readJobsFromFile(target.fullPath); - return res.json({ - file: target.file, - modifiedAt: target.modifiedAt, - size: target.size, - total: jobs.length, - jobs, - }); - } catch (error) { - return res.status(500).json({ - message: "Erro ao ler arquivo de vagas.", - error: error?.message || "Erro desconhecido", - }); - } - }); - - /** - * @swagger - * /api/keywords: - * post: - * summary: Atualiza palavras-chave - * tags: [Keywords] - * requestBody: - * required: true - * content: - * application/json: - * schema: - * type: object - * properties: - * keywords: - * type: array - * items: - * type: string - * responses: - * 200: - * description: Keywords atualizadas - * 400: - * description: Dados inválidos - */ - app.post("/api/keywords", async (req, res) => { - try { - const normalizedKeywords = normalizeKeywords(req.body?.keywords); - - if (normalizedKeywords === null) { - return res.status(400).json({ - message: "O campo 'keywords' deve ser um array de strings.", - }); - } - - const savedKeywords = await saveKeywords(normalizedKeywords); - - return res.json({ - ok: true, - message: "Keywords atualizadas com sucesso.", - keywords: savedKeywords, - }); - } catch (error) { - return res.status(500).json({ - message: "Erro ao salvar keywords.", - error: error?.message || "Erro desconhecido", - }); - } - }); - - /** - * @swagger - * /api/keywords: - * get: - * summary: Retorna palavras-chave configuradas - * tags: [Keywords] - * responses: - * 200: - * description: Lista de keywords - */ - app.get("/api/keywords", async (_req, res) => { - try { - const keywords = await loadKeywords(getConfig().keywords); - - return res.json({ - ok: true, - keywords, - }); - } catch (error) { - return res.status(500).json({ - message: "Erro ao buscar keywords.", - error: error?.message || "Erro desconhecido", - }); - } - }); - - /** - * @swagger - * /api/scraper/run: - * post: - * summary: Executa o scraper de vagas - * tags: [Scraper] - * responses: - * 200: - * description: Scraper executado com sucesso - * 409: - * description: Scraper já em execução - */ - app.post("/api/scraper/run", async (_req, res) => { - if (activeScraperRun) { - return res.status(409).json({ - message: "O scraper ja esta em execucao.", - }); - } - - try { - activeScraperRun = runScraper(); - await activeScraperRun; - - const files = listXlsxFiles(); - return res.json({ - ok: true, - file: files[0]?.file ?? null, - modifiedAt: files[0]?.modifiedAt ?? null, - totalFiles: files.length, - }); - } catch (error) { - return res.status(500).json({ - message: "Erro ao executar o scraper.", - error: error?.message || "Erro desconhecido", - }); - } finally { - activeScraperRun = null; - } - }); - - app.use((error, _req, res, next) => { - if (error?.message === "Origin not allowed by CORS") { - return res.status(403).json({ - message: "Origem nao permitida.", - }); - } - - return next(error); - }); - - return app; -} diff --git a/backend/src/jobsApiApp.ts b/backend/src/jobsApiApp.ts new file mode 100644 index 0000000..d7af80b --- /dev/null +++ b/backend/src/jobsApiApp.ts @@ -0,0 +1,205 @@ +import cors from "cors"; +import express, { NextFunction, Request, Response } from "express"; +import { + loadKeywords, + normalizeKeywords, + saveKeywords, +} from "./adapters/goKeywords"; +import { searchJobs, type ScrapeParams } from "./adapters/goScraper"; +import { getConfig } from "./config"; +import { logWarn } from "./logger"; + +interface JobsApiAppOptions { + outputDir?: string; +} + +const DEFAULT_ALLOWED_ORIGINS = [ + "https://painel-vagas-lake.vercel.app", + "https://painel-vagas-m6hbzlqeh-bene-teslas-projects.vercel.app", + "https://jobsglobalscraper.ddns.net", + "http://jobsglobalscraper.ddns.net", + "http://localhost:5173", + "http://localhost:5174", +]; + +function parseAllowedOrigins(value: string | undefined): Set { + const configured = String(value ?? "") + .split(",") + .map((o) => o.trim()) + .filter(Boolean); + return new Set(configured.length > 0 ? configured : DEFAULT_ALLOWED_ORIGINS); +} + +export function createJobsApiApp(_options: JobsApiAppOptions = {}) { + const allowedOrigins = parseAllowedOrigins(process.env.CORS_ALLOWED_ORIGINS); + + const corsOptions: cors.CorsOptions = { + origin(origin, callback) { + if (!origin || allowedOrigins.has(origin)) return callback(null, true); + callback(new Error("Origin not allowed by CORS")); + }, + methods: ["GET", "POST", "OPTIONS"], + allowedHeaders: ["Content-Type", "Authorization"], + credentials: true, + maxAge: 86400, + }; + + const app = express(); + + app.disable("x-powered-by"); + app.use(express.json({ limit: "16kb" })); + app.use((_req: Request, res: Response, next: NextFunction) => { + res.setHeader("X-Content-Type-Options", "nosniff"); + res.setHeader("X-Frame-Options", "DENY"); + res.setHeader("Referrer-Policy", "strict-origin-when-cross-origin"); + res.setHeader( + "Permissions-Policy", + "camera=(), microphone=(), geolocation=()", + ); + next(); + }); + app.use(cors(corsOptions)); + + // ── health ──────────────────────────────────────────────────────────────── + + /** + * @swagger + * /api/health: + * get: + * summary: Verifica se a API está online + * tags: [System] + * responses: + * 200: + * description: API funcionando + */ + app.get("/api/health", (_req, res) => { + res.json({ ok: true }); + }); + + // ── jobs ────────────────────────────────────────────────────────────────── + + /** + * @swagger + * /api/jobs/search: + * get: + * summary: Busca vagas (cache e dedup gerenciados pelo Go) + * tags: [Jobs] + * parameters: + * - in: query + * name: keywords + * schema: + * type: string + * description: Palavras-chave separadas por vírgula + * responses: + * 200: + * description: Resultado da busca com jobs, total, cachedAt, fromCache + */ + app.get("/api/jobs/search", async (req: Request, res: Response) => { + try { + const baseConfig = getConfig(); + + const keywords = req.query.keywords + ? String(req.query.keywords) + .split(",") + .map((k) => k.trim()) + .filter(Boolean) + : await loadKeywords(baseConfig.keywords); + + const params: ScrapeParams = { + keywords, + location: baseConfig.searchLocation, + }; + + const result = await searchJobs(params); + return res.json(result); + } catch (error) { + logWarn("Erro ao buscar vagas", { error: (error as Error).message }); + return res.status(500).json({ + message: "Erro ao buscar vagas.", + error: (error as Error).message, + }); + } + }); + + // ── keywords ────────────────────────────────────────────────────────────── + + /** + * @swagger + * /api/keywords: + * get: + * summary: Retorna palavras-chave configuradas + * tags: [Keywords] + * responses: + * 200: + * description: Lista de keywords + */ + app.get("/api/keywords", async (_req, res) => { + try { + const keywords = await loadKeywords(getConfig().keywords); + return res.json({ ok: true, keywords }); + } catch (error) { + return res.status(500).json({ + message: "Erro ao buscar keywords.", + error: (error as Error).message, + }); + } + }); + + /** + * @swagger + * /api/keywords: + * post: + * summary: Atualiza palavras-chave + * tags: [Keywords] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * keywords: + * type: array + * items: + * type: string + * responses: + * 200: + * description: Keywords atualizadas + * 400: + * description: Dados inválidos + */ + app.post("/api/keywords", async (req: Request, res: Response) => { + try { + const normalized = normalizeKeywords(req.body?.keywords); + if (normalized === null) { + return res.status(400).json({ + message: "O campo 'keywords' deve ser um array de strings.", + }); + } + const saved = await saveKeywords(normalized); + return res.json({ + ok: true, + message: "Keywords atualizadas com sucesso.", + keywords: saved, + }); + } catch (error) { + return res.status(500).json({ + message: "Erro ao salvar keywords.", + error: (error as Error).message, + }); + } + }); + + // ── error handler ───────────────────────────────────────────────────────── + + app.use((error: Error, _req: Request, res: Response, _next: NextFunction) => { + if (error.message === "Origin not allowed by CORS") { + return res.status(403).json({ message: "Origem não permitida." }); + } + return res + .status(500) + .json({ message: "Erro interno.", error: error.message }); + }); + + return app; +} diff --git a/backend/src/logger.js b/backend/src/logger.js deleted file mode 100644 index 560bb62..0000000 --- a/backend/src/logger.js +++ /dev/null @@ -1,11 +0,0 @@ -export function logInfo(message) { - console.log(`[INFO] ${new Date().toISOString()} ${message}`); -} - -export function logWarn(message) { - console.warn(`[WARN] ${new Date().toISOString()} ${message}`); -} - -export function logError(message) { - console.error(`[ERROR] ${new Date().toISOString()} ${message}`); -} diff --git a/backend/src/logger.ts b/backend/src/logger.ts new file mode 100644 index 0000000..fae6058 --- /dev/null +++ b/backend/src/logger.ts @@ -0,0 +1,18 @@ +import pino from "pino"; + +export const logger = pino({ + level: process.env.LOG_LEVEL ?? "info", + timestamp: pino.stdTimeFunctions.isoTime, + formatters: { + level(label) { + return { level: label }; + }, + }, +}); + +export const logInfo = (msg: string, ctx?: object) => + logger.info(ctx ?? {}, msg); +export const logWarn = (msg: string, ctx?: object) => + logger.warn(ctx ?? {}, msg); +export const logError = (msg: string, ctx?: object) => + logger.error(ctx ?? {}, msg); diff --git a/backend/src/modules/types/user.types.ts b/backend/src/modules/types/user.types.ts index e307c30..111bbfa 100644 --- a/backend/src/modules/types/user.types.ts +++ b/backend/src/modules/types/user.types.ts @@ -1,8 +1,3 @@ -// import type { InferSelectModel } from "drizzle-orm"; -// import { users } from "../../db/schema"; - -// export type User = InferSelectModel; - import { InferInsertModel, InferSelectModel } from "drizzle-orm"; import { userPreferences } from "../../db/schema/userPreferences.js"; import { users } from "../../db/schema/users.js"; diff --git a/backend/src/pipeline/requestDedup.js b/backend/src/pipeline/requestDedup.js deleted file mode 100644 index 4dc0d45..0000000 --- a/backend/src/pipeline/requestDedup.js +++ /dev/null @@ -1,10 +0,0 @@ -const inflight = new Map(); - -export async function withRequestDedup(key, fn) { - if (inflight.has(key)) { - return inflight.get(key); - } - const promise = fn().finally(() => inflight.delete(key)); - inflight.set(key, promise); - return promise; -} diff --git a/backend/src/pipeline/scrapeAllSources.js b/backend/src/pipeline/scrapeAllSources.js deleted file mode 100644 index 5296814..0000000 --- a/backend/src/pipeline/scrapeAllSources.js +++ /dev/null @@ -1,185 +0,0 @@ -import { logInfo, logWarn } from "../logger.js"; - -function normalizeJob(job, keyword, adapter) { - return { - ...job, - source: job.source || adapter.sourceName || "unknown", - keyword: job.keyword || job.palavraChave || keyword, - palavraChave: job.palavraChave || job.keyword || keyword, - palavra: job.keyword || job.palavraChave || keyword, - }; -} - -function normalizeComparableText(value) { - return String(value || "") - .normalize("NFD") - .replace(/\p{Diacritic}/gu, "") - .toLowerCase() - .replace(/[^\p{L}\p{N}]+/gu, " ") - .trim() - .replace(/\s+/g, " "); -} - -function normalizeComparableUrl(value) { - const rawValue = String(value || "").trim(); - - if (!rawValue) { - return ""; - } - - try { - const parsedUrl = new URL(rawValue); - parsedUrl.search = ""; - parsedUrl.hash = ""; - return `${parsedUrl.origin}${parsedUrl.pathname}`.replace(/\/+$/, ""); - } catch { - return rawValue.split(/[?#]/)[0].replace(/\/+$/, ""); - } -} - -function getMergedKeywords(...jobs) { - return [ - ...new Set( - jobs.flatMap((job) => - [ - ...(Array.isArray(job.keywords) ? job.keywords : []), - job.keyword, - job.palavraChave, - job.palavra, - ] - .filter(Boolean) - .map((keyword) => String(keyword).trim()), - ), - ), - ]; -} - -function getMergedSources(...jobs) { - return [ - ...new Set( - jobs.flatMap((job) => - [ - ...(Array.isArray(job.sources) ? job.sources : []), - job.source, - ] - .filter(Boolean) - .map((source) => String(source).trim()), - ), - ), - ]; -} - -function pickPreferredValue(...values) { - return ( - values - .map((value) => String(value || "").trim()) - .filter(Boolean) - .sort((left, right) => right.length - left.length)[0] || "" - ); -} - -function mergeKeywords(existing, incoming) { - const mergedKeywords = getMergedKeywords(existing, incoming); - const mergedSources = getMergedSources(existing, incoming); - - return { - ...existing, - ...incoming, - titulo: pickPreferredValue(existing.titulo, incoming.titulo, existing.title, incoming.title), - empresa: pickPreferredValue(existing.empresa, incoming.empresa, existing.company, incoming.company), - local: pickPreferredValue(existing.local, incoming.local, existing.location, incoming.location), - link: pickPreferredValue(existing.link, incoming.link, existing.jobUrl, incoming.jobUrl), - jobUrl: pickPreferredValue(existing.jobUrl, incoming.jobUrl, existing.link, incoming.link), - source: mergedSources.join(", ") || existing.source || incoming.source || "", - sources: mergedSources, - keyword: mergedKeywords[0] || "", - palavraChave: mergedKeywords[0] || "", - keywords: mergedKeywords, - palavra: mergedKeywords[0] || "", - }; -} - -function buildDedupKey(job) { - const title = normalizeComparableText(job.titulo || job.title); - const company = normalizeComparableText(job.empresa || job.company); - const location = normalizeComparableText(job.local || job.location); - - if (title && company && location) { - return `identity:${title}|${company}|${location}`; - } - - if (title && company) { - return `identity:${title}|${company}|${location || "sem-local"}`; - } - - const normalizedLink = normalizeComparableUrl(job.link || job.jobUrl); - - if (normalizedLink) { - return `url:${normalizedLink}`; - } - - return `fallback:${title}|${company}|${location}|${normalizeComparableText(job.source)}`; -} - -function dedupeJobs(jobs) { - const unique = new Map(); - - for (const job of jobs) { - const key = buildDedupKey(job); - - if (unique.has(key)) { - const existing = unique.get(key); - unique.set(key, mergeKeywords(existing, job)); - continue; - } - - const mergedKeywords = getMergedKeywords(job); - const mergedSources = getMergedSources(job); - - unique.set(key, { - ...job, - source: mergedSources.join(", ") || job.source || "", - sources: mergedSources, - palavra: job.keyword || job.palavraChave || job.palavra || "", - keywords: mergedKeywords, - }); - } - - return [...unique.values()]; -} - -export async function scrapeAllSources(adapters, config) { - const allJobs = []; - - for (const adapter of adapters) { - logInfo(`Iniciando fonte: ${adapter.sourceName}`); - - for (const keyword of config.keywords) { - try { - const jobs = await adapter.search(keyword, config); - - if (!Array.isArray(jobs)) { - logWarn(`${adapter.sourceName}: retorno inválido para "${keyword}"`); - continue; - } - - const normalizedJobs = jobs.map((job) => - normalizeJob(job, keyword, adapter), - ); - - allJobs.push(...normalizedJobs); - logInfo( - `${adapter.sourceName}: ${normalizedJobs.length} vagas para "${keyword}"`, - ); - } catch (error) { - logWarn( - `${adapter.sourceName}: falha ao buscar "${keyword}" -> ${ - error instanceof Error ? error.message : "erro desconhecido" - }`, - ); - } - } - } - - return dedupeJobs(allJobs); -} diff --git a/backend/src/pipeline/searchJobsWithCache.js b/backend/src/pipeline/searchJobsWithCache.js deleted file mode 100644 index 3f58a96..0000000 --- a/backend/src/pipeline/searchJobsWithCache.js +++ /dev/null @@ -1,67 +0,0 @@ -import { cache } from "../cache/cache.js"; - -import { withRequestDedup } from "./requestDedup.js"; -import { scrapeAllSources } from "./scrapeAllSources.js"; - -function normalizeKeywords(keywords) { - return [...keywords] - .map((k) => String(k).trim().toLowerCase()) - .filter(Boolean) - .sort(); -} - -function buildCacheKey(config) { - return [ - "jobs", - normalizeKeywords(config.keywords).join(","), - String(config.searchLocation || "") - .trim() - .toLowerCase(), - String(config.searchGeoId || "").trim(), - String(config.searchLanguage || "") - .trim() - .toLowerCase(), - String(config.jobTypes || "").trim(), - String(config.timeFilter || "").trim(), - String(config.remoteOnly ? "remote" : "all"), - ].join(":"); -} - -export async function searchJobsWithCache( - adapters, - config, - ttlMs = 10 * 60 * 1000, -) { - const cacheKey = buildCacheKey(config); - - const cached = await cache.get(cacheKey); - if (cached) { - return { - ...cached, - fromCache: true, - }; - } - - return withRequestDedup(cacheKey, async () => { - const cachedInsideDedup = await cache.get(cacheKey); - if (cachedInsideDedup) { - return { - ...cachedInsideDedup, - fromCache: true, - }; - } - - const jobs = await scrapeAllSources(adapters, config); - - const result = { - jobs, - total: jobs.length, - cachedAt: new Date().toISOString(), - fromCache: false, - }; - - await cache.set(cacheKey, result, ttlMs); - - return result; - }); -} diff --git a/backend/src/server.js b/backend/src/server.js deleted file mode 100644 index c63217e..0000000 --- a/backend/src/server.js +++ /dev/null @@ -1,68 +0,0 @@ -import "dotenv/config"; -import express from "express"; -import { existsSync } from "fs"; -import path from "path"; -import { warmupCache } from "./cache/cache.js"; -import { createJobsApiApp } from "./jobsApiApp.js"; - -const PORT = Number(process.env.PORT || 3001); - -// When running inside Electron, main.js sets ELECTRON_OUTPUT_DIR to a -// writable user-data path. Fall back to the CWD-relative folder for dev/CLI. -const outputDir = process.env.ELECTRON_OUTPUT_DIR - ? process.env.ELECTRON_OUTPUT_DIR - : path.resolve(process.cwd(), "output"); - -const app = createJobsApiApp({ outputDir }); -app.set("trust proxy", 1); - -async function registerSwaggerDocs() { - try { - const [{ default: swaggerUi }, { default: swaggerSpec }] = await Promise.all([ - import("swagger-ui-express"), - import("./swagger.js"), - ]); - - app.use("/docs", swaggerUi.serve, swaggerUi.setup(swaggerSpec)); - } catch (error) { - // eslint-disable-next-line no-console - console.warn("Swagger desabilitado:", error instanceof Error ? error.message : error); - } -} - -async function startServer() { - await registerSwaggerDocs(); - - const cacheStatus = await warmupCache(); - // eslint-disable-next-line no-console - console.log( - cacheStatus.configured - ? `Cache provider: ${cacheStatus.provider} (${cacheStatus.connected ? "conectado" : "fallback em memoria"})` - : "Cache provider: memory (REDIS_URL nao configurada)", - ); - - // ── Electron static-file serving ───────────────────────────────────────── - // When ELECTRON_STATIC_DIR is set, serve the React production build so that - // the Electron window can load everything from http://localhost:. - const staticDir = process.env.ELECTRON_STATIC_DIR; - if (staticDir && existsSync(staticDir)) { - app.use(express.static(staticDir)); - - // SPA catch-all: return index.html for any non-API route so that React - // Router (if used in future) works correctly. - app.use((req, res) => { - if (req.path.startsWith("/api")) { - return res.status(404).json({ error: "Rota não encontrada." }); - } - res.sendFile(path.join(staticDir, "index.html")); - }); - } - - app.listen(PORT, () => { - // eslint-disable-next-line no-console - console.log(`API de vagas rodando em http://localhost:${PORT}`); - console.log(`Documentação da API em http://localhost:${PORT}/docs`); - }); -} - -void startServer(); diff --git a/backend/src/server.ts b/backend/src/server.ts new file mode 100644 index 0000000..227aad4 --- /dev/null +++ b/backend/src/server.ts @@ -0,0 +1,31 @@ +import "dotenv/config"; +import { createJobsApiApp } from "./jobsApiApp"; +import { logInfo, logWarn } from "./logger"; + +const PORT = Number(process.env.PORT ?? 3001); + +const app = createJobsApiApp(); +app.set("trust proxy", 1); + +async function registerSwaggerDocs(): Promise { + try { + const [{ default: swaggerUi }, { default: swaggerSpec }] = + await Promise.all([import("swagger-ui-express"), import("./swagger")]); + app.use("/docs", swaggerUi.serve, swaggerUi.setup(swaggerSpec)); + } catch (error) { + logWarn("Swagger desabilitado", { + error: error instanceof Error ? error.message : error, + }); + } +} + +async function startServer(): Promise { + await registerSwaggerDocs(); + + app.listen(PORT, () => { + logInfo(`API rodando em http://localhost:${PORT}`); + logInfo(`Documentação da API em http://localhost:${PORT}/docs`); + }); +} + +void startServer(); diff --git a/backend/src/sources/green_lever_builder.js b/backend/src/sources/green_lever_builder.js deleted file mode 100644 index 895e85c..0000000 --- a/backend/src/sources/green_lever_builder.js +++ /dev/null @@ -1,15 +0,0 @@ -import { createGreenhouseAdapter } from "../adapters/greenhouse.js"; -import { createLeverAdapter } from "../adapters/lever.js"; -import { greenhouseCompanies, leverCompanies } from "../interface/index.js"; - -export function buildAtsSources() { - const greenhouseSources = greenhouseCompanies.map((token) => - createGreenhouseAdapter(token, token), - ); - - const leverSources = leverCompanies.map((slug) => - createLeverAdapter(slug, slug), - ); - - return [...greenhouseSources, ...leverSources]; -} diff --git a/backend/src/sources/index.js b/backend/src/sources/index.js deleted file mode 100644 index 42f3f85..0000000 --- a/backend/src/sources/index.js +++ /dev/null @@ -1,18 +0,0 @@ -import { createAdzunaAdapter } from "../adapters/adzuna.js"; -import { linkedinAdapter } from "../adapters/linkedin.js"; -import { theMuseAdapter } from "../adapters/theMuse.js"; -import { buildAtsSources } from "./green_lever_builder.js"; - -export const sources = [ - linkedinAdapter, - - createAdzunaAdapter({ - appId: process.env.ADZUNA_APP_ID || "", - appKey: process.env.ADZUNA_APP_KEY || "", - country: process.env.ADZUNA_COUNTRY || "br", - }), - - theMuseAdapter, - - ...buildAtsSources(), -].filter(Boolean); diff --git a/backend/src/swagger.js b/backend/src/swagger.ts similarity index 67% rename from backend/src/swagger.js rename to backend/src/swagger.ts index fa20786..e8b81df 100644 --- a/backend/src/swagger.js +++ b/backend/src/swagger.ts @@ -1,7 +1,7 @@ -import swaggerJsdoc from "swagger-jsdoc"; import path from "path"; +import swaggerJsdoc from "swagger-jsdoc"; -const options = { +const options: swaggerJsdoc.Options = { definition: { openapi: "3.0.0", info: { @@ -9,9 +9,9 @@ const options = { version: "1.0.0", }, }, - apis: [path.resolve("src/**/*.js")], + apis: [path.resolve("src/**/*.ts")], }; const swaggerSpec = swaggerJsdoc(options); -export default swaggerSpec; \ No newline at end of file +export default swaggerSpec; diff --git a/backend/tests/integration/jobsApi.test.js b/backend/tests/integration/jobsApi.test.js index 75cf43d..a37c609 100644 --- a/backend/tests/integration/jobsApi.test.js +++ b/backend/tests/integration/jobsApi.test.js @@ -17,27 +17,31 @@ vi.mock("../../src/app.js", () => ({ run: mocks.run, })); -vi.mock("../../src/pipeline/searchJobsWithCache.js", () => ({ +vi.mock("../../src/pipeline/searchJobsWithCache.ts", () => ({ searchJobsWithCache: mocks.searchJobsWithCache, })); -vi.mock("../../src/db/keywordsStore.js", () => ({ +vi.mock("../../src/db/keywordsStore.ts", () => ({ loadKeywords: mocks.loadKeywords, normalizeKeywords: (keywords) => { if (!Array.isArray(keywords)) { return null; } - return [...new Set(keywords.map((item) => String(item ?? "").trim()).filter(Boolean))]; + return [ + ...new Set( + keywords.map((item) => String(item ?? "").trim()).filter(Boolean), + ), + ]; }, saveKeywords: mocks.saveKeywords, })); -vi.mock("../../src/cache/cache.js", () => ({ +vi.mock("../../src/cache/cache.ts", () => ({ getCacheStatus: mocks.getCacheStatus, })); -import { createJobsApiApp } from "../../src/jobsApiApp.js"; +import { createJobsApiApp } from "../../src/jobsApiApp.ts"; describe("jobs API", () => { let tmpDir; @@ -51,7 +55,12 @@ describe("jobs API", () => { fromCache: false, cachedAt: "2026-04-09T00:00:00.000Z", }); - mocks.loadKeywords.mockResolvedValue(["Java", "Spring", "RabbitMQ", "Docker"]); + mocks.loadKeywords.mockResolvedValue([ + "Java", + "Spring", + "RabbitMQ", + "Docker", + ]); mocks.saveKeywords.mockImplementation(async (keywords) => { if (process.env.KEYWORDS_STORAGE_MODE === "env") { process.env.SEARCH_KEYWORDS = keywords.join(","); @@ -93,7 +102,7 @@ describe("jobs API", () => { provider: "memory", }); }); - + it("GET /api/jobs/files retorna lista vazia sem xlsx", async () => { tmpDir = mkdtempSync(join(tmpdir(), "jobs-api-")); const app = createJobsApiApp({ outputDir: tmpDir }); @@ -109,7 +118,9 @@ describe("jobs API", () => { .set("Origin", "https://painel-vagas-lake.vercel.app") .expect(200); - expect(res.headers["access-control-allow-origin"]).toBe("https://painel-vagas-lake.vercel.app"); + expect(res.headers["access-control-allow-origin"]).toBe( + "https://painel-vagas-lake.vercel.app", + ); }); it("bloqueia origens nao autorizadas", async () => { @@ -122,12 +133,14 @@ describe("jobs API", () => { expect(res.body.message).toBe("Origem nao permitida."); }); - + it("GET /api/jobs retorna 404 quando nao ha planilhas", async () => { tmpDir = mkdtempSync(join(tmpdir(), "jobs-api-")); const app = createJobsApiApp({ outputDir: tmpDir }); const res = await request(app).get("/api/jobs").expect(404); - expect(res.body.message).toBe("Nenhum arquivo .xlsx encontrado na pasta output."); + expect(res.body.message).toBe( + "Nenhum arquivo .xlsx encontrado na pasta output.", + ); }); it("GET /api/jobs le o xlsx mais recente e retorna linhas", async () => { @@ -135,7 +148,13 @@ describe("jobs API", () => { const xlsxPath = join(tmpDir, "vagas.xlsx"); const workbook = XLSX.utils.book_new(); const sheet = XLSX.utils.json_to_sheet([ - { palavra: "React", titulo: "Dev", empresa: "ACME", local: "BR", link: "" }, + { + palavra: "React", + titulo: "Dev", + empresa: "ACME", + local: "BR", + link: "", + }, ]); XLSX.utils.book_append_sheet(workbook, sheet, "Vagas"); XLSX.writeFile(workbook, xlsxPath); @@ -154,9 +173,12 @@ describe("jobs API", () => { const sheet = XLSX.utils.json_to_sheet([{ titulo: "x" }]); XLSX.utils.book_append_sheet(workbook, sheet, "Vagas"); XLSX.writeFile(workbook, join(tmpDir, "a.xlsx")); - + const app = createJobsApiApp({ outputDir: tmpDir }); - const res = await request(app).get("/api/jobs").query({ file: "nao-existe.xlsx" }).expect(404); + const res = await request(app) + .get("/api/jobs") + .query({ file: "nao-existe.xlsx" }) + .expect(404); expect(res.body.message).toBe("Arquivo solicitado nao encontrado."); }); @@ -169,7 +191,7 @@ describe("jobs API", () => { const app = createJobsApiApp({ outputDir: tmpDir }); const res = await request(app).post("/api/scraper/run").expect(200); - + expect(mocks.run).toHaveBeenCalledTimes(1); expect(res.body.ok).toBe(true); expect(res.body.file).toBe("resultado.xlsx"); @@ -184,10 +206,10 @@ describe("jobs API", () => { new Promise((resolve) => { finishRun = resolve; }), - ); - - const app = createJobsApiApp({ outputDir: tmpDir }); - + ); + + const app = createJobsApiApp({ outputDir: tmpDir }); + const firstRequest = new Promise((resolve, reject) => { request(app) .post("/api/scraper/run") @@ -222,20 +244,23 @@ describe("jobs API", () => { expect(res.body.message).toBe("Erro ao executar o scraper."); expect(res.body.error).toBe("falha no scraper"); }); - + it("POST /api/keywords retorna 200 quando salvar as keywords", async () => { tmpDir = mkdtempSync(join(tmpdir(), "jobs-api-")); mocks.run.mockRejectedValue(new Error("Erro em pegar Keywords")); - + const app = createJobsApiApp({ outputDir: tmpDir }); - const payload = { keywords: ["Java","Spring","RabbitMQ","Docker"] }; - - const res = await request(app).post("/api/keywords").send(payload).expect(200); + const payload = { keywords: ["Java", "Spring", "RabbitMQ", "Docker"] }; + + const res = await request(app) + .post("/api/keywords") + .send(payload) + .expect(200); expect(res.body).toEqual({ ok: true, message: "Keywords atualizadas com sucesso.", - keywords: ["Java","Spring","RabbitMQ","Docker"] + keywords: ["Java", "Spring", "RabbitMQ", "Docker"], }); }); @@ -279,11 +304,10 @@ describe("jobs API", () => { it("GET /api/keywords retorna 200 com as keywords", async () => { const app = createJobsApiApp({ outputDir: tmpDir }); - const res = await request(app) - .get("/api/keywords").expect(200); + const res = await request(app).get("/api/keywords").expect(200); expect(res.body).toEqual({ ok: true, - keywords: ["Java","Spring","RabbitMQ","Docker"] + keywords: ["Java", "Spring", "RabbitMQ", "Docker"], }); }); @@ -322,7 +346,9 @@ describe("jobs API", () => { it("GET /api/jobs/search retorna 500 quando a busca falha", async () => { tmpDir = mkdtempSync(join(tmpdir(), "jobs-api-")); - mocks.searchJobsWithCache.mockRejectedValueOnce(new Error("falha na busca")); + mocks.searchJobsWithCache.mockRejectedValueOnce( + new Error("falha na busca"), + ); const app = createJobsApiApp({ outputDir: tmpDir }); const res = await request(app) @@ -345,7 +371,9 @@ describe("jobs API", () => { .send({ keywords: "Java" }) .expect(400); - expect(res.body.message).toBe("O campo 'keywords' deve ser um array de strings."); + expect(res.body.message).toBe( + "O campo 'keywords' deve ser um array de strings.", + ); }); it("POST /api/keywords retorna 500 quando saveKeywords falha", async () => { @@ -386,7 +414,8 @@ describe("jobs API", () => { .set("x-forwarded-proto", "https") .expect(200); - expect(res.headers["strict-transport-security"]).toContain("max-age=31536000"); + expect(res.headers["strict-transport-security"]).toContain( + "max-age=31536000", + ); }); - }); diff --git a/backend/tests/unit/services/adapters/adzuna.test.js b/backend/tests/unit/services/adapters/adzuna.test.js deleted file mode 100644 index 8b0b8af..0000000 --- a/backend/tests/unit/services/adapters/adzuna.test.js +++ /dev/null @@ -1,431 +0,0 @@ -// import axios from "axios"; -// import { beforeEach, describe, expect, it, vi } from "vitest"; -// import { createAdzunaAdapter } from "../../../../src/adapters/adzuna.js"; - -// vi.mock("axios"); - -// const BASE_CONFIG = { -// searchLocation: "Brasil", -// resultsPerPage: 20, -// pageTimeoutMs: 1000, -// waitBetweenSearchesMs: 0, -// maxPagesPerKeyword: 1, -// }; - -// describe("createAdzunaAdapter", () => { -// const adapter = createAdzunaAdapter({ -// country: "br", -// appId: "test-app-id", -// appKey: "test-app-key", -// }); - -// beforeEach(() => { -// vi.resetAllMocks(); -// }); - -// it("faz parse das vagas retornadas pela API", async () => { -// axios.get.mockResolvedValueOnce({ -// data: { -// results: [ -// { -// title: "Frontend React Developer", -// company: { display_name: "ACME" }, -// location: { display_name: "São Paulo" }, -// redirect_url: "https://adzuna.com/job/1", -// salary_min: 3000, -// salary_max: 5000, -// created: "2026-03-24T10:00:00Z", -// }, -// ], -// }, -// }); - -// const jobs = await adapter.search("React", BASE_CONFIG); - -// expect(axios.get).toHaveBeenCalledTimes(1); -// expect(jobs).toHaveLength(1); -// expect(jobs[0]).toMatchObject({ -// source: "Adzuna", -// keyword: "React", -// titulo: "Frontend React Developer", -// empresa: "ACME", -// local: "São Paulo", -// link: "https://adzuna.com/job/1", -// salario: "3000-5000", -// dataPublicacao: "2026-03-24T10:00:00Z", -// }); -// }); - -// it("usa url alternativa quando redirect_url não existe", async () => { -// axios.get.mockResolvedValueOnce({ -// data: { -// results: [ -// { -// title: "Node Developer", -// company: { display_name: "Beta" }, -// location: { display_name: "Remoto" }, -// url: "https://adzuna.com/job/2", -// created: "2026-03-24T11:00:00Z", -// }, -// ], -// }, -// }); - -// const jobs = await adapter.search("Node", BASE_CONFIG); - -// expect(axios.get).toHaveBeenCalledTimes(1); -// expect(jobs).toHaveLength(1); -// expect(jobs[0]).toMatchObject({ -// source: "Adzuna", -// keyword: "Node", -// titulo: "Node Developer", -// empresa: "Beta", -// local: "Remoto", -// link: "https://adzuna.com/job/2", -// salario: "", -// dataPublicacao: "2026-03-24T11:00:00Z", -// }); -// }); - -// it("busca mais de uma página enquanto houver resultados", async () => { -// axios.get -// .mockResolvedValueOnce({ -// data: { -// results: [ -// { -// title: "React Dev 1", -// company: { display_name: "ACME" }, -// location: { display_name: "SP" }, -// redirect_url: "https://adzuna.com/job/1", -// }, -// ], -// }, -// }) -// .mockResolvedValueOnce({ -// data: { -// results: [ -// { -// title: "React Dev 2", -// company: { display_name: "ACME 2" }, -// location: { display_name: "RJ" }, -// redirect_url: "https://adzuna.com/job/2", -// }, -// ], -// }, -// }); - -// const jobs = await adapter.search("React", { -// ...BASE_CONFIG, -// maxPagesPerKeyword: 2, -// }); - -// expect(axios.get).toHaveBeenCalledTimes(2); -// expect(jobs).toHaveLength(2); -// expect(jobs[0].titulo).toBe("React Dev 1"); -// expect(jobs[1].titulo).toBe("React Dev 2"); -// }); - -// it("interrompe a paginação quando a API retorna results vazio", async () => { -// axios.get -// .mockResolvedValueOnce({ -// data: { -// results: [ -// { -// title: "React Dev 1", -// company: { display_name: "ACME" }, -// location: { display_name: "SP" }, -// redirect_url: "https://adzuna.com/job/1", -// }, -// ], -// }, -// }) -// .mockResolvedValueOnce({ -// data: { -// results: [], -// }, -// }); - -// const jobs = await adapter.search("React", { -// ...BASE_CONFIG, -// maxPagesPerKeyword: 2, -// }); - -// expect(axios.get).toHaveBeenCalledTimes(2); -// expect(jobs).toHaveLength(1); -// }); - -// it("lança erro quando a requisição falha", async () => { -// axios.get.mockRejectedValueOnce(new Error("falha na API")); - -// await expect(adapter.search("React", BASE_CONFIG)).rejects.toThrow( -// "falha na API", -// ); -// }); -// }); - -import axios from "axios"; -import { beforeEach, describe, expect, it, vi } from "vitest"; -import { createAdzunaAdapter } from "../../../../src/adapters/adzuna.js"; - -vi.mock("axios"); - -const BASE_CONFIG = { - searchLocation: "Brasil", - resultsPerPage: 20, - pageTimeoutMs: 1000, - waitBetweenSearchesMs: 0, - maxPagesPerKeyword: 1, -}; - -describe("createAdzunaAdapter", () => { - const adapter = createAdzunaAdapter({ - country: "br", - appId: "test-app-id", - appKey: "test-app-key", - }); - - beforeEach(() => { - vi.resetAllMocks(); - }); - - it("faz parse das vagas retornadas pela API", async () => { - axios.get.mockResolvedValueOnce({ - data: { - results: [ - { - title: "Frontend React Developer", - company: { display_name: "ACME" }, - location: { display_name: "São Paulo" }, - redirect_url: "https://adzuna.com/job/1", - salary_min: 3000, - salary_max: 5000, - created: "2026-03-24T10:00:00Z", - }, - ], - }, - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(axios.get).toHaveBeenCalledTimes(1); - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - source: "Adzuna", - keyword: "React", - titulo: "Frontend React Developer", - empresa: "ACME", - local: "São Paulo", - link: "https://adzuna.com/job/1", - salario: "3000-5000", - dataPublicacao: "2026-03-24T10:00:00Z", - }); - }); - - it("usa url alternativa quando redirect_url não existe", async () => { - axios.get.mockResolvedValueOnce({ - data: { - results: [ - { - title: "Node Developer", - company: { display_name: "Beta" }, - location: { display_name: "Remoto" }, - url: "https://adzuna.com/job/2", - created: "2026-03-24T11:00:00Z", - }, - ], - }, - }); - - const jobs = await adapter.search("Node", BASE_CONFIG); - - expect(axios.get).toHaveBeenCalledTimes(1); - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - source: "Adzuna", - keyword: "Node", - titulo: "Node Developer", - empresa: "Beta", - local: "Remoto", - link: "https://adzuna.com/job/2", - salario: "", - dataPublicacao: "2026-03-24T11:00:00Z", - }); - }); - - it("busca mais de uma página enquanto houver resultados", async () => { - axios.get - .mockResolvedValueOnce({ - data: { - results: [ - { - title: "React Dev 1", - company: { display_name: "ACME" }, - location: { display_name: "SP" }, - redirect_url: "https://adzuna.com/job/1", - }, - ], - }, - }) - .mockResolvedValueOnce({ - data: { - results: [ - { - title: "React Dev 2", - company: { display_name: "ACME 2" }, - location: { display_name: "RJ" }, - redirect_url: "https://adzuna.com/job/2", - }, - ], - }, - }); - - const jobs = await adapter.search("React", { - ...BASE_CONFIG, - maxPagesPerKeyword: 2, - }); - - expect(axios.get).toHaveBeenCalledTimes(2); - expect(jobs).toHaveLength(2); - expect(jobs[0].titulo).toBe("React Dev 1"); - expect(jobs[1].titulo).toBe("React Dev 2"); - }); - - it("interrompe a paginação quando a API retorna results vazio", async () => { - axios.get - .mockResolvedValueOnce({ - data: { - results: [ - { - title: "React Dev 1", - company: { display_name: "ACME" }, - location: { display_name: "SP" }, - redirect_url: "https://adzuna.com/job/1", - }, - ], - }, - }) - .mockResolvedValueOnce({ - data: { - results: [], - }, - }); - - const jobs = await adapter.search("React", { - ...BASE_CONFIG, - maxPagesPerKeyword: 2, - }); - - expect(axios.get).toHaveBeenCalledTimes(2); - expect(jobs).toHaveLength(1); - }); - - it("retorna lista vazia quando results não é array", async () => { - axios.get.mockResolvedValueOnce({ - data: { - results: null, - }, - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(jobs).toEqual([]); - }); - - it("monta salário com apenas salary_min", async () => { - axios.get.mockResolvedValueOnce({ - data: { - results: [ - { - title: "React Dev", - company: { display_name: "ACME" }, - location: { display_name: "SP" }, - redirect_url: "https://adzuna.com/job/3", - salary_min: 3000, - }, - ], - }, - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0].salario).toBe("3000-"); - }); - - it("monta salário com apenas salary_max", async () => { - axios.get.mockResolvedValueOnce({ - data: { - results: [ - { - title: "React Dev", - company: { display_name: "ACME" }, - location: { display_name: "SP" }, - redirect_url: "https://adzuna.com/job/4", - salary_max: 7000, - }, - ], - }, - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0].salario).toBe("-7000"); - }); - - it("retorna campos opcionais vazios quando company, location e created não existem", async () => { - axios.get.mockResolvedValueOnce({ - data: { - results: [ - { - title: "React Dev", - redirect_url: "https://adzuna.com/job/5", - }, - ], - }, - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - titulo: "React Dev", - empresa: "", - local: "", - link: "https://adzuna.com/job/5", - salario: "", - dataPublicacao: "", - }); - }); - - it("monta a URL sem o parâmetro where quando searchLocation não é informado", async () => { - axios.get.mockResolvedValueOnce({ - data: { - results: [], - }, - }); - - await adapter.search("React", { - ...BASE_CONFIG, - searchLocation: "", - }); - - expect(axios.get).toHaveBeenCalledTimes(1); - - const calledUrl = axios.get.mock.calls[0][0]; - expect(calledUrl).toContain("/jobs/br/search/1"); - expect(calledUrl).toContain("app_id=test-app-id"); - expect(calledUrl).toContain("app_key=test-app-key"); - expect(calledUrl).toContain("results_per_page=20"); - expect(calledUrl).toContain("what=React"); - expect(calledUrl).not.toContain("where="); - }); - - it("lança erro quando a requisição falha", async () => { - axios.get.mockRejectedValueOnce(new Error("falha na API")); - - await expect(adapter.search("React", BASE_CONFIG)).rejects.toThrow( - "falha na API", - ); - }); -}); diff --git a/backend/tests/unit/services/adapters/greenhouse.test.js b/backend/tests/unit/services/adapters/greenhouse.test.js deleted file mode 100644 index 74058f7..0000000 --- a/backend/tests/unit/services/adapters/greenhouse.test.js +++ /dev/null @@ -1,189 +0,0 @@ -import axios from "axios"; -import { beforeEach, describe, expect, it, vi } from "vitest"; -import { createGreenhouseAdapter } from "../../../../src/adapters/greenhouse.js"; - -vi.mock("axios"); - -const BASE_CONFIG = { - pageTimeoutMs: 1000, -}; - -describe("createGreenhouseAdapter", () => { - const adapter = createGreenhouseAdapter("acme-board", "ACME"); - - beforeEach(() => { - vi.resetAllMocks(); - }); - - it("filtra vagas pela keyword e normaliza o retorno", async () => { - axios.get.mockResolvedValueOnce({ - data: { - jobs: [ - { - title: "Senior React Engineer", - location: { name: "São Paulo" }, - absolute_url: "https://greenhouse.io/job/1", - updated_at: "2026-03-24T10:00:00Z", - }, - { - title: "Backend Python Engineer", - location: { name: "Rio de Janeiro" }, - absolute_url: "https://greenhouse.io/job/2", - updated_at: "2026-03-24T11:00:00Z", - }, - ], - }, - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(axios.get).toHaveBeenCalledTimes(1); - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - source: "Green House", - keyword: "React", - titulo: "Senior React Engineer", - empresa: "ACME", - local: "São Paulo", - link: "https://greenhouse.io/job/1", - dataPublicacao: "2026-03-24T10:00:00Z", - }); - }); - - it("faz o filtro de keyword sem diferenciar maiúsculas e minúsculas", async () => { - axios.get.mockResolvedValueOnce({ - data: { - jobs: [ - { - title: "Senior ReAcT Engineer", - location: { name: "São Paulo" }, - absolute_url: "https://greenhouse.io/job/1", - updated_at: "2026-03-24T10:00:00Z", - }, - ], - }, - }); - - const jobs = await adapter.search("react", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - titulo: "Senior ReAcT Engineer", - keyword: "react", - }); - }); - - it("retorna lista vazia quando nenhuma vaga bate com a keyword", async () => { - axios.get.mockResolvedValueOnce({ - data: { - jobs: [ - { - title: "Backend Python Engineer", - location: { name: "Rio de Janeiro" }, - absolute_url: "https://greenhouse.io/job/2", - updated_at: "2026-03-24T11:00:00Z", - }, - ], - }, - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(jobs).toEqual([]); - }); - - it("retorna lista vazia quando jobs não é array", async () => { - axios.get.mockResolvedValueOnce({ - data: { - jobs: null, - }, - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(jobs).toEqual([]); - }); - - it("retorna local vazio quando location não existe", async () => { - axios.get.mockResolvedValueOnce({ - data: { - jobs: [ - { - title: "React Engineer", - absolute_url: "https://greenhouse.io/job/3", - updated_at: "2026-03-24T12:00:00Z", - }, - ], - }, - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - titulo: "React Engineer", - empresa: "ACME", - local: "", - link: "https://greenhouse.io/job/3", - dataPublicacao: "2026-03-24T12:00:00Z", - }); - }); - - it("retorna link vazio quando absolute_url não existe", async () => { - axios.get.mockResolvedValueOnce({ - data: { - jobs: [ - { - title: "React Engineer", - location: { name: "Remoto" }, - updated_at: "2026-03-24T13:00:00Z", - }, - ], - }, - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - titulo: "React Engineer", - empresa: "ACME", - local: "Remoto", - link: "", - dataPublicacao: "2026-03-24T13:00:00Z", - }); - }); - - it("retorna dataPublicacao vazia quando updated_at não existe", async () => { - axios.get.mockResolvedValueOnce({ - data: { - jobs: [ - { - title: "React Engineer", - location: { name: "Remoto" }, - absolute_url: "https://greenhouse.io/job/4", - }, - ], - }, - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - titulo: "React Engineer", - empresa: "ACME", - local: "Remoto", - link: "https://greenhouse.io/job/4", - dataPublicacao: "", - }); - }); - - it("lança erro quando a requisição falha", async () => { - axios.get.mockRejectedValueOnce(new Error("falha greenhouse")); - - await expect(adapter.search("React", BASE_CONFIG)).rejects.toThrow( - "falha greenhouse", - ); - }); -}); diff --git a/backend/tests/unit/services/adapters/lever.test.js b/backend/tests/unit/services/adapters/lever.test.js deleted file mode 100644 index 94ac92b..0000000 --- a/backend/tests/unit/services/adapters/lever.test.js +++ /dev/null @@ -1,320 +0,0 @@ -// import axios from "axios"; -// import { beforeEach, describe, expect, it, vi } from "vitest"; -// import { createLeverAdapter } from "../../../../src/adapters/lever.js"; - -// vi.mock("axios"); - -// const BASE_CONFIG = { -// pageTimeoutMs: 1000, -// }; - -// describe("createLeverAdapter", () => { -// const adapter = createLeverAdapter("acme", "ACME"); - -// beforeEach(() => { -// vi.clearAllMocks(); -// }); - -// it("filtra vagas pela keyword e normaliza o retorno", async () => { -// const createdAt = 1711274400000; - -// axios.get.mockResolvedValueOnce({ -// data: [ -// { -// text: "React Engineer", -// categories: { -// location: "São Paulo", -// commitment: "Full-time", -// }, -// hostedUrl: "https://lever.co/job/1", -// createdAt, -// }, -// { -// text: "Python Engineer", -// categories: { -// location: "Rio de Janeiro", -// commitment: "Part-time", -// }, -// hostedUrl: "https://lever.co/job/2", -// createdAt, -// }, -// ], -// }); - -// const jobs = await adapter.search("React", BASE_CONFIG); - -// expect(axios.get).toHaveBeenCalledTimes(1); -// expect(jobs).toHaveLength(1); -// expect(jobs[0]).toMatchObject({ -// source: "Lever", -// keyword: "React", -// titulo: "React Engineer", -// empresa: "ACME", -// local: "São Paulo", -// link: "https://lever.co/job/1", -// modalidade: "Full-time", -// dataPublicacao: new Date(createdAt).toISOString(), -// }); -// }); - -// it("retorna lista vazia quando nenhuma vaga bate com a keyword", async () => { -// axios.get.mockResolvedValueOnce({ -// data: [ -// { -// text: "Python Engineer", -// categories: { location: "RJ", commitment: "Full-time" }, -// hostedUrl: "https://lever.co/job/2", -// createdAt: 1711274400000, -// }, -// ], -// }); - -// const jobs = await adapter.search("React", BASE_CONFIG); - -// expect(jobs).toEqual([]); -// }); - -// it("retorna dataPublicacao vazia quando createdAt não existe", async () => { -// axios.get.mockResolvedValueOnce({ -// data: [ -// { -// text: "React Engineer", -// categories: { -// location: "Remoto", -// commitment: "Contract", -// }, -// hostedUrl: "https://lever.co/job/3", -// }, -// ], -// }); - -// const jobs = await adapter.search("React", BASE_CONFIG); - -// expect(jobs).toHaveLength(1); -// expect(jobs[0]).toMatchObject({ -// source: "Lever", -// keyword: "React", -// titulo: "React Engineer", -// empresa: "ACME", -// local: "Remoto", -// link: "https://lever.co/job/3", -// modalidade: "Contract", -// dataPublicacao: "", -// }); -// }); - -// it("lança erro quando a requisição falha", async () => { -// axios.get.mockRejectedValueOnce(new Error("falha lever")); - -// await expect(adapter.search("React", BASE_CONFIG)).rejects.toThrow( -// "falha lever", -// ); -// }); -// }); - -import axios from "axios"; -import { beforeEach, describe, expect, it, vi } from "vitest"; -import { createLeverAdapter } from "../../../../src/adapters/lever.js"; - -vi.mock("axios"); - -const BASE_CONFIG = { - pageTimeoutMs: 1000, -}; - -describe("createLeverAdapter", () => { - const adapter = createLeverAdapter("acme", "ACME"); - - beforeEach(() => { - vi.resetAllMocks(); - }); - - it("filtra vagas pela keyword e normaliza o retorno", async () => { - const createdAt = 1711274400000; - - axios.get.mockResolvedValueOnce({ - data: [ - { - text: "React Engineer", - categories: { - location: "São Paulo", - commitment: "Full-time", - }, - hostedUrl: "https://lever.co/job/1", - createdAt, - }, - { - text: "Python Engineer", - categories: { - location: "Rio de Janeiro", - commitment: "Part-time", - }, - hostedUrl: "https://lever.co/job/2", - createdAt, - }, - ], - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(axios.get).toHaveBeenCalledTimes(1); - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - source: "Lever", - keyword: "React", - titulo: "React Engineer", - empresa: "ACME", - local: "São Paulo", - link: "https://lever.co/job/1", - modalidade: "Full-time", - dataPublicacao: new Date(createdAt).toISOString(), - }); - }); - - it("faz o filtro sem diferenciar maiúsculas e minúsculas", async () => { - const createdAt = 1711274400000; - - axios.get.mockResolvedValueOnce({ - data: [ - { - text: "ReAcT Engineer", - categories: { - location: "São Paulo", - commitment: "Full-time", - }, - hostedUrl: "https://lever.co/job/1", - createdAt, - }, - ], - }); - - const jobs = await adapter.search("react", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - titulo: "ReAcT Engineer", - keyword: "react", - }); - }); - - it("retorna lista vazia quando nenhuma vaga bate com a keyword", async () => { - axios.get.mockResolvedValueOnce({ - data: [ - { - text: "Python Engineer", - categories: { location: "RJ", commitment: "Full-time" }, - hostedUrl: "https://lever.co/job/2", - createdAt: 1711274400000, - }, - ], - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(jobs).toEqual([]); - }); - - it("retorna lista vazia quando a resposta não é array", async () => { - axios.get.mockResolvedValueOnce({ - data: null, - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(jobs).toEqual([]); - }); - - it("retorna local e modalidade vazios quando categories não existe", async () => { - const createdAt = 1711274400000; - - axios.get.mockResolvedValueOnce({ - data: [ - { - text: "React Engineer", - hostedUrl: "https://lever.co/job/3", - createdAt, - }, - ], - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - source: "Lever", - keyword: "React", - titulo: "React Engineer", - empresa: "ACME", - local: "", - link: "https://lever.co/job/3", - modalidade: "", - dataPublicacao: new Date(createdAt).toISOString(), - }); - }); - - it("retorna link vazio quando hostedUrl não existe", async () => { - const createdAt = 1711274400000; - - axios.get.mockResolvedValueOnce({ - data: [ - { - text: "React Engineer", - categories: { - location: "Remoto", - commitment: "Contract", - }, - createdAt, - }, - ], - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - titulo: "React Engineer", - empresa: "ACME", - local: "Remoto", - link: "", - modalidade: "Contract", - dataPublicacao: new Date(createdAt).toISOString(), - }); - }); - - it("retorna dataPublicacao vazia quando createdAt não existe", async () => { - axios.get.mockResolvedValueOnce({ - data: [ - { - text: "React Engineer", - categories: { - location: "Remoto", - commitment: "Contract", - }, - hostedUrl: "https://lever.co/job/4", - }, - ], - }); - - const jobs = await adapter.search("React", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - source: "Lever", - keyword: "React", - titulo: "React Engineer", - empresa: "ACME", - local: "Remoto", - link: "https://lever.co/job/4", - modalidade: "Contract", - dataPublicacao: "", - }); - }); - - it("lança erro quando a requisição falha", async () => { - axios.get.mockRejectedValueOnce(new Error("falha lever")); - - await expect(adapter.search("React", BASE_CONFIG)).rejects.toThrow( - "falha lever", - ); - }); -}); diff --git a/backend/tests/unit/services/adapters/linkedin.test.js b/backend/tests/unit/services/adapters/linkedin.test.js deleted file mode 100644 index 2687416..0000000 --- a/backend/tests/unit/services/adapters/linkedin.test.js +++ /dev/null @@ -1,168 +0,0 @@ -import axios from "axios"; -import { beforeEach, describe, expect, it, vi } from "vitest"; - -const mocks = vi.hoisted(() => ({ - logInfoMock: vi.fn(), - logWarnMock: vi.fn(), -})); - -vi.mock("axios"); -vi.mock("../../../../src/logger.js", () => ({ - logInfo: mocks.logInfoMock, - logWarn: mocks.logWarnMock, -})); - -import { linkedinAdapter } from "../../../../src/adapters/linkedin.js"; - -const BASE_CONFIG = { - searchLocation: "Brasil", - searchGeoId: "106057199", - searchLanguage: "pt", - jobTypes: "C,F", - timeFilter: "r604800", - pageTimeoutMs: 1000, - waitBetweenSearchesMs: 0, - maxPagesPerKeyword: 1, -}; - -describe("linkedinAdapter", () => { - beforeEach(() => { - vi.resetAllMocks(); - }); - - it("faz parse e remove vagas duplicadas", async () => { - axios.get.mockResolvedValue({ - data: ` -
- -

Dev 1

-

ACME

- BR -
-
- -

Dev 1

-

ACME

- BR -
- `, - }); - - const jobs = await linkedinAdapter.search("React", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - source: "LinkedIn", - keyword: "React", - titulo: "Dev 1", - empresa: "ACME", - }); - }); - - it("retorna lista vazia quando o HTML não contém vagas", async () => { - axios.get.mockResolvedValue({ - data: `
Nenhuma vaga encontrada
`, - }); - - const jobs = await linkedinAdapter.search("React", BASE_CONFIG); - - expect(jobs).toEqual([]); - }); - - it("faz parse de cards mesmo quando um deles não tem link", async () => { - axios.get.mockResolvedValue({ - data: ` -
-

Dev sem link

-

ACME

- BR -
-
- -

Dev com link

-

BETA

- SP -
- `, - }); - - const jobs = await linkedinAdapter.search("React", BASE_CONFIG); - - expect(jobs).toHaveLength(2); - - expect(jobs[0]).toMatchObject({ - source: "LinkedIn", - keyword: "React", - titulo: "Dev sem link", - empresa: "ACME", - local: "BR", - }); - - expect(jobs[0].link ?? "").toBe(""); - - expect(jobs[1]).toMatchObject({ - source: "LinkedIn", - keyword: "React", - titulo: "Dev com link", - empresa: "BETA", - local: "SP", - link: "https://www.linkedin.com/jobs/view/2", - }); - }); - - it("faz parse mesmo com campos textuais ausentes", async () => { - axios.get.mockResolvedValue({ - data: ` -
- -
- `, - }); - - const jobs = await linkedinAdapter.search("Node", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - source: "LinkedIn", - keyword: "Node", - link: "https://www.linkedin.com/jobs/view/3", - }); - - expect(jobs[0].titulo ?? "").toBe(""); - expect(jobs[0].empresa ?? "").toBe(""); - expect(jobs[0].local ?? "").toBe(""); - }); - - it("mantém vagas diferentes quando os links são diferentes", async () => { - axios.get.mockResolvedValue({ - data: ` -
- -

Dev 10

-

ACME

- BR -
-
- -

Dev 11

-

ACME

- BR -
- `, - }); - - const jobs = await linkedinAdapter.search("React", BASE_CONFIG); - - expect(jobs).toHaveLength(2); - expect(jobs[0].link).not.toBe(jobs[1].link); - }); - - it("trata erro HTTP e retorna lista vazia", async () => { - axios.get.mockRejectedValue(new Error("falha")); - - const jobs = await linkedinAdapter.search("Node", BASE_CONFIG); - - expect(jobs).toEqual([]); - expect(mocks.logWarnMock).toHaveBeenCalled(); - }); -}); diff --git a/backend/tests/unit/services/adapters/theMuse.test.js b/backend/tests/unit/services/adapters/theMuse.test.js deleted file mode 100644 index c912d16..0000000 --- a/backend/tests/unit/services/adapters/theMuse.test.js +++ /dev/null @@ -1,396 +0,0 @@ -// import axios from "axios"; -// import { beforeEach, describe, expect, it, vi } from "vitest"; -// import { theMuseAdapter } from "../../../../src/adapters/theMuse.js"; - -// vi.mock("axios"); - -// const BASE_CONFIG = { -// searchLocation: "Brasil", -// pageTimeoutMs: 1000, -// waitBetweenSearchesMs: 0, -// maxPagesPerKeyword: 1, -// }; - -// describe("theMuseAdapter", () => { -// beforeEach(() => { -// vi.resetAllMocks(); -// }); - -// it("faz parse das vagas retornadas pela API", async () => { -// axios.get.mockResolvedValueOnce({ -// data: { -// results: [ -// { -// name: "Product Designer", -// company: { name: "ACME" }, -// locations: [{ name: "São Paulo" }, { name: "Remoto" }], -// refs: { landing_page: "https://themuse.com/job/1" }, -// publication_date: "2026-03-24T10:00:00Z", -// }, -// ], -// }, -// }); - -// const jobs = await theMuseAdapter.search("Design", BASE_CONFIG); - -// expect(axios.get).toHaveBeenCalledTimes(1); -// expect(jobs).toHaveLength(1); -// expect(jobs[0]).toMatchObject({ -// source: "The Muse", -// keyword: "Design", -// titulo: "Product Designer", -// empresa: "ACME", -// local: "São Paulo, Remoto", -// link: "https://themuse.com/job/1", -// dataPublicacao: "2026-03-24T10:00:00Z", -// }); -// }); - -// it("busca mais de uma página enquanto houver resultados", async () => { -// axios.get -// .mockResolvedValueOnce({ -// data: { -// results: [ -// { -// name: "Designer 1", -// company: { name: "ACME" }, -// locations: [{ name: "SP" }], -// refs: { landing_page: "https://themuse.com/job/1" }, -// publication_date: "2026-03-24T10:00:00Z", -// }, -// ], -// }, -// }) -// .mockResolvedValueOnce({ -// data: { -// results: [ -// { -// name: "Designer 2", -// company: { name: "Beta" }, -// locations: [{ name: "RJ" }], -// refs: { landing_page: "https://themuse.com/job/2" }, -// publication_date: "2026-03-24T11:00:00Z", -// }, -// ], -// }, -// }); - -// const jobs = await theMuseAdapter.search("Design", { -// ...BASE_CONFIG, -// maxPagesPerKeyword: 2, -// }); - -// expect(axios.get).toHaveBeenCalledTimes(2); -// expect(jobs).toHaveLength(2); -// expect(jobs[0].titulo).toBe("Designer 1"); -// expect(jobs[1].titulo).toBe("Designer 2"); -// }); - -// it("interrompe a paginação quando não há resultados", async () => { -// axios.get -// .mockResolvedValueOnce({ -// data: { -// results: [ -// { -// name: "Designer 1", -// company: { name: "ACME" }, -// locations: [{ name: "SP" }], -// refs: { landing_page: "https://themuse.com/job/1" }, -// publication_date: "2026-03-24T10:00:00Z", -// }, -// ], -// }, -// }) -// .mockResolvedValueOnce({ -// data: { -// results: [], -// }, -// }); - -// const jobs = await theMuseAdapter.search("Design", { -// ...BASE_CONFIG, -// maxPagesPerKeyword: 2, -// }); - -// expect(axios.get).toHaveBeenCalledTimes(2); -// expect(jobs).toHaveLength(1); -// }); - -// it("retorna lista vazia quando results não é array", async () => { -// axios.get.mockResolvedValueOnce({ -// data: { -// results: null, -// }, -// }); - -// const jobs = await theMuseAdapter.search("Design", BASE_CONFIG); - -// expect(axios.get).toHaveBeenCalledTimes(1); -// expect(jobs).toEqual([]); -// }); - -// it("lança erro quando a requisição falha", async () => { -// axios.get.mockRejectedValueOnce(new Error("falha themuse")); - -// await expect(theMuseAdapter.search("Design", BASE_CONFIG)).rejects.toThrow( -// "falha themuse", -// ); -// }); -// }); - -import axios from "axios"; -import { beforeEach, describe, expect, it, vi } from "vitest"; -import { theMuseAdapter } from "../../../../src/adapters/theMuse.js"; - -vi.mock("axios"); - -const BASE_CONFIG = { - searchLocation: "Brasil", - pageTimeoutMs: 1000, - waitBetweenSearchesMs: 0, - maxPagesPerKeyword: 1, -}; - -describe("theMuseAdapter", () => { - beforeEach(() => { - vi.resetAllMocks(); - }); - - it("faz parse das vagas retornadas pela API", async () => { - axios.get.mockResolvedValueOnce({ - data: { - results: [ - { - name: "Product Designer", - company: { name: "ACME" }, - locations: [{ name: "São Paulo" }, { name: "Remoto" }], - refs: { landing_page: "https://themuse.com/job/1" }, - publication_date: "2026-03-24T10:00:00Z", - }, - ], - }, - }); - - const jobs = await theMuseAdapter.search("Design", BASE_CONFIG); - - expect(axios.get).toHaveBeenCalledTimes(1); - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - source: "The Muse", - keyword: "Design", - titulo: "Product Designer", - empresa: "ACME", - local: "São Paulo, Remoto", - link: "https://themuse.com/job/1", - dataPublicacao: "2026-03-24T10:00:00Z", - }); - }); - - it("busca mais de uma página enquanto houver resultados", async () => { - axios.get - .mockResolvedValueOnce({ - data: { - results: [ - { - name: "Designer 1", - company: { name: "ACME" }, - locations: [{ name: "SP" }], - refs: { landing_page: "https://themuse.com/job/1" }, - publication_date: "2026-03-24T10:00:00Z", - }, - ], - }, - }) - .mockResolvedValueOnce({ - data: { - results: [ - { - name: "Designer 2", - company: { name: "Beta" }, - locations: [{ name: "RJ" }], - refs: { landing_page: "https://themuse.com/job/2" }, - publication_date: "2026-03-24T11:00:00Z", - }, - ], - }, - }); - - const jobs = await theMuseAdapter.search("Design", { - ...BASE_CONFIG, - maxPagesPerKeyword: 2, - }); - - expect(axios.get).toHaveBeenCalledTimes(2); - expect(jobs).toHaveLength(2); - expect(jobs[0].titulo).toBe("Designer 1"); - expect(jobs[1].titulo).toBe("Designer 2"); - }); - - it("interrompe a paginação quando não há resultados", async () => { - axios.get - .mockResolvedValueOnce({ - data: { - results: [ - { - name: "Designer 1", - company: { name: "ACME" }, - locations: [{ name: "SP" }], - refs: { landing_page: "https://themuse.com/job/1" }, - publication_date: "2026-03-24T10:00:00Z", - }, - ], - }, - }) - .mockResolvedValueOnce({ - data: { - results: [], - }, - }); - - const jobs = await theMuseAdapter.search("Design", { - ...BASE_CONFIG, - maxPagesPerKeyword: 2, - }); - - expect(axios.get).toHaveBeenCalledTimes(2); - expect(jobs).toHaveLength(1); - }); - - it("retorna lista vazia quando results não é array", async () => { - axios.get.mockResolvedValueOnce({ - data: { - results: null, - }, - }); - - const jobs = await theMuseAdapter.search("Design", BASE_CONFIG); - - expect(axios.get).toHaveBeenCalledTimes(1); - expect(jobs).toEqual([]); - }); - - it("retorna local vazio quando locations não é array", async () => { - axios.get.mockResolvedValueOnce({ - data: { - results: [ - { - name: "Designer sem local", - company: { name: "ACME" }, - locations: null, - refs: { landing_page: "https://themuse.com/job/3" }, - publication_date: "2026-03-24T12:00:00Z", - }, - ], - }, - }); - - const jobs = await theMuseAdapter.search("Design", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - titulo: "Designer sem local", - empresa: "ACME", - local: "", - link: "https://themuse.com/job/3", - dataPublicacao: "2026-03-24T12:00:00Z", - }); - }); - - it("retorna empresa e link vazios quando campos opcionais não existem", async () => { - axios.get.mockResolvedValueOnce({ - data: { - results: [ - { - name: "Designer incompleto", - locations: [{ name: "Remoto" }], - refs: {}, - publication_date: "2026-03-24T13:00:00Z", - }, - ], - }, - }); - - const jobs = await theMuseAdapter.search("Design", BASE_CONFIG); - - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - titulo: "Designer incompleto", - empresa: "", - local: "Remoto", - link: "", - dataPublicacao: "2026-03-24T13:00:00Z", - }); - }); - - it("aceita keyword vazia ao buscar", async () => { - axios.get.mockResolvedValueOnce({ - data: { - results: [ - { - name: "Generalist", - company: { name: "ACME" }, - locations: [{ name: "São Paulo" }], - refs: { landing_page: "https://themuse.com/job/4" }, - publication_date: "2026-03-24T14:00:00Z", - }, - ], - }, - }); - - const jobs = await theMuseAdapter.search("", BASE_CONFIG); - - expect(axios.get).toHaveBeenCalledTimes(1); - expect(jobs).toHaveLength(1); - expect(jobs[0]).toMatchObject({ - keyword: "", - titulo: "Generalist", - }); - }); - - it("monta a URL sem location quando searchLocation não é informado", async () => { - axios.get.mockResolvedValueOnce({ - data: { - results: [], - }, - }); - - await theMuseAdapter.search("Design", { - ...BASE_CONFIG, - searchLocation: "", - }); - - expect(axios.get).toHaveBeenCalledTimes(1); - - const calledUrl = axios.get.mock.calls[0][0]; - expect(calledUrl).toContain("page=1"); - expect(calledUrl).toContain("descending=true"); - expect(calledUrl).toContain("category=Design"); - expect(calledUrl).not.toContain("location="); - }); - - it("monta a URL sem category quando keyword está vazia", async () => { - axios.get.mockResolvedValueOnce({ - data: { - results: [], - }, - }); - - await theMuseAdapter.search("", BASE_CONFIG); - - expect(axios.get).toHaveBeenCalledTimes(1); - - const calledUrl = axios.get.mock.calls[0][0]; - expect(calledUrl).toContain("page=1"); - expect(calledUrl).toContain("descending=true"); - expect(calledUrl).toContain("location=Brasil"); - expect(calledUrl).not.toContain("category="); - }); - - it("lança erro quando a requisição falha", async () => { - axios.get.mockRejectedValueOnce(new Error("falha themuse")); - - await expect(theMuseAdapter.search("Design", BASE_CONFIG)).rejects.toThrow( - "falha themuse", - ); - }); -}); diff --git a/backend/tests/unit/services/browser.test.js b/backend/tests/unit/services/browser.test.js deleted file mode 100644 index d3e482e..0000000 --- a/backend/tests/unit/services/browser.test.js +++ /dev/null @@ -1,53 +0,0 @@ -import { beforeEach, describe, expect, it, vi } from "vitest"; - -const mocks = vi.hoisted(() => ({ - existsSync: vi.fn(), - launch: vi.fn(async () => ({ pid: 1 })), -})); - -vi.mock("node:fs", () => ({ - existsSync: mocks.existsSync, -})); - -vi.mock("puppeteer-core", () => ({ - default: { - launch: mocks.launch, - }, -})); - -describe("browser", () => { - beforeEach(() => { - vi.resetModules(); - vi.clearAllMocks(); - delete process.env.CHROME_PATH; - delete process.env.PUPPETEER_EXECUTABLE_PATH; - }); - - it("retorna executavel encontrado", async () => { - process.env.CHROME_PATH = "C:/chrome.exe"; - mocks.existsSync.mockImplementation((path) => path === "C:/chrome.exe"); - - const { findBrowserExecutable } = await import("../../../src/browser.js"); - expect(findBrowserExecutable()).toBe("C:/chrome.exe"); - }); - - it("abre navegador com o executavel encontrado", async () => { - process.env.CHROME_PATH = "C:/chrome.exe"; - mocks.existsSync.mockImplementation((path) => path === "C:/chrome.exe"); - - const { openBrowser } = await import("../../../src/browser.js"); - await openBrowser({ headless: true }); - - expect(mocks.launch).toHaveBeenCalledWith({ - headless: true, - executablePath: "C:/chrome.exe", - }); - }); - - it("lanca erro quando nao encontra navegador", async () => { - mocks.existsSync.mockReturnValue(false); - - const { openBrowser } = await import("../../../src/browser.js"); - await expect(openBrowser({ headless: true })).rejects.toThrow("Nenhum Chrome/Edge foi encontrado"); - }); -}); diff --git a/backend/tsconfig.json b/backend/tsconfig.json index 6ec6236..368c555 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -1,47 +1,3 @@ -// { -// // Visit https://aka.ms/tsconfig to read more about this file -// "compilerOptions": { -// // File Layout -// // "rootDir": "./src", -// // "outDir": "./dist", - -// // Environment Settings -// // See also https://aka.ms/tsconfig/module -// "module": "nodenext", -// "target": "esnext", -// "types": [], -// // For nodejs: -// // "lib": ["esnext"], -// // "types": ["node"], -// // and npm install -D @types/node - -// // Other Outputs -// "sourceMap": true, -// "declaration": true, -// "declarationMap": true, - -// // Stricter Typechecking Options -// "noUncheckedIndexedAccess": true, -// "exactOptionalPropertyTypes": true, - -// // Style Options -// // "noImplicitReturns": true, -// // "noImplicitOverride": true, -// // "noUnusedLocals": true, -// // "noUnusedParameters": true, -// // "noFallthroughCasesInSwitch": true, -// // "noPropertyAccessFromIndexSignature": true, - -// // Recommended Options -// "strict": true, -// "jsx": "react-jsx", -// "verbatimModuleSyntax": true, -// "isolatedModules": true, -// "noUncheckedSideEffectImports": true, -// "moduleDetection": "force", -// "skipLibCheck": true, -// } -// } { "compilerOptions": { "target": "ES2022", @@ -56,4 +12,4 @@ }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] -} \ No newline at end of file +} diff --git a/backend/vitest.config.js b/backend/vitest.config.js index 045fd61..7bb8d0a 100644 --- a/backend/vitest.config.js +++ b/backend/vitest.config.js @@ -1,24 +1,3 @@ -// import { defineConfig } from "vitest/config"; - -// export default defineConfig({ -// test: { -// globals: true, -// environment: "node", -// env: loadEnv(mode, process.cwd(), ""), -// setupFiles: ["./tests/setup.js"], -// coverage: { -// provider: "v8", -// reporter: ["text", "html"], -// thresholds: { -// lines: 80, -// functions: 80, -// branches: 80, -// statements: 80, -// }, -// }, -// }, -// }); - import { loadEnv } from "vite"; import { defineConfig } from "vitest/config"; diff --git a/docker-compose.infra.yml b/docker-compose.infra.yml new file mode 100644 index 0000000..86fb009 --- /dev/null +++ b/docker-compose.infra.yml @@ -0,0 +1,34 @@ +services: + postgres: + image: postgres:16-alpine + container_name: vagas-postgres + environment: + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + networks: + - vagas-net + restart: unless-stopped + + redis: + image: redis:7-alpine + container_name: vagas-redis + ports: + - "6379:6379" + volumes: + - redis_data:/data + networks: + - vagas-net + restart: unless-stopped + +volumes: + postgres_data: + redis_data: + +networks: + vagas-net: + name: vagas-net \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 5573f97..08e2f89 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,37 @@ services: + scraper-go: + build: + context: ./scraper-go + dockerfile: Dockerfile + container_name: vagas-scraper-go + env_file: + - ./.env + volumes: + - ./.env:/app/.env:ro + environment: + - GO_SCRAPER_ADDR=:8081 + ports: + - "8081:8081" + healthcheck: + test: ["CMD", "wget", "--spider", "http://localhost:8081/health"] + interval: 5s + timeout: 3s + retries: 5 + start_period: 5s + networks: + - vagas-net + restart: unless-stopped + backend: build: context: . dockerfile: backend/Dockerfile container_name: vagas-backend - command: ["node", "backend/src/server.js"] env_file: - ./backend/.env environment: - PORT=3001 + - GO_SCRAPER_URL=http://scraper-go:8081 - KEYWORDS_STORAGE_MODE=${KEYWORDS_STORAGE_MODE:-env} - CACHE_TTL_MS=${CACHE_TTL_MS:-600000} - REDIS_KEY_PREFIX=${REDIS_KEY_PREFIX:-vagas-full} @@ -16,6 +39,11 @@ services: - ./backend/output:/app/output ports: - "3001:3001" + depends_on: + scraper-go: + condition: service_healthy + networks: + - vagas-net restart: unless-stopped frontend: @@ -30,4 +58,10 @@ services: - "5173:5173" depends_on: - backend - restart: unless-stopped \ No newline at end of file + networks: + - vagas-net + restart: unless-stopped + +networks: + vagas-net: + external: true \ No newline at end of file diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 11fcf41..4ba3b59 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -3,10 +3,14 @@ FROM node:24-alpine WORKDIR /app COPY package*.json ./ -RUN npm ci +COPY frontend/package*.json ./frontend/ -COPY . . +RUN npm ci --workspace=frontend --include-workspace-root + +COPY frontend/ ./frontend/ + +WORKDIR /app/frontend EXPOSE 5173 -CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0", "--port", "5173"] +CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0", "--port", "5173"] \ No newline at end of file diff --git a/frontend/src/services/jobsService.ts b/frontend/src/services/jobsService.ts index 1aa91f6..87bc916 100644 --- a/frontend/src/services/jobsService.ts +++ b/frontend/src/services/jobsService.ts @@ -19,13 +19,17 @@ function buildApiUrl(path: string): string { return baseUrl ? `${baseUrl}${normalizedPath}` : normalizedPath; } -async function readPayload(response: Response): Promise> { +async function readPayload( + response: Response, +): Promise> { const contentType = response.headers?.get?.("content-type") ?? ""; if (!contentType || contentType.includes("application/json")) { try { const payload = await response.json(); - return payload && typeof payload === "object" ? (payload as Record) : {}; + return payload && typeof payload === "object" + ? (payload as Record) + : {}; } catch { // Fallback below for non-JSON bodies returned by proxies/platforms. } @@ -55,10 +59,16 @@ function readMessage(payload: unknown): string | undefined { export async function fetchJobFiles(): Promise { const response = await fetch(buildApiUrl("/api/jobs/files")); - const payload = (await readPayload(response)) as { files?: unknown } & Record; + const payload = (await readPayload(response)) as { files?: unknown } & Record< + string, + unknown + >; if (!response.ok) { - throw buildError(readMessage(payload), "Falha ao listar arquivos de vagas."); + throw buildError( + readMessage(payload), + "Falha ao listar arquivos de vagas.", + ); } if (!Array.isArray(payload.files)) { @@ -67,7 +77,10 @@ export async function fetchJobFiles(): Promise { return payload.files.filter( (entry): entry is JobFile => - !!entry && typeof entry === "object" && "file" in entry && typeof (entry as { file: unknown }).file === "string", + !!entry && + typeof entry === "object" && + "file" in entry && + typeof (entry as { file: unknown }).file === "string", ); } @@ -83,14 +96,20 @@ export async function fetchJobsByFile(fileName: string): Promise { return { jobs: Array.isArray(payload.jobs) ? payload.jobs : [], file: typeof payload.file === "string" ? payload.file : "", - modifiedAt: typeof payload.modifiedAt === "string" || typeof payload.modifiedAt === "number" ? payload.modifiedAt : null, + modifiedAt: + typeof payload.modifiedAt === "string" || + typeof payload.modifiedAt === "number" + ? payload.modifiedAt + : null, total: Number(payload.total || 0), }; } export async function fetchKeywords(): Promise { const response = await fetch(buildApiUrl("/api/keywords")); - const payload = (await readPayload(response)) as { keywords?: unknown } & Record; + const payload = (await readPayload(response)) as { + keywords?: unknown; + } & Record; if (!response.ok) { throw buildError(readMessage(payload), "Falha ao carregar keywords."); @@ -115,7 +134,7 @@ export async function saveKeywords(keywords: string[]): Promise { } export async function runScraperRequest(): Promise { - const response = await fetch(buildApiUrl("/api/scraper/run"), { + const response = await fetch(buildApiUrl("/api/jobs/search"), { method: "POST", }); const payload = (await readPayload(response)) as Record; diff --git a/package-lock.json b/package-lock.json index 3574e3b..9198ea2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,13 +21,21 @@ "openid-client": "^6.8.2", "pdfkit": "^0.18.0", "pg": "^8.20.0", + "pino": "^10.3.1", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.1", + "tar": "^7.5.15", "xlsx": "^0.18.5" }, "devDependencies": { + "@types/cors": "^2.8.19", + "@types/express": "^5.0.6", "@types/node": "^25.6.0", + "@types/pdfkit": "^0.17.6", "@types/pg": "^8.20.0", + "@types/pino": "^7.0.4", + "@types/swagger-jsdoc": "^6.0.4", + "@types/swagger-ui-express": "^4.1.8", "concurrently": "^9.2.1", "drizzle-kit": "^0.31.10", "electron": "^33.0.0", @@ -48,7 +56,8 @@ "redis": "^4.7.1", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.1", - "xlsx": "^0.18.5" + "xlsx": "^0.18.5", + "zod": "^4.4.3" }, "devDependencies": { "@types/node": "^25.6.0", @@ -652,9 +661,9 @@ "license": "MIT" }, "node_modules/@electron/asar/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -881,6 +890,16 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/@electron/rebuild/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/@electron/rebuild/node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", @@ -894,6 +913,25 @@ "node": ">=10" } }, + "node_modules/@electron/rebuild/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@electron/rebuild/node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -931,9 +969,9 @@ "license": "MIT" }, "node_modules/@electron/universal/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -995,20 +1033,20 @@ } }, "node_modules/@emnapi/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", - "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.2.0", + "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", - "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", "license": "MIT", "optional": true, "dependencies": { @@ -1016,9 +1054,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", - "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", "license": "MIT", "optional": true, "dependencies": { @@ -1968,9 +2006,9 @@ "license": "MIT" }, "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -2049,9 +2087,9 @@ "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -2284,6 +2322,27 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@isaacs/fs-minipass/node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -2429,19 +2488,21 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", - "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", "license": "MIT", "optional": true, "dependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" }, "funding": { "type": "github", "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" } }, "node_modules/@noble/ciphers": { @@ -2549,9 +2610,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.122.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.122.0.tgz", - "integrity": "sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==", + "version": "0.128.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.128.0.tgz", + "integrity": "sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/Boshen" @@ -2567,6 +2628,12 @@ "@noble/hashes": "^1.1.5" } }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "license": "MIT" + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -2638,9 +2705,9 @@ } }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.18.tgz", + "integrity": "sha512-lIDyUAfD7U3+BWKzdxMbJcsYHuqXqmGz40aeRqvuAm3y5TkJSYTBW2RDrn65DJFPQqVjUAUqq5uz8urzQ8aBdQ==", "cpu": [ "arm64" ], @@ -2654,9 +2721,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.18.tgz", + "integrity": "sha512-apJq2ktnGp27nSInMR5Vcj8kY6xJzDAvfdIFlpDcAK/w4cDO58qVoi1YQsES/SKiFNge/6e4CUzgjfHduYqWpQ==", "cpu": [ "arm64" ], @@ -2670,9 +2737,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz", - "integrity": "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.18.tgz", + "integrity": "sha512-5Ofot8xbs+pxRHJqm9/9N/4sTQOvdrwEsmPE9pdLEEoAbdZtG6F2LMDfO1sp6ZAtXJuJV/21ew2srq3W8NXB5g==", "cpu": [ "x64" ], @@ -2686,9 +2753,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz", - "integrity": "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.18.tgz", + "integrity": "sha512-7h8eeOTT1eyqJyx64BFCnWZpNm486hGWt2sqeLLgDxA0xI1oGZ9H7gK1S85uNGmBhkdPwa/6reTxfFFKvIsebw==", "cpu": [ "x64" ], @@ -2702,9 +2769,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz", - "integrity": "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.18.tgz", + "integrity": "sha512-eRcm/HVt9U/JFu5RKAEKwGQYtDCKWLiaH6wOnsSEp6NMBb/3Os8LgHZlNyzMpFVNmiiMFlfb2zEnebfzJrHFmg==", "cpu": [ "arm" ], @@ -2718,9 +2785,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.18.tgz", + "integrity": "sha512-SOrT/cT4ukTmgnrEz/Hg3m7LBnuCLW9psDeMKrimRWY4I8DmnO7Lco8W2vtqPmMkbVu8iJ+g4GFLVLLOVjJ9DQ==", "cpu": [ "arm64" ], @@ -2734,9 +2801,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz", - "integrity": "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.18.tgz", + "integrity": "sha512-QWjdxN1HJCpBTAcZ5N5F7wju3gVPzRzSpmGzx7na0c/1qpN9CFil+xt+l9lV/1M6/gqHSNXCiqPfwhVJPeLnug==", "cpu": [ "arm64" ], @@ -2750,9 +2817,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.18.tgz", + "integrity": "sha512-ugCOyj7a4d9h3q9B+wXmf6g3a68UsjGh6dob5DHevHGMwDUbhsYNbSPxJsENcIttJZ9jv7qGM2UesLw5jqIhdg==", "cpu": [ "ppc64" ], @@ -2766,9 +2833,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.18.tgz", + "integrity": "sha512-kKWRhbsotpXkGbcd5dllUWg5gEXcDAa8u5YnP9AV5DYNbvJHGzzuwv7dpmhc8NqKMJldl0a+x76IHbspEpEmdA==", "cpu": [ "s390x" ], @@ -2782,9 +2849,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.18.tgz", + "integrity": "sha512-uCo8ElcCIAMyYAZyuIZ81oFkhTSIllNvUCHCAlbhlN4ji3uC28h7IIdlXyIvGO7HsuqnV9p3rD/bpH7XhIyhRw==", "cpu": [ "x64" ], @@ -2798,9 +2865,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz", - "integrity": "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.18.tgz", + "integrity": "sha512-XNOQZtuE6yUIvx4rwGemwh8kpL1xvU41FXy/s9K7T/3JVcqGzo3NfKM2HrbrGgfPYGFW42f07Wk++aOC6B9NWA==", "cpu": [ "x64" ], @@ -2814,9 +2881,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.18.tgz", + "integrity": "sha512-tSn/kzrfa7tNOXr7sEacDBN4YsIqTyLqh45IO0nHDwtpKIDNDJr+VFojt+4klSpChxB29JLyduSsE0MKEwa65A==", "cpu": [ "arm64" ], @@ -2830,25 +2897,27 @@ } }, "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz", - "integrity": "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.18.tgz", + "integrity": "sha512-+J9YGmc+czgqlhYmwun3S3O0FIZhsH8ep2456xwjAdIOmuJxM7xz4P4PtrxU+Bz17a/5bqPA8o3HAAoX0teUdg==", "cpu": [ "wasm32" ], "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^1.1.1" + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" }, "engines": { - "node": ">=14.0.0" + "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz", - "integrity": "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.18.tgz", + "integrity": "sha512-zsu47DgU0FQzSwi6sU9dZoEdUv7pc1AptSEz/Z8HBg54sV0Pbs3N0+CrIbTsgiu6EyoaNN9CHboqbLaz9lhOyQ==", "cpu": [ "arm64" ], @@ -2862,9 +2931,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz", - "integrity": "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.18.tgz", + "integrity": "sha512-7H+3yqGgmnlDTRRhw/xpYY9J1kf4GC681nVc4GqKhExZTDrVVrV2tsOR9kso0fvgBdcTCcQShx4SLLoHgaLwhg==", "cpu": [ "x64" ], @@ -3353,9 +3422,9 @@ } }, "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.1.tgz", + "integrity": "sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==", "dev": true, "license": "MIT", "engines": { @@ -3363,9 +3432,9 @@ } }, "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", "license": "MIT", "optional": true, "dependencies": { @@ -3380,6 +3449,17 @@ "license": "MIT", "peer": true }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, "node_modules/@types/cacheable-request": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", @@ -3404,6 +3484,26 @@ "assertion-error": "^2.0.1" } }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/debug": { "version": "4.1.13", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", @@ -3428,6 +3528,31 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, "node_modules/@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", @@ -3445,6 +3570,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -3478,6 +3610,16 @@ "undici-types": "~7.19.0" } }, + "node_modules/@types/pdfkit": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/pdfkit/-/pdfkit-0.17.6.tgz", + "integrity": "sha512-tIwzxk2uWKp0Cq9JIluQXJid77lYhF52EsIOwhsMF4iWLA6YneoBR1xVKYYdAysHuepUB0OX4tdwMiUDdGKmig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/pg": { "version": "8.20.0", "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.20.0.tgz", @@ -3490,6 +3632,16 @@ "pg-types": "^2.2.0" } }, + "node_modules/@types/pino": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/pino/-/pino-7.0.4.tgz", + "integrity": "sha512-yKw1UbZOTe7vP1xMQT+oz3FexwgIpBTrM+AC62vWgAkNRULgLTJWfYX+H5/sKPm8VXFbIcXkC3VZPyuaNioZFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pino": "*" + } + }, "node_modules/@types/plist": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", @@ -3502,6 +3654,20 @@ "xmlbuilder": ">=11.0.1" } }, + "node_modules/@types/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/react": { "version": "19.2.14", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", @@ -3532,6 +3698,45 @@ "@types/node": "*" } }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*" + } + }, + "node_modules/@types/swagger-jsdoc": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/swagger-jsdoc/-/swagger-jsdoc-6.0.4.tgz", + "integrity": "sha512-W+Xw5epcOZrF/AooUM/PccNMSAFOKWZA5dasNyMujTwsBkU74njSJBpvCCJhHAJ95XRMzQrrW844Btu0uoetwQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/swagger-ui-express": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/swagger-ui-express/-/swagger-ui-express-4.1.8.tgz", + "integrity": "sha512-AhZV8/EIreHFmBV5wAs0gzJUNq9JbbSXgJLQubCC0jtIo6prnI9MIRRxnU4MZX9RB9yXxF1V4R7jtLl/Wcj31g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*", + "@types/serve-static": "*" + } + }, "node_modules/@types/verror": { "version": "1.10.11", "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz", @@ -3763,9 +3968,9 @@ } }, "node_modules/@xmldom/xmldom": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", - "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", + "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", "dev": true, "license": "MIT", "engines": { @@ -4038,6 +4243,16 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/app-builder-lib/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/app-builder-lib/node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", @@ -4051,6 +4266,25 @@ "node": ">=10" } }, + "node_modules/app-builder-lib/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/app-builder-lib/node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -4276,6 +4510,15 @@ "node": ">= 4.0.0" } }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.27", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", @@ -4314,12 +4557,12 @@ } }, "node_modules/axios": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", - "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz", + "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.11", + "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "proxy-from-env": "^2.1.0" } @@ -4713,9 +4956,9 @@ "license": "MIT" }, "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -4766,6 +5009,35 @@ "node": ">=10" } }, + "node_modules/cacache/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -5323,9 +5595,9 @@ "license": "MIT" }, "node_modules/config-file-ts/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -5859,9 +6131,9 @@ "license": "MIT" }, "node_modules/dir-compare/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -7310,9 +7582,9 @@ "license": "MIT" }, "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -7615,9 +7887,9 @@ "license": "MIT" }, "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -7710,9 +7982,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", @@ -8101,9 +8373,9 @@ "license": "MIT" }, "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -8593,9 +8865,9 @@ "license": "ISC" }, "node_modules/ip-address": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", - "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", "dev": true, "license": "MIT", "engines": { @@ -9427,9 +9699,9 @@ } }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "dev": true, "license": "MIT" }, @@ -10126,6 +10398,16 @@ "node": "^12.13 || ^14.13 || >=16" } }, + "node_modules/node-gyp/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/node-gyp/node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", @@ -10139,6 +10421,25 @@ "node": ">=10" } }, + "node_modules/node-gyp/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/node-releases": { "version": "2.0.36", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", @@ -10337,6 +10638,15 @@ "node": ">= 0.4" } }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -10830,15 +11140,52 @@ "node": ">=0.10.0" } }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, + "node_modules/pino": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz", + "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==", "license": "MIT", - "engines": { - "node": ">= 6" - } + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^3.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^4.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz", + "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "license": "MIT" + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } }, "node_modules/plist": { "version": "3.1.0", @@ -10861,9 +11208,9 @@ "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==" }, "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", + "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", "dev": true, "funding": [ { @@ -11110,6 +11457,22 @@ "license": "MIT", "peer": true }, + "node_modules/process-warning": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -11227,6 +11590,12 @@ ], "license": "MIT" }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -11376,9 +11745,9 @@ "peer": true }, "node_modules/readdir-glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "peer": true, @@ -11413,6 +11782,15 @@ "node": ">=8.10.0" } }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -11611,13 +11989,13 @@ } }, "node_modules/rolldown": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.12.tgz", - "integrity": "sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.18.tgz", + "integrity": "sha512-phmyKBpuBdRYDf4hgyynGAYn/rDDe+iZXKVJ7WX5b1zQzpLkP5oJRPGsfJuHdzPMlyyEO/4sPW6yfSx2gf7lVg==", "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.122.0", - "@rolldown/pluginutils": "1.0.0-rc.12" + "@oxc-project/types": "=0.128.0", + "@rolldown/pluginutils": "1.0.0-rc.18" }, "bin": { "rolldown": "bin/cli.mjs" @@ -11626,27 +12004,27 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.12", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", - "@rolldown/binding-darwin-x64": "1.0.0-rc.12", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" + "@rolldown/binding-android-arm64": "1.0.0-rc.18", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.18", + "@rolldown/binding-darwin-x64": "1.0.0-rc.18", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.18", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.18", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.18", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.18", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.18", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.18", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.18", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.18", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.18", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.18", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.18", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.18" } }, "node_modules/rolldown/node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz", - "integrity": "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==", + "version": "1.0.0-rc.18", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.18.tgz", + "integrity": "sha512-CUY5Mnhe64xQBGZEEXQ5WyZwsc1JU3vAZLIxtrsBt3LO6UOb+C8GunVKqe9sT8NeWb4lqSaoJtp2xo6GxT1MNw==", "license": "MIT" }, "node_modules/rollup": { @@ -11772,6 +12150,15 @@ ], "license": "MIT" }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -12128,6 +12515,15 @@ "node": ">= 6.0.0" } }, + "node_modules/sonic-boom": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -12638,22 +13034,19 @@ } }, "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", + "version": "7.5.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.15.tgz", + "integrity": "sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==", + "license": "BlueOak-1.0.0", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/tar-stream": { @@ -12674,14 +13067,43 @@ "node": ">=6" } }, + "node_modules/tar/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, "node_modules/tar/node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tar/node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/tar/node_modules/yallist": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=8" + "node": ">=18" } }, "node_modules/temp-file": { @@ -12836,6 +13258,24 @@ "node": ">=0.8" } }, + "node_modules/thread-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.1.0.tgz", + "integrity": "sha512-Bw6h2iBDt16v6iHLChBIoVYU8CBo9GPsW8TG7h1hRVhqKhIkH6N8qkxNSmiOZTKsCLPbtWG4ViWLkU6KeKXpig==", + "license": "MIT", + "dependencies": { + "real-require": "^1.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/thread-stream/node_modules/real-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-1.0.0.tgz", + "integrity": "sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==", + "license": "MIT" + }, "node_modules/tiny-inflate": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", @@ -12857,14 +13297,14 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -13548,17 +13988,17 @@ } }, "node_modules/vite": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.2.tgz", - "integrity": "sha512-1gFhNi+bHhRE/qKZOJXACm6tX4bA3Isy9KuKF15AgSRuRazNBOJfdDemPBU16/mpMxApDPrWvZ08DcLPEoRnuA==", + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.11.tgz", + "integrity": "sha512-Jz1mxtUBR5xTT65VOdJZUUeoyLtqljmFkiUXhPTLZka3RDc9vpi/xXkyrnsdRcm2lIi3l3GPMnAidTsEGIj3Ow==", "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.32.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.8", - "rolldown": "1.0.0-rc.11", - "tinyglobby": "^0.2.15" + "picomatch": "^4.0.4", + "postcss": "^8.5.14", + "rolldown": "1.0.0-rc.18", + "tinyglobby": "^0.2.16" }, "bin": { "vite": "bin/vite.js" @@ -13574,8 +14014,8 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.1.0", - "esbuild": "^0.27.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", @@ -13754,268 +14194,6 @@ } } }, - "node_modules/vite/node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.11.tgz", - "integrity": "sha512-SJ+/g+xNnOh6NqYxD0V3uVN4W3VfnrGsC9/hoglicgTNfABFG9JjISvkkU0dNY84MNHLWyOgxP9v9Y9pX4S7+A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.11.tgz", - "integrity": "sha512-7WQgR8SfOPwmDZGFkThUvsmd/nwAWv91oCO4I5LS7RKrssPZmOt7jONN0cW17ydGC1n/+puol1IpoieKqQidmg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.11.tgz", - "integrity": "sha512-39Ks6UvIHq4rEogIfQBoBRusj0Q0nPVWIvqmwBLaT6aqQGIakHdESBVOPRRLacy4WwUPIx4ZKzfZ9PMW+IeyUQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.11.tgz", - "integrity": "sha512-jfsm0ZHfhiqrvWjJAmzsqiIFPz5e7mAoCOPBNTcNgkiid/LaFKiq92+0ojH+nmJmKYkre4t71BWXUZDNp7vsag==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.11.tgz", - "integrity": "sha512-zjQaUtSyq1nVe3nxmlSCuR96T1LPlpvmJ0SZy0WJFEsV4kFbXcq2u68L4E6O0XeFj4aex9bEauqjW8UQBeAvfQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.11.tgz", - "integrity": "sha512-WMW1yE6IOnehTcFE9eipFkm3XN63zypWlrJQ2iF7NrQ9b2LDRjumFoOGJE8RJJTJCTBAdmLMnJ8uVitACUUo1Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.11.tgz", - "integrity": "sha512-jfndI9tsfm4APzjNt6QdBkYwre5lRPUgHeDHoI7ydKUuJvz3lZeCfMsI56BZj+7BYqiKsJm7cfd/6KYV7ubrBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.11.tgz", - "integrity": "sha512-ZlFgw46NOAGMgcdvdYwAGu2Q+SLFA9LzbJLW+iyMOJyhj5wk6P3KEE9Gct4xWwSzFoPI7JCdYmYMzVtlgQ+zfw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.11.tgz", - "integrity": "sha512-hIOYmuT6ofM4K04XAZd3OzMySEO4K0/nc9+jmNcxNAxRi6c5UWpqfw3KMFV4MVFWL+jQsSh+bGw2VqmaPMTLyw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.11.tgz", - "integrity": "sha512-qXBQQO9OvkjjQPLdUVr7Nr2t3QTZI7s4KZtfw7HzBgjbmAPSFwSv4rmET9lLSgq3rH/ndA3ngv3Qb8l2njoPNA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.11.tgz", - "integrity": "sha512-/tpFfoSTzUkH9LPY+cYbqZBDyyX62w5fICq9qzsHLL8uTI6BHip3Q9Uzft0wylk/i8OOwKik8OxW+QAhDmzwmg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.11.tgz", - "integrity": "sha512-mcp3Rio2w72IvdZG0oQ4bM2c2oumtwHfUfKncUM6zGgz0KgPz4YmDPQfnXEiY5t3+KD/i8HG2rOB/LxdmieK2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.11.tgz", - "integrity": "sha512-LXk5Hii1Ph9asuGRjBuz8TUxdc1lWzB7nyfdoRgI0WGPZKmCxvlKk8KfYysqtr4MfGElu/f/pEQRh8fcEgkrWw==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^1.1.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.11.tgz", - "integrity": "sha512-dDwf5otnx0XgRY1yqxOC4ITizcdzS/8cQ3goOWv3jFAo4F+xQYni+hnMuO6+LssHHdJW7+OCVL3CoU4ycnh35Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.11.tgz", - "integrity": "sha512-LN4/skhSggybX71ews7dAj6r2geaMJfm3kMbK2KhFMg9B10AZXnKoLCVVgzhMHL0S+aKtr4p8QbAW8k+w95bAA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.11.tgz", - "integrity": "sha512-xQO9vbwBecJRv9EUcQ/y0dzSTJgA7Q6UVN7xp6B81+tBGSLVAK03yJ9NkJaUA7JFD91kbjxRSC/mDnmvXzbHoQ==", - "dev": true, - "license": "MIT" - }, "node_modules/vite/node_modules/picomatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", @@ -14029,40 +14207,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/vite/node_modules/rolldown": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.11.tgz", - "integrity": "sha512-NRjoKMusSjfRbSYiH3VSumlkgFe7kYAa3pzVOsVYVFY3zb5d7nS+a3KGQ7hJKXuYWbzJKPVQ9Wxq2UvyK+ENpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@oxc-project/types": "=0.122.0", - "@rolldown/pluginutils": "1.0.0-rc.11" - }, - "bin": { - "rolldown": "bin/cli.mjs" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.11", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.11", - "@rolldown/binding-darwin-x64": "1.0.0-rc.11", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.11", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.11", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.11", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.11", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.11", - "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.11", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.11", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.11", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.11", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.11", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.11", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.11" - } - }, "node_modules/vitest": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", @@ -14670,10 +14814,9 @@ } }, "node_modules/zod": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", - "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", - "dev": true, + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index 9335cd7..d7f146c 100644 --- a/package.json +++ b/package.json @@ -37,13 +37,21 @@ "openid-client": "^6.8.2", "pdfkit": "^0.18.0", "pg": "^8.20.0", + "pino": "^10.3.1", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.1", + "tar": "^7.5.15", "xlsx": "^0.18.5" }, "devDependencies": { + "@types/cors": "^2.8.19", + "@types/express": "^5.0.6", "@types/node": "^25.6.0", + "@types/pdfkit": "^0.17.6", "@types/pg": "^8.20.0", + "@types/pino": "^7.0.4", + "@types/swagger-jsdoc": "^6.0.4", + "@types/swagger-ui-express": "^4.1.8", "concurrently": "^9.2.1", "drizzle-kit": "^0.31.10", "electron": "^33.0.0", diff --git a/scraper-go/Dockerfile b/scraper-go/Dockerfile new file mode 100644 index 0000000..80f603a --- /dev/null +++ b/scraper-go/Dockerfile @@ -0,0 +1,33 @@ +# ── Build stage ───────────────────────────────────────────── +FROM golang:1.26-alpine AS builder + +WORKDIR /app + +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . + +RUN CGO_ENABLED=0 GOOS=linux go build \ + -trimpath \ + -ldflags="-s -w" \ + -o /go-scraper ./cmd/server + +# ── Runtime stage ─────────────────────────────────────────── +FROM alpine:3.20 + +RUN apk --no-cache add ca-certificates wget + +WORKDIR /app + +COPY --from=builder /go-scraper /go-scraper + +COPY --from=builder /app/internal/keywords/keywords.json ./internal/keywords/keywords.json + +COPY --from=builder /app/internal/interfaces /app/internal/interfaces + +EXPOSE 8081 + +ENV GO_SCRAPER_ADDR=:8081 + +ENTRYPOINT ["/go-scraper"] \ No newline at end of file diff --git a/scraper-go/cmd/server/adapters.go b/scraper-go/cmd/server/adapters.go new file mode 100644 index 0000000..5fb7ceb --- /dev/null +++ b/scraper-go/cmd/server/adapters.go @@ -0,0 +1,96 @@ +package main + +import ( + "context" + "log" + "log/slog" + "os" + + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/adapters" + "github.com/joho/godotenv" +) + +func loadEnv() { + candidates := []string{ + os.Getenv("ENV_FILE"), + "/app/.env", + "../.env", + ".env", + } + for _, p := range candidates { + if p == "" { + continue + } + if err := godotenv.Load(p); err == nil { + slog.Info("arquivo .env carregado", "path", p) + return + } + } + slog.Warn("arquivo .env não encontrado, usando variáveis do sistema") +} + +func buildAdapters() []adapters.Adapter { + all := make([]adapters.Adapter, 0) + + loadEnv() + + all = append(all, adapters.NewLinkedIn()) + + all = append(all, adapters.NewAdzuna( + os.Getenv("ADZUNA_APP_ID"), + os.Getenv("ADZUNA_APP_KEY"), + "br", + )) + + if err := os.Setenv("GREENHOUSE_COMPANIES_FILE", resolveInterfacesPath("greenhouseCompanies.json")); err != nil { + slog.Warn("falha ao setar GREENHOUSE_COMPANIES_FILE", "error", err) + } + greenhouseSlugs, err := adapters.FetchGreenhouseSlugs(context.Background()) + if err != nil { + slog.Warn("falha ao buscar slugs do Greenhouse", "error", err) + } + for _, slug := range greenhouseSlugs { + all = append(all, adapters.NewGreenhouse(slug, slug)) + } + + if err := os.Setenv("LEVER_COMPANIES_FILE", resolveInterfacesPath("leverCompanies.json")); err != nil { + slog.Warn("falha ao setar LEVER_COMPANIES_FILE", "error", err) + } + leverCompanies, err := adapters.FetchLeverSlugs(context.Background()) + if err != nil { + slog.Warn("falha ao carregar leverCompanies.json", "error", err) + } else { + for _, c := range leverCompanies { + all = append(all, adapters.NewLever(c.Slug, c.Name)) + } + } + + joobleKey := os.Getenv("JOOBLE_API_KEY") + if joobleKey != "" { + all = append(all, adapters.NewJooble(joobleKey)) + } else { + log.Println("AVISO: JOOBLE_API_KEY não encontrada") + } + + return all +} + +func resolveInterfacesPath(filename string) string { + if v := os.Getenv("INTERFACES_DIR"); v != "" { + return v + "/" + filename + } + + candidates := []string{ + "internal/interfaces/" + filename, + "../internal/interfaces/" + filename, + "../../internal/interfaces/" + filename, + } + + for _, c := range candidates { + if _, err := os.Stat(c); err == nil { + return c + } + } + + return "internal/interfaces/" + filename +} diff --git a/scraper-go/cmd/server/handlers.go b/scraper-go/cmd/server/handlers.go new file mode 100644 index 0000000..a3f7ad9 --- /dev/null +++ b/scraper-go/cmd/server/handlers.go @@ -0,0 +1,108 @@ +package main + +import ( + "context" + "encoding/json" + "net/http" + "time" + + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/adapters" + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/keywords" + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/models" + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/pipeline" +) + +func handleScrape(adapterList []adapters.Adapter, kwStore *keywords.Store) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + + var req models.ScrapeRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "invalid json body", http.StatusBadRequest) + return + } + + // --- LÓGICA DE CARREGAMENTO AUTOMÁTICO --- + if len(req.Keywords) == 0 { + // Se o usuário não enviou keywords, carregamos do JSON/Redis + kws, err := kwStore.Load(r.Context()) + if err != nil || len(kws) == 0 { + http.Error(w, "falha ao carregar keywords do sistema", http.StatusInternalServerError) + return + } + req.Keywords = kws + } + // ------------------------------------------ + + start := time.Now() + + // Com 120 keywords, 5 minutos pode ser apertado, considere 10 se necessário + ctx, cancel := context.WithTimeout(r.Context(), 10*time.Minute) + defer cancel() + + jobs := pipeline.Run(ctx, adapterList, req) + + duration := time.Since(start) + printSummary(len(adapterList), req.Keywords, len(jobs), duration) + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(models.ScrapeResponse{ + Jobs: jobs, + Total: len(jobs), + CachedAt: time.Now().UTC().Format(time.RFC3339), + }) + } +} + +func handleHealth() http.HandlerFunc { + return func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(map[string]bool{"ok": true}) + } +} + +func handleGetKeywords(kwStore *keywords.Store) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + kws, err := kwStore.Load(r.Context()) + if err != nil { + http.Error(w, "erro ao carregar keywords", http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(map[string]any{ + "keywords": kws, + "total": len(kws), + }) + } +} + +func handleSaveKeywords(kwStore *keywords.Store) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + + var body struct { + Keywords []string `json:"keywords"` + } + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + http.Error(w, "invalid json", http.StatusBadRequest) + return + } + + if err := kwStore.Save(r.Context(), body.Keywords); err != nil { + http.Error(w, "erro ao salvar keywords", http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(map[string]any{ + "ok": true, + "keywords": body.Keywords, + }) + } +} diff --git a/scraper-go/cmd/server/main.go b/scraper-go/cmd/server/main.go new file mode 100644 index 0000000..4af715b --- /dev/null +++ b/scraper-go/cmd/server/main.go @@ -0,0 +1,16 @@ +package main + +import ( + "log/slog" + "os" +) + +func main() { + logger := slog.New(slog.NewJSONHandler(os.Stdout, nil)) + slog.SetDefault(logger) + + adapterList := buildAdapters() + slog.Info("servidor inicializado", "adapters_total", len(adapterList)) + + run(adapterList) +} diff --git a/scraper-go/cmd/server/server.go b/scraper-go/cmd/server/server.go new file mode 100644 index 0000000..ac5d734 --- /dev/null +++ b/scraper-go/cmd/server/server.go @@ -0,0 +1,133 @@ +// package main + +// import ( +// "context" +// "errors" +// "log/slog" +// "net/http" +// "os" +// "os/signal" +// "syscall" +// "time" + +// "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/adapters" +// ) + +// func run(adapterList []adapters.Adapter) { +// addr := os.Getenv("GO_SCRAPER_ADDR") +// if addr == "" { +// addr = ":8081" +// } + +// mux := http.NewServeMux() +// mux.Handle("POST /scrape", handleScrape(adapterList)) +// mux.Handle("GET /health", handleHealth()) + +// srv := &http.Server{ +// Addr: addr, +// Handler: mux, +// ReadTimeout: 10 * time.Second, +// WriteTimeout: 6 * time.Minute, +// IdleTimeout: 60 * time.Second, +// } + +// stop := make(chan os.Signal, 1) +// signal.Notify(stop, syscall.SIGTERM, syscall.SIGINT) + +// go func() { +// slog.Info("go-scraper em execução", "addr", addr) +// if err := srv.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) { +// slog.Error("falha crítica no servidor", "error", err) +// os.Exit(1) +// } +// }() + +// <-stop +// slog.Info("sinal de interrupção recebido, desligando...") + +// ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) +// defer cancel() + +// if err := srv.Shutdown(ctx); err != nil { +// slog.Error("erro durante o shutdown", "error", err) +// } + +// slog.Info("servidor encerrado com sucesso") +// } + +package main + +import ( + "context" + "errors" + "log/slog" + "net/http" + "os" + "os/signal" + "syscall" + "time" + + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/adapters" + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/keywords" + "github.com/redis/go-redis/v9" +) + +func run(adapterList []adapters.Adapter) { + addr := os.Getenv("GO_SCRAPER_ADDR") + if addr == "" { + addr = ":8081" + } + + // 1. Inicializa o Redis (necessário para o kwStore) + redisAddr := os.Getenv("REDIS_ADDR") + if redisAddr == "" { + redisAddr = "redis:6379" + } + rdb := redis.NewClient(&redis.Options{ + Addr: redisAddr, + }) + + // 2. Instancia a Store de keywords (agora no novo caminho) + kwStore := keywords.NewStore(rdb) + + mux := http.NewServeMux() + + // 3. CORREÇÃO: Passando o kwStore como segundo argumento + mux.Handle("POST /scrape", handleScrape(adapterList, kwStore)) + mux.Handle("GET /health", handleHealth()) + mux.Handle("GET /api/keywords", handleGetKeywords(kwStore)) + mux.Handle("POST /api/keywords", handleSaveKeywords(kwStore)) + + srv := &http.Server{ + Addr: addr, + Handler: mux, + ReadTimeout: 10 * time.Second, + // Aumentei um pouco para aguentar as 120+ keywords + WriteTimeout: 10 * time.Minute, + IdleTimeout: 60 * time.Second, + } + + // ... (restante do código de shutdown continua igual) + stop := make(chan os.Signal, 1) + signal.Notify(stop, syscall.SIGTERM, syscall.SIGINT) + + go func() { + slog.Info("go-scraper em execução", "addr", addr) + if err := srv.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) { + slog.Error("falha crítica no servidor", "error", err) + os.Exit(1) + } + }() + + <-stop + slog.Info("sinal de interrupção recebido, desligando...") + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + if err := srv.Shutdown(ctx); err != nil { + slog.Error("erro durante o shutdown", "error", err) + } + + slog.Info("servidor encerrado com sucesso") +} diff --git a/scraper-go/cmd/server/summary.go b/scraper-go/cmd/server/summary.go new file mode 100644 index 0000000..fabf636 --- /dev/null +++ b/scraper-go/cmd/server/summary.go @@ -0,0 +1,27 @@ +package main + +import ( + "fmt" + "os" + "strings" + "text/tabwriter" + "time" +) + +func printSummary(totalAdapters int, keywords []string, jobsCount int, duration time.Duration) { + fmt.Println("\n" + strings.Repeat("=", 60)) + fmt.Println("🚀 RELATÓRIO DE EXECUÇÃO DO SCRAPER") + fmt.Println(strings.Repeat("=", 60)) + + w := tabwriter.NewWriter(os.Stdout, 0, 0, 3, ' ', tabwriter.Debug) + fmt.Fprintln(w, "MÉTRICA\t VALOR") + fmt.Fprintln(w, "-------\t -----") + fmt.Fprintf(w, "Adapters Carregados\t %d\n", totalAdapters) + fmt.Fprintf(w, "Keywords Processadas\t %d\n", len(keywords)) + fmt.Fprintf(w, "Lista de Keywords\t %s\n", strings.Join(keywords, ", ")) + fmt.Fprintf(w, "Total Vagas (Pós-Dedup)\t %d\n", jobsCount) + fmt.Fprintf(w, "Tempo Total de Resposta\t %v\n", duration.Round(time.Millisecond)) + w.Flush() + + fmt.Println(strings.Repeat("=", 60) + "\n") +} diff --git a/scraper-go/go.mod b/scraper-go/go.mod new file mode 100644 index 0000000..320e2d5 --- /dev/null +++ b/scraper-go/go.mod @@ -0,0 +1,20 @@ +module github.com/Benevanio/Jobs_Scraper_Global/scraper-go + +go 1.26 + +require github.com/PuerkitoBio/goquery v1.12.0 + +require github.com/joho/godotenv v1.5.1 + +require ( + github.com/cespare/xxhash/v2 v2.3.0 // indirect + go.uber.org/atomic v1.11.0 // indirect +) + +require ( + github.com/andybalholm/cascadia v1.3.3 // indirect + github.com/redis/go-redis/v9 v9.19.0 + golang.org/x/net v0.52.0 // indirect + golang.org/x/sync v0.20.0 + golang.org/x/text v0.36.0 +) diff --git a/scraper-go/go.sum b/scraper-go/go.sum new file mode 100644 index 0000000..88361e5 --- /dev/null +++ b/scraper-go/go.sum @@ -0,0 +1,99 @@ +github.com/PuerkitoBio/goquery v1.12.0 h1:pAcL4g3WRXekcB9AU/y1mbKez2dbY2AajVhtkO8RIBo= +github.com/PuerkitoBio/goquery v1.12.0/go.mod h1:802ej+gV2y7bbIhOIoPY5sT183ZW0YFofScC4q/hIpQ= +github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM= +github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= +github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= +github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/redis/go-redis/v9 v9.19.0 h1:XPVaaPSnG6RhYf7p+rmSa9zZfeVAnWsH5h3lxthOm/k= +github.com/redis/go-redis/v9 v9.19.0/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs= +github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= +golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= +golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/scraper-go/internal/adapters/adapter.go b/scraper-go/internal/adapters/adapter.go new file mode 100644 index 0000000..686d318 --- /dev/null +++ b/scraper-go/internal/adapters/adapter.go @@ -0,0 +1,17 @@ +package adapters + +import ( + "context" + + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/models" +) + +// Adapter é a interface que todo scraper de fonte deve implementar. +type Adapter interface { + // SourceName retorna o identificador da fonte (ex: "linkedin", "Adzuna:br"). + SourceName() string + + // Search busca vagas para uma keyword e configuração específica. + // Deve respeitar o contexto (timeout / cancelamento). + Search(ctx context.Context, keyword string, req models.ScrapeRequest) ([]models.Job, error) +} diff --git a/scraper-go/internal/adapters/adzuna.go b/scraper-go/internal/adapters/adzuna.go new file mode 100644 index 0000000..5a197d1 --- /dev/null +++ b/scraper-go/internal/adapters/adzuna.go @@ -0,0 +1,197 @@ +package adapters + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + "time" + + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/models" +) + +type AdzunaAdapter struct { + client *http.Client + appID string + appKey string + country string + // mu sync.Mutex + semaphore chan struct{} +} + +func NewAdzuna(appID, appKey, country string) *AdzunaAdapter { + return &AdzunaAdapter{ + client: &http.Client{Timeout: 60 * time.Second}, + appID: appID, + appKey: appKey, + country: strings.ToLower(strings.TrimSpace(country)), + semaphore: make(chan struct{}, 3), + } +} + +func (a *AdzunaAdapter) SourceName() string { + return fmt.Sprintf("Adzuna:%s", a.country) +} + +// buildURL espelha exatamente o buildAdzunaUrl do JS. +func (a *AdzunaAdapter) buildURL(keyword string, req models.ScrapeRequest, page int) string { + resultsPerPage := req.ResultsPerPage + if resultsPerPage <= 0 { + resultsPerPage = 20 + } + + endpoint := fmt.Sprintf( + "https://api.adzuna.com/v1/api/jobs/%s/search/%d", + a.country, page, + ) + + u, _ := url.Parse(endpoint) + q := u.Query() + q.Set("app_id", a.appID) + q.Set("app_key", a.appKey) + q.Set("results_per_page", fmt.Sprintf("%d", resultsPerPage)) + q.Set("what", keyword) + + if req.SearchLocation != "" { + q.Set("where", req.SearchLocation) + } + + // Comentado para espelhar o JS: + // if req.RemoteOnly { + // q.Set("work_from_home", "1") + // } + + u.RawQuery = q.Encode() + return u.String() +} + +func (a *AdzunaAdapter) Search(ctx context.Context, keyword string, req models.ScrapeRequest) ([]models.Job, error) { + // Adzuna é sensível a concorrência, então usamos um canal como semáforo para limitar. + a.semaphore <- struct{}{} + defer func() { <-a.semaphore }() + + maxPages := req.MaxPagesPerKeyword + if maxPages <= 0 { + maxPages = 3 + } + + // Intervalo entre requisições (aumentamos a segurança) + waitDuration := time.Duration(req.WaitBetweenSearchesMs) * time.Millisecond + if waitDuration <= 0 { + waitDuration = 2000 * time.Millisecond // Adzuna é sensível, 2s é mais seguro + } + + pageTimeout := time.Duration(req.PageTimeoutMs) * time.Millisecond + if pageTimeout <= 0 { + pageTimeout = 15 * time.Second + } + + var allJobs []models.Job + + for page := 1; page <= maxPages; page++ { + endpoint := a.buildURL(keyword, req, page) + + pageCtx, cancel := context.WithTimeout(ctx, pageTimeout) + jobs, err := a.fetchPage(pageCtx, endpoint, keyword) + cancel() + + if err != nil { + // Se der erro 400 ou 429, o log detalhado agora sairá no fetchPage + return nil, fmt.Errorf("adzuna erro na página %d: %w", page, err) + } + + if len(jobs) == 0 { + break + } + + allJobs = append(allJobs, jobs...) + + // Pausa obrigatória entre páginas. + // O semáforo limita QUANTAS keywords rodam juntas, + // e este sleep garante o respiro entre as PÁGINAS de cada keyword. + select { + case <-ctx.Done(): + return allJobs, ctx.Err() + case <-time.After(waitDuration): + // Continua para a próxima página ou libera para a próxima keyword + } + } + + return allJobs, nil +} + +type adzunaResponse struct { + Results []struct { + Title string `json:"title"` + Company struct { + DisplayName string `json:"display_name"` + } `json:"company"` + Location struct { + DisplayName string `json:"display_name"` + } `json:"location"` + RedirectURL string `json:"redirect_url"` + URL string `json:"url"` + SalaryMin float64 `json:"salary_min"` + SalaryMax float64 `json:"salary_max"` + Created string `json:"created"` + } `json:"results"` +} + +func (a *AdzunaAdapter) fetchPage(ctx context.Context, endpoint, keyword string) ([]models.Job, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, nil) + if err != nil { + return nil, err + } + req.Header.Set("Accept", "application/json") + + resp, err := a.client.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("status %d", resp.StatusCode) + } + + var data adzunaResponse + if err := json.NewDecoder(resp.Body).Decode(&data); err != nil { + return nil, err + } + + if len(data.Results) == 0 { + return []models.Job{}, nil + } + + jobs := make([]models.Job, 0, len(data.Results)) + for _, r := range data.Results { + // Espelha o salario do JS: "min-max" ou vazio. + salario := "" + if r.SalaryMin != 0 || r.SalaryMax != 0 { + salario = fmt.Sprintf("%g-%g", r.SalaryMin, r.SalaryMax) + } + + link := strings.TrimSpace(r.RedirectURL) + if link == "" { + link = strings.TrimSpace(r.URL) + } + + jobs = append(jobs, models.Job{ + ID: link, + Title: strings.TrimSpace(r.Title), + Company: strings.TrimSpace(r.Company.DisplayName), + Location: strings.TrimSpace(r.Location.DisplayName), + URL: link, + Salary: salario, + PostedAt: r.Created, + Source: "Adzuna", + Sources: []string{"Adzuna"}, + Keyword: keyword, + Keywords: []string{keyword}, + }) + } + + return jobs, nil +} diff --git a/scraper-go/internal/adapters/greehouse.go b/scraper-go/internal/adapters/greehouse.go new file mode 100644 index 0000000..ba43103 --- /dev/null +++ b/scraper-go/internal/adapters/greehouse.go @@ -0,0 +1,182 @@ +package adapters + +import ( + "context" + "encoding/json" + "fmt" + "log/slog" + "net/http" + "os" + "regexp" + "strings" + "time" + + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/models" +) + +var jsonLDPattern = regexp.MustCompile(`(?s)]+type="application/ld\+json"[^>]*>(.*?)`) + +type greenhouseListResponse struct { + Jobs []greenhouseListJob `json:"jobs"` +} + +type greenhouseListJob struct { + Title string `json:"title"` + Content string `json:"content"` + AbsoluteURL string `json:"absolute_url"` + UpdatedAt string `json:"updated_at"` + Location struct { + Name string `json:"name"` + } `json:"location"` +} + +type jobPosting struct { + Type string `json:"@type"` + Title string `json:"title"` + Description string `json:"description"` + DatePosted string `json:"datePosted"` + + HiringOrganization struct { + Name string `json:"name"` + } `json:"hiringOrganization"` + + JobLocation struct { + Address struct { + Locality string `json:"addressLocality"` + Region string `json:"addressRegion"` + Country string `json:"addressCountry"` + } `json:"address"` + } `json:"jobLocation"` + + BaseSalary *struct { + Value struct { + MinValue float64 `json:"minValue"` + MaxValue float64 `json:"maxValue"` + UnitText string `json:"unitText"` + } `json:"value"` + } `json:"baseSalary"` +} + +func extractJSONLD(html string) *jobPosting { + matches := jsonLDPattern.FindAllStringSubmatch(html, -1) + + for _, match := range matches { + if len(match) < 2 { + continue + } + + var posting jobPosting + if err := json.Unmarshal([]byte(strings.TrimSpace(match[1])), &posting); err != nil { + continue + } + + if posting.Type == "JobPosting" && posting.Title != "" { + return &posting + } + } + + return nil +} + +type GreenhouseAdapter struct { + client *http.Client + boardToken string + companyName string +} + +func NewGreenhouse(boardToken, companyName string) *GreenhouseAdapter { + return &GreenhouseAdapter{ + client: &http.Client{Timeout: 30 * time.Second}, + boardToken: boardToken, + companyName: companyName, + } +} + +func (a *GreenhouseAdapter) SourceName() string { + return fmt.Sprintf("Green House:%s", a.companyName) +} + +func (a *GreenhouseAdapter) Search(ctx context.Context, keyword string, req models.ScrapeRequest) ([]models.Job, error) { + pageTimeout := time.Duration(req.PageTimeoutMs) * time.Millisecond + if pageTimeout <= 0 { + pageTimeout = 15 * time.Second + } + + listCtx, cancel := context.WithTimeout(ctx, pageTimeout) + defer cancel() + + endpoint := fmt.Sprintf("https://boards-api.greenhouse.io/v1/boards/%s/jobs?content=true", a.boardToken) + + listReq, err := http.NewRequestWithContext(listCtx, http.MethodGet, endpoint, nil) + if err != nil { + return nil, err + } + + resp, err := a.client.Do(listReq) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("status %d", resp.StatusCode) + } + + var data struct { + Jobs []struct { + Title string `json:"title"` + Content string `json:"content"` + AbsoluteURL string `json:"absolute_url"` + UpdatedAt string `json:"updated_at"` + Location struct { + Name string `json:"name"` + } `json:"location"` + } `json:"jobs"` + } + + if err := json.NewDecoder(resp.Body).Decode(&data); err != nil { + return nil, err + } + + kwLower := strings.ToLower(keyword) + var jobs []models.Job + + for _, j := range data.Jobs { + if strings.Contains(strings.ToLower(j.Title), kwLower) { + jobs = append(jobs, models.Job{ + ID: strings.TrimSpace(j.AbsoluteURL), + Title: strings.TrimSpace(j.Title), + Description: strings.TrimSpace(j.Content), + Company: a.companyName, + Location: strings.TrimSpace(j.Location.Name), + URL: strings.TrimSpace(j.AbsoluteURL), + PostedAt: j.UpdatedAt, + Source: "Green House", + Sources: []string{"Green House"}, + Keyword: keyword, + Keywords: []string{keyword}, + }) + } + } + + return jobs, nil +} + +func FetchGreenhouseSlugs(ctx context.Context) ([]string, error) { + + filename := "./internal/interfaces/greenhouseCompanies.json" + + data, err := os.ReadFile(filename) + if err != nil { + return nil, fmt.Errorf("não foi possível ler o arquivo %s: %w", filename, err) + } + + var slugs []string + if err := json.Unmarshal(data, &slugs); err != nil { + return nil, fmt.Errorf("erro ao processar o JSON de empresas: %w", err) + } + + slog.Info("Slugs da Greenhouse carregados com sucesso", "total", len(slugs)) + + return slugs, nil +} diff --git a/scraper-go/internal/adapters/jooble.go b/scraper-go/internal/adapters/jooble.go new file mode 100644 index 0000000..963a036 --- /dev/null +++ b/scraper-go/internal/adapters/jooble.go @@ -0,0 +1,98 @@ +package adapters + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "net/http" + "time" + + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/models" +) + +type JoobleAdapter struct { + apiKey string + client *http.Client +} + +func NewJooble(apiKey string) *JoobleAdapter { + return &JoobleAdapter{ + apiKey: apiKey, + client: &http.Client{Timeout: 15 * time.Second}, + } +} + +func (a *JoobleAdapter) SourceName() string { + return "Jooble" +} + +func (a *JoobleAdapter) Supports(source string) bool { + return source == "Jooble" +} + +func (a *JoobleAdapter) Search(ctx context.Context, keyword string, req models.ScrapeRequest) ([]models.Job, error) { + url := "https://br.jooble.org/api/" + a.apiKey + + // Payload conforme a documentação que você printou + payload := map[string]string{ + "keywords": keyword, + "location": "Brasil", + } + + body, _ := json.Marshal(payload) + + httpReq, err := http.NewRequestWithContext(ctx, "POST", url, bytes.NewBuffer(body)) + if err != nil { + return nil, err + } + httpReq.Header.Set("Content-Type", "application/json") + + resp, err := a.client.Do(httpReq) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("jooble erro: status %d", resp.StatusCode) + } + + // Estrutura de resposta da Jooble + var joobleRes struct { + Jobs []struct { + Title string `json:"title"` + Location string `json:"location"` + Snippet string `json:"snippet"` + Source string `json:"source"` + Type string `json:"type"` + Link string `json:"link"` + Company string `json:"company"` + Updated string `json:"updated"` + Salary string `json:"salary"` + ID int64 `json:"id"` + } `json:"jobs"` + } + + if err := json.NewDecoder(resp.Body).Decode(&joobleRes); err != nil { + return nil, err + } + + var jobs []models.Job + for _, j := range joobleRes.Jobs { + jobs = append(jobs, models.Job{ + ID: j.Link, + Title: j.Title, + Company: j.Company, + Location: j.Location, + URL: j.Link, + Salary: j.Salary, + Source: "Jooble", + Sources: []string{"Jooble"}, + Keyword: keyword, + Keywords: []string{keyword}, + }) + } + + return jobs, nil +} diff --git a/scraper-go/internal/adapters/lever.go b/scraper-go/internal/adapters/lever.go new file mode 100644 index 0000000..6251e33 --- /dev/null +++ b/scraper-go/internal/adapters/lever.go @@ -0,0 +1,157 @@ +package adapters + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "os" + "strings" + "time" + + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/models" +) + +type LeverAdapter struct { + client *http.Client + companySlug string + companyName string +} + +type leverCompany struct { + Slug string `json:"slug"` + Name string `json:"name"` +} + +type leverPosting struct { + ID string `json:"id"` + Text string `json:"text"` + HostedURL string `json:"hostedUrl"` + CreatedAt int64 `json:"createdAt"` + + Categories struct { + Team string `json:"team"` + Department string `json:"department"` + Location string `json:"location"` + Commitment string `json:"commitment"` + Level string `json:"level"` + } `json:"categories"` + + Description string `json:"description"` + State string `json:"state"` +} + +func NewLever(companySlug, companyName string) *LeverAdapter { + return &LeverAdapter{ + client: &http.Client{Timeout: 60 * time.Second}, + companySlug: companySlug, + companyName: companyName, + } +} + +func FetchLeverSlugs(_ context.Context) ([]leverCompany, error) { + path := os.Getenv("LEVER_COMPANIES_FILE") + if path == "" { + path = "./internal/interfaces/leverCompanies.json" + } + + data, err := os.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("lever: leitura do arquivo '%s': %w", path, err) + } + + var companies []leverCompany + if err := json.Unmarshal(data, &companies); err != nil { + return nil, fmt.Errorf("lever: parse do arquivo '%s': %w", path, err) + } + + if len(companies) == 0 { + return nil, fmt.Errorf("lever: nenhuma empresa encontrada em '%s'", path) + } + + return companies, nil +} + +func (a *LeverAdapter) SourceName() string { + return fmt.Sprintf("Lever:%s", a.companyName) +} + +func (a *LeverAdapter) Search(ctx context.Context, keyword string, req models.ScrapeRequest) ([]models.Job, error) { + pageTimeout := time.Duration(req.PageTimeoutMs) * time.Millisecond + if pageTimeout <= 0 { + pageTimeout = 15 * time.Second + } + + endpoint := fmt.Sprintf( + "https://api.lever.co/v0/postings/%s?mode=json", + a.companySlug, + ) + + reqCtx, cancel := context.WithTimeout(ctx, pageTimeout) + defer cancel() + + httpReq, err := http.NewRequestWithContext(reqCtx, http.MethodGet, endpoint, nil) + if err != nil { + return nil, fmt.Errorf("lever: build request: %w", err) + } + + httpReq.Header.Set("User-Agent", "JobsScraper/1.0") + httpReq.Header.Set("Accept", "application/json") + + resp, err := a.client.Do(httpReq) + if err != nil { + return nil, fmt.Errorf("lever: http do: %w", err) + } + defer resp.Body.Close() + + switch resp.StatusCode { + case http.StatusOK: + // ok + case http.StatusTooManyRequests: + return nil, fmt.Errorf("lever: rate limit atingido (429)") + case http.StatusNotFound: + return nil, fmt.Errorf("lever: empresa '%s' não encontrada (404)", a.companySlug) + default: + return nil, fmt.Errorf("lever: status inesperado %d", resp.StatusCode) + } + + var raw []leverPosting + if err := json.NewDecoder(resp.Body).Decode(&raw); err != nil { + return nil, fmt.Errorf("lever: decode json: %w", err) + } + + kwLower := strings.ToLower(keyword) + + var jobs []models.Job + for _, j := range raw { + if keyword != "" && !strings.Contains(strings.ToLower(j.Text), kwLower) { + continue + } + + dataPublicacao := "" + if j.CreatedAt != 0 { + dataPublicacao = time.UnixMilli(j.CreatedAt).UTC().Format(time.RFC3339) + } + + local := strings.TrimSpace(j.Categories.Location) + if local == "" { + local = strings.TrimSpace(j.Categories.Department) + } + + jobs = append(jobs, models.Job{ + ID: strings.TrimSpace(j.HostedURL), + Title: strings.TrimSpace(j.Text), + Company: a.companyName, + Location: local, + URL: strings.TrimSpace(j.HostedURL), + Modality: strings.TrimSpace(j.Categories.Commitment), + PostedAt: dataPublicacao, + Source: "Lever", + Sources: []string{"Lever"}, + Keyword: keyword, + Keywords: []string{keyword}, + }) + } + + return jobs, nil +} diff --git a/scraper-go/internal/adapters/linkedin.go b/scraper-go/internal/adapters/linkedin.go new file mode 100644 index 0000000..f886a9d --- /dev/null +++ b/scraper-go/internal/adapters/linkedin.go @@ -0,0 +1,229 @@ +package adapters + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + "time" + + "github.com/PuerkitoBio/goquery" + + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/models" +) + +const linkedinSearchURL = "https://www.linkedin.com/jobs-guest/jobs/api/seeMoreJobPostings/search" +const linkedinPageStep = 25 + +// LinkedInAdapter busca vagas no LinkedIn via scraping HTML, +// espelhando exatamente o linkedinAdapter.js com cheerio. +type LinkedInAdapter struct { + client *http.Client +} + +func NewLinkedIn() *LinkedInAdapter { + return &LinkedInAdapter{ + // Timeout do client é maior que o pageTimeout individual, + // porque o Search pode fazer várias páginas. + client: &http.Client{Timeout: 2 * time.Minute}, + } +} + +func (a *LinkedInAdapter) SourceName() string { return "linkedin" } + +// buildSearchUrl espelha exatamente o buildSearchUrl do JS. +func buildLinkedInURL(keyword string, req models.ScrapeRequest, start int) string { + u, _ := url.Parse(linkedinSearchURL) + q := u.Query() + + q.Set("keywords", keyword) + + if req.SearchLocation != "" { + q.Set("location", req.SearchLocation) + } + if req.SearchGeoID != "" { + q.Set("geoId", req.SearchGeoID) + } + if req.SearchLanguage != "" { + q.Set("lang", req.SearchLanguage) + } + // Espelha: if (config.remoteOnly !== false) + // O zero-value de bool em Go é false, então usamos um ponteiro + // no ScrapeRequest para distinguir "não informado" de false explícito. + // Como o Node envia remoteOnly apenas quando true, checamos direto. + if req.RemoteOnly { + q.Set("f_WT", "2") + } + if req.JobTypes != "" { + q.Set("f_JT", req.JobTypes) + } + if req.TimeFilter != "" { + q.Set("f_TPR", req.TimeFilter) + } + + q.Set("start", fmt.Sprintf("%d", start)) + u.RawQuery = q.Encode() + return u.String() +} + +// fetchJobsChunk espelha o fetchJobsChunk do JS. +// Faz o GET e parseia o HTML com goquery (equivalente ao cheerio). +func (a *LinkedInAdapter) fetchJobsChunk(ctx context.Context, keyword string, req models.ScrapeRequest, start int) ([]models.Job, error) { + pageTimeout := time.Duration(req.PageTimeoutMs) * time.Millisecond + if pageTimeout <= 0 { + pageTimeout = 15 * time.Second + } + + endpoint := buildLinkedInURL(keyword, req, start) + + pageCtx, cancel := context.WithTimeout(ctx, pageTimeout) + defer cancel() + + httpReq, err := http.NewRequestWithContext(pageCtx, http.MethodGet, endpoint, nil) + if err != nil { + return nil, err + } + + // Mesmos headers do JS. + httpReq.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36") + httpReq.Header.Set("accept-language", "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7") + + resp, err := a.client.Do(httpReq) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("status %d", resp.StatusCode) + } + + // goquery.NewDocumentFromReader espelha o cheerio.load(response.data). + doc, err := goquery.NewDocumentFromReader(resp.Body) + if err != nil { + return nil, err + } + + var jobs []models.Job + + // Espelha: $(".base-card, .job-search-card").each(...) + doc.Find(".base-card, .job-search-card").Each(func(_ int, card *goquery.Selection) { + // Espelha cada node.find(...).text().trim() || fallback + titulo := strings.TrimSpace(card.Find(".base-search-card__title").Text()) + if titulo == "" { + titulo = strings.TrimSpace(card.Find("h3").First().Text()) + } + + empresa := strings.TrimSpace(card.Find(".base-search-card__subtitle").Text()) + if empresa == "" { + empresa = strings.TrimSpace(card.Find("h4").First().Text()) + } + + local := strings.TrimSpace(card.Find(".job-search-card__location").Text()) + + link, _ := card.Find("a.base-card__full-link").Attr("href") + if link == "" { + link, _ = card.Find("a[href*='/jobs/view/']").Attr("href") + } + + jobs = append(jobs, models.Job{ + Title: titulo, + Company: empresa, + Location: local, + URL: link, + }) + }) + + return jobs, nil +} + +// normalizeJob espelha o normalizeJob do JS. +func normalizeLinkedInJob(keyword string, job models.Job) models.Job { + u := strings.TrimSpace(job.URL) + return models.Job{ + ID: u, + Title: strings.TrimSpace(job.Title), + Company: strings.TrimSpace(job.Company), + Location: strings.TrimSpace(job.Location), + URL: u, + Source: "LinkedIn", + Sources: []string{"LinkedIn"}, + Keyword: keyword, + Keywords: []string{keyword}, + } +} + +// dedupeLinkedIn espelha o dedupeJobs interno do linkedinAdapter.js. +func dedupeLinkedIn(jobs []models.Job) []models.Job { + unique := make(map[string]models.Job, len(jobs)) + order := make([]string, 0, len(jobs)) + + for _, job := range jobs { + key := job.URL + if key == "" { + key = job.Title + "-" + job.Company + "-" + job.Location + } + if key == "" { + continue + } + if _, exists := unique[key]; !exists { + unique[key] = job + order = append(order, key) + } + } + + result := make([]models.Job, 0, len(order)) + for _, key := range order { + result = append(result, unique[key]) + } + return result +} + +// Search espelha o linkedinAdapter.search do JS. +func (a *LinkedInAdapter) Search(ctx context.Context, keyword string, req models.ScrapeRequest) ([]models.Job, error) { + maxPages := req.MaxPagesPerKeyword + if maxPages <= 0 { + maxPages = 5 + } + + waitBetween := time.Duration(req.WaitBetweenSearchesMs) * time.Millisecond + if waitBetween <= 0 { + waitBetween = 1000 * time.Millisecond + } + + var allJobs []models.Job + + for pageIndex := 0; pageIndex < maxPages; pageIndex++ { + start := pageIndex * linkedinPageStep + + jobs, err := a.fetchJobsChunk(ctx, keyword, req, start) + if err != nil { + // Espelha o catch com logWarn — não interrompe, apenas avisa. + // O pipeline vai logar o warn; aqui retornamos o que já temos. + if pageIndex == 0 { + return allJobs, fmt.Errorf("linkedin: falha HTTP na busca para %q (start=%d): %w", keyword, start, err) + } + break + } + + if len(jobs) == 0 { + // Espelha o break quando não há cards. + break + } + + for _, job := range jobs { + allJobs = append(allJobs, normalizeLinkedInJob(keyword, job)) + } + + if pageIndex < maxPages-1 { + select { + case <-ctx.Done(): + return dedupeLinkedIn(allJobs), nil + case <-time.After(waitBetween): + } + } + } + + return dedupeLinkedIn(allJobs), nil +} diff --git a/scraper-go/internal/adapters/registry.go b/scraper-go/internal/adapters/registry.go new file mode 100644 index 0000000..68229e7 --- /dev/null +++ b/scraper-go/internal/adapters/registry.go @@ -0,0 +1,45 @@ +package adapters + +import ( + "context" + "log/slog" + "os" +) + +func GetAdapters() []Adapter { + var list []Adapter + + list = append(list, NewLinkedIn()) + + if appID, appKey := os.Getenv("ADZUNA_APP_ID"), os.Getenv("ADZUNA_APP_KEY"); appID != "" && appKey != "" { + list = append(list, NewAdzuna(appID, appKey, "br")) + } else { + slog.Warn("ADZUNA_APP_ID ou ADZUNA_APP_KEY não configurados, adapter ignorado") + } + + list = append(list, NewTheMuse()) + + if apiKey := os.Getenv("JOOBLE_API_KEY"); apiKey != "" { + list = append(list, NewJooble(apiKey)) + } else { + slog.Warn("JOOBLE_API_KEY não configurada, adapter ignorado") + } + + greenhouseSlugs, err := FetchGreenhouseSlugs(context.Background()) + if err != nil { + slog.Warn("falha ao carregar slugs do Greenhouse", "error", err) + } + for _, slug := range greenhouseSlugs { + list = append(list, NewGreenhouse(slug, slug)) + } + + leverCompanies, err := FetchLeverSlugs(context.Background()) + if err != nil { + slog.Warn("falha ao carregar empresas do Lever", "error", err) + } + for _, c := range leverCompanies { + list = append(list, NewLever(c.Slug, c.Name)) + } + + return list +} diff --git a/scraper-go/internal/adapters/themuse.go b/scraper-go/internal/adapters/themuse.go new file mode 100644 index 0000000..db0a28e --- /dev/null +++ b/scraper-go/internal/adapters/themuse.go @@ -0,0 +1,161 @@ +package adapters + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + "time" + + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/models" +) + +// TheMuseAdapter espelha o theMuseAdapter do JS. +type TheMuseAdapter struct { + client *http.Client +} + +func NewTheMuse() *TheMuseAdapter { + return &TheMuseAdapter{ + client: &http.Client{Timeout: 60 * time.Second}, + } +} + +func (a *TheMuseAdapter) SourceName() string { return "The Muse" } + +// buildTheMuseUrl espelha exatamente o buildTheMuseUrl do JS. +func buildTheMuseURL(keyword string, req models.ScrapeRequest, page int) string { + u, _ := url.Parse("https://www.themuse.com/api/public/jobs") + q := u.Query() + + q.Set("page", fmt.Sprintf("%d", page)) + q.Set("descending", "true") + + if keyword != "" { + q.Set("category", keyword) + } + + if req.SearchLocation != "" { + q.Set("location", req.SearchLocation) + } + + u.RawQuery = q.Encode() + return u.String() +} + +type theMuseResponse struct { + Results []struct { + Name string `json:"name"` + Company struct { + Name string `json:"name"` + } `json:"company"` + Refs struct { + LandingPage string `json:"landing_page"` + } `json:"refs"` + Locations []struct { + Name string `json:"name"` + } `json:"locations"` + PublicationDate string `json:"publication_date"` + } `json:"results"` +} + +func (a *TheMuseAdapter) Search(ctx context.Context, keyword string, req models.ScrapeRequest) ([]models.Job, error) { + maxPages := req.MaxPagesPerKeyword + if maxPages <= 0 { + maxPages = 3 + } + + pageTimeout := time.Duration(req.PageTimeoutMs) * time.Millisecond + if pageTimeout <= 0 { + pageTimeout = 15 * time.Second + } + + waitBetween := time.Duration(req.WaitBetweenSearchesMs) * time.Millisecond + if waitBetween <= 0 { + waitBetween = 1000 * time.Millisecond + } + + var allJobs []models.Job + + for page := 1; page <= maxPages; page++ { + endpoint := buildTheMuseURL(keyword, req, page) + + pageCtx, cancel := context.WithTimeout(ctx, pageTimeout) + jobs, err := a.fetchPage(pageCtx, endpoint, keyword) + cancel() + + if err != nil { + return nil, err + } + + if len(jobs) == 0 { + // Espelha o break do JS quando results está vazio. + break + } + + allJobs = append(allJobs, jobs...) + + if page < maxPages { + select { + case <-ctx.Done(): + return allJobs, nil + case <-time.After(waitBetween): + } + } + } + + return allJobs, nil +} + +func (a *TheMuseAdapter) fetchPage(ctx context.Context, endpoint, keyword string) ([]models.Job, error) { + httpReq, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, nil) + if err != nil { + return nil, err + } + + resp, err := a.client.Do(httpReq) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("status %d", resp.StatusCode) + } + + var data theMuseResponse + if err := json.NewDecoder(resp.Body).Decode(&data); err != nil { + return nil, err + } + + if len(data.Results) == 0 { + return []models.Job{}, nil + } + + jobs := make([]models.Job, 0, len(data.Results)) + for _, r := range data.Results { + // Espelha: Array.isArray(job.locations) ? job.locations.map(i => i.name).join(", ") : "" + locationParts := make([]string, 0, len(r.Locations)) + for _, loc := range r.Locations { + locationParts = append(locationParts, loc.Name) + } + local := strings.Join(locationParts, ", ") + + jobs = append(jobs, models.Job{ + ID: strings.TrimSpace(r.Refs.LandingPage), + Title: strings.TrimSpace(r.Name), + Company: strings.TrimSpace(r.Company.Name), + Location: local, + URL: strings.TrimSpace(r.Refs.LandingPage), + PostedAt: r.PublicationDate, + Source: "The Muse", + Sources: []string{"The Muse"}, + Keyword: keyword, + Keywords: []string{keyword}, + }) + } + + return jobs, nil +} diff --git a/scraper-go/internal/cache/cache.go b/scraper-go/internal/cache/cache.go new file mode 100644 index 0000000..60ceda1 --- /dev/null +++ b/scraper-go/internal/cache/cache.go @@ -0,0 +1,10 @@ +package cache + +import "time" + +type Cache interface { + Get(key string, target any) (bool, error) + Set(key string, value any, ttl time.Duration) error + Delete(key string) error + Clear() error +} diff --git a/scraper-go/internal/cache/factory.go b/scraper-go/internal/cache/factory.go new file mode 100644 index 0000000..8cdbfec --- /dev/null +++ b/scraper-go/internal/cache/factory.go @@ -0,0 +1,21 @@ +package cache + +import ( + "os" + + "github.com/redis/go-redis/v9" +) + +func NewCache() Cache { + redisURL := os.Getenv("REDIS_URL") + + if redisURL == "" { + return NewMemoryCache() + } + + client := redis.NewClient(&redis.Options{ + Addr: redisURL, + }) + + return NewRedisCache(client) +} diff --git a/scraper-go/internal/cache/helpers.go b/scraper-go/internal/cache/helpers.go new file mode 100644 index 0000000..4f28209 --- /dev/null +++ b/scraper-go/internal/cache/helpers.go @@ -0,0 +1,20 @@ +package cache + +func GetAs[T any](c Cache, key string) (T, bool, error) { + var target T + + found, err := c.Get(key, &target) + if err != nil { + var zero T + return zero, false, err + } + + return target, found, nil +} + +func MustGetAs[T any](c Cache, key string) (T, error) { + var target T + + _, err := c.Get(key, &target) + return target, err +} diff --git a/scraper-go/internal/cache/memory.go b/scraper-go/internal/cache/memory.go new file mode 100644 index 0000000..ee556a0 --- /dev/null +++ b/scraper-go/internal/cache/memory.go @@ -0,0 +1,86 @@ +package cache + +import ( + "encoding/json" + "sync" + "time" +) + +type memoryEntry struct { + Value []byte + ExpiresAt time.Time +} + +type MemoryCache struct { + mu sync.RWMutex + store map[string]memoryEntry +} + +func NewMemoryCache() *MemoryCache { + return &MemoryCache{ + store: make(map[string]memoryEntry), + } +} + +func (m *MemoryCache) Get( + key string, + target any, +) (bool, error) { + m.mu.RLock() + entry, exists := m.store[key] + m.mu.RUnlock() + + if !exists { + return false, nil + } + + if time.Now().After(entry.ExpiresAt) { + _ = m.Delete(key) + return false, nil + } + + if err := json.Unmarshal(entry.Value, target); err != nil { + return false, err + } + + return true, nil +} + +func (m *MemoryCache) Set( + key string, + value any, + ttl time.Duration, +) error { + payload, err := json.Marshal(value) + if err != nil { + return err + } + + m.mu.Lock() + defer m.mu.Unlock() + + m.store[key] = memoryEntry{ + Value: payload, + ExpiresAt: time.Now().Add(ttl), + } + + return nil +} + +func (m *MemoryCache) Delete(key string) error { + m.mu.Lock() + defer m.mu.Unlock() + + delete(m.store, key) + + return nil +} + +func (m *MemoryCache) Clear() error { + m.mu.Lock() + defer m.mu.Unlock() + + m.store = make(map[string]memoryEntry) + + return nil +} diff --git a/scraper-go/internal/cache/redis.go b/scraper-go/internal/cache/redis.go new file mode 100644 index 0000000..3ff60ea --- /dev/null +++ b/scraper-go/internal/cache/redis.go @@ -0,0 +1,68 @@ +package cache + +import ( + "context" + "encoding/json" + "time" + + "github.com/redis/go-redis/v9" +) + +type RedisCache struct { + client *redis.Client + ctx context.Context +} + +func NewRedisCache(client *redis.Client) *RedisCache { + return &RedisCache{ + client: client, + ctx: context.Background(), + } +} + +func (r *RedisCache) Get( + key string, + target any, +) (bool, error) { + value, err := r.client.Get(r.ctx, key).Result() + + if err == redis.Nil { + return false, nil + } + + if err != nil { + return false, err + } + + if err := json.Unmarshal([]byte(value), target); err != nil { + return false, err + } + + return true, nil +} + +func (r *RedisCache) Set( + key string, + value any, + ttl time.Duration, +) error { + payload, err := json.Marshal(value) + if err != nil { + return err + } + + return r.client.Set( + r.ctx, + key, + payload, + ttl, + ).Err() +} + +func (r *RedisCache) Delete(key string) error { + return r.client.Del(r.ctx, key).Err() +} + +func (r *RedisCache) Clear() error { + return r.client.FlushDB(r.ctx).Err() +} diff --git a/scraper-go/internal/cache/status.go b/scraper-go/internal/cache/status.go new file mode 100644 index 0000000..81e3a61 --- /dev/null +++ b/scraper-go/internal/cache/status.go @@ -0,0 +1,5 @@ +package cache + +type Status struct { + Provider string `json:"provider"` +} diff --git a/scraper-go/internal/dedup/dedup.go b/scraper-go/internal/dedup/dedup.go new file mode 100644 index 0000000..76baf07 --- /dev/null +++ b/scraper-go/internal/dedup/dedup.go @@ -0,0 +1,158 @@ +package dedup + +import ( + "net/url" + "strings" + "unicode" + + "golang.org/x/text/transform" + "golang.org/x/text/unicode/norm" + + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/models" +) + +func DedupeJobs(jobs []models.Job) []models.Job { + unique := make(map[string]*models.Job, len(jobs)) + + for i := range jobs { + job := jobs[i] + key := buildKey(&job) + + if existing, ok := unique[key]; ok { + merged := merge(existing, &job) + unique[key] = merged + continue + } + + if len(job.Sources) == 0 { + job.Sources = []string{job.Source} + } + if len(job.Keywords) == 0 { + job.Keywords = []string{job.Keyword} + } + + unique[key] = &job + } + + result := make([]models.Job, 0, len(unique)) + for _, j := range unique { + result = append(result, *j) + } + + return result +} + +func buildKey(j *models.Job) string { + title := normalizeText(j.Title) + company := normalizeText(j.Company) + location := normalizeText(j.Location) + + if title != "" && company != "" && location != "" { + return "identity:" + title + "|" + company + "|" + location + } + + if title != "" && company != "" { + loc := location + if loc == "" { + loc = "sem-local" + } + return "identity:" + title + "|" + company + "|" + loc + } + + if link := normalizeURL(j.URL); link != "" { + return "url:" + link + } + + return "fallback:" + title + "|" + company + "|" + location + "|" + normalizeText(j.Source) +} + +func merge(existing, incoming *models.Job) *models.Job { + merged := *existing + + merged.Sources = uniqueStrings(append(existing.Sources, incoming.Sources...)) + merged.Source = strings.Join(merged.Sources, ", ") + + merged.Keywords = uniqueStrings(append(existing.Keywords, incoming.Keywords...)) + if len(merged.Keywords) > 0 { + merged.Keyword = merged.Keywords[0] + } + + merged.Title = longest(existing.Title, incoming.Title) + merged.Company = longest(existing.Company, incoming.Company) + merged.Location = longest(existing.Location, incoming.Location) + merged.URL = longest(existing.URL, incoming.URL) + + return &merged +} + +func normalizeText(s string) string { + t := transform.Chain(norm.NFD, transform.RemoveFunc(func(r rune) bool { + return unicode.Is(unicode.Mn, r) + }), norm.NFC) + + result, _, _ := transform.String(t, s) + + var b strings.Builder + for _, r := range strings.ToLower(result) { + if unicode.IsLetter(r) || unicode.IsNumber(r) { + b.WriteRune(r) + } else { + b.WriteRune(' ') + } + } + + return strings.Join(strings.Fields(b.String()), " ") +} + +func normalizeURL(raw string) string { + if raw == "" { + return "" + } + + u, err := url.Parse(raw) + if err != nil { + if idx := strings.IndexAny(raw, "?#"); idx != -1 { + raw = raw[:idx] + } + return strings.TrimRight(raw, "/") + } + + u.RawQuery = "" + u.Fragment = "" + + return strings.TrimRight(u.String(), "/") +} + +func coalesce(values ...string) string { + for _, v := range values { + if v = strings.TrimSpace(v); v != "" { + return v + } + } + return "" +} + +func longest(a, b string) string { + if len(b) > len(a) { + return b + } + return a +} + +func uniqueStrings(input []string) []string { + seen := make(map[string]struct{}, len(input)) + out := make([]string, 0, len(input)) + + for _, s := range input { + s = strings.TrimSpace(s) + if s == "" { + continue + } + if _, ok := seen[s]; !ok { + seen[s] = struct{}{} + out = append(out, s) + } + } + + return out +} diff --git a/scraper-go/internal/dedup/normalize.go b/scraper-go/internal/dedup/normalize.go new file mode 100644 index 0000000..cfd0ed5 --- /dev/null +++ b/scraper-go/internal/dedup/normalize.go @@ -0,0 +1,29 @@ +package dedup + +import ( + "net/url" + "regexp" + "strings" +) + +var spaces = regexp.MustCompile(`\s+`) + +func NormalizeText(v string) string { + v = strings.ToLower(strings.TrimSpace(v)) + v = spaces.ReplaceAllString(v, " ") + + return v +} + +func NormalizeURL(raw string) string { + u, err := url.Parse(raw) + + if err != nil { + return raw + } + + u.RawQuery = "" + u.Fragment = "" + + return strings.TrimRight(u.String(), "/") +} diff --git a/scraper-go/internal/inflight/inflight.go b/scraper-go/internal/inflight/inflight.go new file mode 100644 index 0000000..e732189 --- /dev/null +++ b/scraper-go/internal/inflight/inflight.go @@ -0,0 +1,28 @@ +package inflight + +import ( + "fmt" + + "golang.org/x/sync/singleflight" +) + +var group singleflight.Group + +func Do[T any](key string, fn func() (T, error)) (T, error) { + v, err, _ := group.Do(key, func() (interface{}, error) { + return fn() + }) + + if err != nil { + var zero T + return zero, err + } + + result, ok := v.(T) + if !ok { + var zero T + return zero, fmt.Errorf("invalid singleflight type") + } + + return result, nil +} diff --git a/scraper-go/internal/interfaces/greenhouseCompanies.json b/scraper-go/internal/interfaces/greenhouseCompanies.json new file mode 100644 index 0000000..265707e --- /dev/null +++ b/scraper-go/internal/interfaces/greenhouseCompanies.json @@ -0,0 +1,34 @@ +[ + "ernstandyoung", + "ernstyouth", + "ey", + "varsitytutors", + "bostonconsultinggroup", + "bcg", + "disney", + "riotgames", + "reddit", + "sony", + "twitch", + "robinhood", + "snapchat", + "paloaltonetworks", + "nerdwallet", + "coursera", + "doordash", + "affirm", + "cloudera", + "automattic", + "gitlab", + "elastic", + "confluent", + "databricks", + "instacart", + "asana", + "zoom", + "peloton", + "box", + "okta", + "twilio", + "lakefieldveterinarygroup" +] diff --git a/scraper-go/internal/interfaces/leverCompanies.json b/scraper-go/internal/interfaces/leverCompanies.json new file mode 100644 index 0000000..c29746a --- /dev/null +++ b/scraper-go/internal/interfaces/leverCompanies.json @@ -0,0 +1,36 @@ +[ + { "slug": "netlify", "name": "Netlify" }, + { "slug": "vercel", "name": "Vercel" }, + { "slug": "postman", "name": "Postman" }, + { "slug": "sentry", "name": "Sentry" }, + { "slug": "supabase", "name": "Supabase" }, + { "slug": "planetscale", "name": "PlanetScale" }, + { "slug": "render", "name": "Render" }, + { "slug": "railway", "name": "Railway" }, + { "slug": "flyio", "name": "Fly.io" }, + { "slug": "typeform", "name": "Typeform" }, + { "slug": "hotjar", "name": "Hotjar" }, + { "slug": "contentful", "name": "Contentful" }, + { "slug": "algolia", "name": "Algolia" }, + { "slug": "front", "name": "Front" }, + { "slug": "segment", "name": "Segment" }, + { "slug": "linear", "name": "Linear" }, + { "slug": "retool", "name": "Retool" }, + { "slug": "loom", "name": "Loom" }, + { "slug": "superhuman", "name": "Superhuman" }, + { "slug": "pitch", "name": "Pitch" }, + { "slug": "mercury", "name": "Mercury" }, + { "slug": "alchemy", "name": "Alchemy" }, + { "slug": "chainlink", "name": "Chainlink" }, + { "slug": "openzeppelin", "name": "OpenZeppelin" }, + { "slug": "replicate", "name": "Replicate" }, + { "slug": "twelve-labs", "name": "Twelve Labs" }, + { "slug": "buffer", "name": "Buffer" }, + { "slug": "gitlab", "name": "GitLab" }, + { "slug": "automattic", "name": "Automattic" }, + { "slug": "wise", "name": "Wise" }, + { "slug": "klarna", "name": "Klarna" }, + { "slug": "glossier", "name": "Glossier" }, + { "slug": "patreon", "name": "Patreon" }, + { "slug": "robinhood", "name": "Robinhood" } +] diff --git a/scraper-go/internal/keywords/defaults.go b/scraper-go/internal/keywords/defaults.go new file mode 100644 index 0000000..f0557e0 --- /dev/null +++ b/scraper-go/internal/keywords/defaults.go @@ -0,0 +1,45 @@ +package keywords + +import ( + "encoding/json" + "log/slog" + "os" +) + +type keywordsFile struct { + KEYWORDS []string `json:"KEYWORDS"` +} + +func LoadDefaultKeywords() []string { + // Agora que voltou para a pasta keywords: + paths := []string{ + "/app/internal/keywords/keywords.json", // Caminho no Docker + "./internal/keywords/keywords.json", // Caminho local + } + + var data []byte + var err error + + for _, p := range paths { + data, err = os.ReadFile(p) + if err == nil { + break + } + } + + if err != nil { + slog.Warn("Arquivo keywords.json não encontrado, usando .env ou lista vazia") + if env := os.Getenv("KEYWORDS"); env != "" { + return []string{env} + } + return []string{} + } + + var parsed keywordsFile + if err := json.Unmarshal(data, &parsed); err != nil { + slog.Error("Erro no unmarshal do JSON", "error", err) + return []string{} + } + + return NormalizeKeywords(parsed.KEYWORDS) +} diff --git a/scraper-go/internal/keywords/keywords.json b/scraper-go/internal/keywords/keywords.json new file mode 100644 index 0000000..f311368 --- /dev/null +++ b/scraper-go/internal/keywords/keywords.json @@ -0,0 +1,170 @@ +{ + "KEYWORDS": [ + "UX Designer", + "UI Designer", + "UX/UI Designer", + "Product Designer", + "Interaction Designer", + "Visual Designer", + "Service Designer", + "Design Lead", + "Product Manager", + "Product Owner", + "Product Analyst", + "Growth Product Manager", + "Technical Product Manager", + + "Frontend Developer", + "Frontend Engineer", + "Web Developer", + "React Developer", + "Next.js Developer", + "Vue Developer", + "Angular Developer", + "JavaScript Developer", + "TypeScript Developer", + "UI Engineer", + "Frontend Architect", + + "Backend Developer", + "Backend Engineer", + "Node.js Developer", + "NestJS Developer", + "Java Developer", + "Spring Boot Developer", + "Python Developer", + "Django Developer", + "Flask Developer", + "Ruby Developer", + "Rails Developer", + "PHP Developer", + "Laravel Developer", + "Go Developer", + "Golang Developer", + "Rust Developer", + ".NET Developer", + "C# Developer", + + "Fullstack Developer", + "Fullstack Engineer", + "Software Engineer", + "Software Developer", + "Application Developer", + "Platform Engineer", + + "Mobile Developer", + "iOS Developer", + "Android Developer", + "React Native Developer", + "Flutter Developer", + "Mobile Engineer", + + "Data Engineer", + "Data Analyst", + "Data Scientist", + "Machine Learning Engineer", + "ML Engineer", + "AI Engineer", + "Analytics Engineer", + "BI Analyst", + "Business Intelligence Developer", + + "DevOps Engineer", + "Site Reliability Engineer", + "SRE", + "Cloud Engineer", + "Platform Engineer", + "Infrastructure Engineer", + "Systems Engineer", + + "Security Engineer", + "Application Security Engineer", + "Cybersecurity Analyst", + "Information Security Engineer", + "DevSecOps Engineer", + + "QA Engineer", + "Test Engineer", + "Automation Engineer", + "QA Analyst", + "Software Tester", + "SDET", + + "Game Developer", + "Unity Developer", + "Unreal Developer", + + "Embedded Engineer", + "Firmware Engineer", + "Hardware Engineer", + "IoT Developer", + + "Blockchain Developer", + "Web3 Developer", + "Smart Contract Developer", + "Solidity Developer", + + "AR Developer", + "VR Developer", + "XR Developer", + + "Technical Lead", + "Tech Lead", + "Engineering Manager", + "Head of Engineering", + "CTO", + + "Startup Engineer", + "Founding Engineer", + + "Intern Software Engineer", + "Junior Developer", + "Mid-level Developer", + "Senior Developer", + "Lead Developer", + "Principal Engineer", + "Staff Engineer", + + "Remote Developer", + "Remote Software Engineer", + "Remote Frontend Developer", + "Remote Backend Developer", + + "Docker", + "Kubernetes", + "Terraform", + "Ansible", + "CI/CD", + "GitHub Actions", + "GitLab CI", + "Jenkins", + "Microservices", + "Distributed Systems", + "REST API", + "GraphQL", + "gRPC", + + "AWS", + "Azure", + "Google Cloud", + "GCP", + "Serverless", + "Lambda", + "Cloud Functions", + + "PostgreSQL", + "MySQL", + "MongoDB", + "Redis", + "Elasticsearch", + "Kafka", + "RabbitMQ", + "DynamoDB", + + "Agile", + "Scrum", + "Kanban", + "Lean", + "XP" + ] +} diff --git a/scraper-go/internal/keywords/normalize.go b/scraper-go/internal/keywords/normalize.go new file mode 100644 index 0000000..c7bcb96 --- /dev/null +++ b/scraper-go/internal/keywords/normalize.go @@ -0,0 +1,25 @@ +package keywords + +import "strings" + +func NormalizeKeywords(keywords []string) []string { + unique := make(map[string]struct{}) + var result []string + + for _, k := range keywords { + k = strings.TrimSpace(k) + + if k == "" { + continue + } + + if _, exists := unique[k]; exists { + continue + } + + unique[k] = struct{}{} + result = append(result, k) + } + + return result +} diff --git a/scraper-go/internal/keywords/store.go b/scraper-go/internal/keywords/store.go new file mode 100644 index 0000000..9e7af91 --- /dev/null +++ b/scraper-go/internal/keywords/store.go @@ -0,0 +1,81 @@ +package keywords + +import ( + "context" + "encoding/json" + "os" + + "github.com/redis/go-redis/v9" +) + +type Store struct { + redis *redis.Client +} + +func NewStore(redis *redis.Client) *Store { + return &Store{ + redis: redis, + } +} + +func (s *Store) redisKey() string { + key := os.Getenv("KEYWORDS_REDIS_KEY") + + if key != "" { + return key + } + + prefix := os.Getenv("REDIS_KEY_PREFIX") + + if prefix == "" { + prefix = "vagas-full" + } + + return prefix + ":keywords" +} + +func (s *Store) Load( + ctx context.Context, +) ([]string, error) { + + fallback := LoadDefaultKeywords() + + raw, err := s.redis.Get(ctx, s.redisKey()).Result() + + if err == redis.Nil { + return fallback, nil + } + + if err != nil { + return fallback, err + } + + var keywords []string + + if err := json.Unmarshal([]byte(raw), &keywords); err != nil { + return fallback, nil + } + + return NormalizeKeywords(keywords), nil +} + +func (s *Store) Save( + ctx context.Context, + keywords []string, +) error { + + normalized := NormalizeKeywords(keywords) + + payload, err := json.Marshal(normalized) + + if err != nil { + return err + } + + return s.redis.Set( + ctx, + s.redisKey(), + payload, + 0, + ).Err() +} diff --git a/scraper-go/internal/models/job.go b/scraper-go/internal/models/job.go new file mode 100644 index 0000000..669882e --- /dev/null +++ b/scraper-go/internal/models/job.go @@ -0,0 +1,40 @@ +package models + +type Job struct { + ID string `json:"id"` + Title string `json:"title"` + Company string `json:"company"` + Location string `json:"location"` + URL string `json:"url"` + Salary string `json:"salary,omitempty"` + Modality string `json:"modality,omitempty"` + Description string `json:"description,omitempty"` + PostedAt string `json:"postedAt,omitempty"` + Source string `json:"source"` + Sources []string `json:"sources"` + Keyword string `json:"keyword"` + Keywords []string `json:"keywords"` +} + +type ScrapeRequest struct { + Keywords []string `json:"keywords"` + SearchLocation string `json:"searchLocation"` + SearchGeoID string `json:"searchGeoId"` + SearchLanguage string `json:"searchLanguage"` + JobTypes string `json:"jobTypes"` + TimeFilter string `json:"timeFilter"` + RemoteOnly bool `json:"remoteOnly"` + Sources []string `json:"sources"` + ResultsPerPage int `json:"resultsPerPage"` + MaxPagesPerKeyword int `json:"maxPagesPerKeyword"` + WaitBetweenSearchesMs int `json:"waitBetweenSearchesMs"` + PageTimeoutMs int `json:"pageTimeoutMs"` + MaxConcurrency int `json:"maxConcurrency"` +} + +type ScrapeResponse struct { + Jobs []Job `json:"jobs"` + Total int `json:"total"` + CachedAt string `json:"cachedAt"` + FromCache bool `json:"fromCache"` +} diff --git a/scraper-go/internal/pipeline/cache_key.go b/scraper-go/internal/pipeline/cache_key.go new file mode 100644 index 0000000..472027e --- /dev/null +++ b/scraper-go/internal/pipeline/cache_key.go @@ -0,0 +1,34 @@ +package pipeline + +import ( + "sort" + "strings" +) + +func BuildCacheKey(config SearchConfig) string { + keywords := normalizeKeywords(config.Keywords) + + return strings.Join([]string{ + "jobs", + strings.Join(keywords, ","), + strings.ToLower(strings.TrimSpace(config.SearchLocation)), + config.JobTypes, + config.TimeFilter, + }, ":") +} + +func normalizeKeywords(keywords []string) []string { + var normalized []string + + for _, k := range keywords { + k = strings.ToLower(strings.TrimSpace(k)) + + if k != "" { + normalized = append(normalized, k) + } + } + + sort.Strings(normalized) + + return normalized +} diff --git a/scraper-go/internal/pipeline/pipeline.go b/scraper-go/internal/pipeline/pipeline.go new file mode 100644 index 0000000..ba3c35c --- /dev/null +++ b/scraper-go/internal/pipeline/pipeline.go @@ -0,0 +1,85 @@ +package pipeline + +import ( + "context" + "log/slog" + "sync" + + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/adapters" + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/dedup" + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/models" +) + +const defaultMaxConcurrency = 20 + +type result struct { + jobs []models.Job + err error +} + +// Run executa todas as combinações adapter × keyword em paralelo, +// respeitando o limite de concorrência, e devolve as vagas deduplicadas. +func Run(ctx context.Context, adapterList []adapters.Adapter, req models.ScrapeRequest) []models.Job { + maxConcurrency := req.MaxConcurrency + if maxConcurrency <= 0 { + maxConcurrency = defaultMaxConcurrency + } + + type task struct { + adapter adapters.Adapter + keyword string + } + + tasks := make([]task, 0, len(adapterList)*len(req.Keywords)) + for _, a := range adapterList { + for _, kw := range req.Keywords { + tasks = append(tasks, task{adapter: a, keyword: kw}) + } + } + + sem := make(chan struct{}, maxConcurrency) + results := make(chan result, len(tasks)) + var wg sync.WaitGroup + + for _, t := range tasks { + wg.Add(1) + sem <- struct{}{} + + go func(t task) { + defer wg.Done() + defer func() { <-sem }() + + jobs, err := t.adapter.Search(ctx, t.keyword, req) + results <- result{jobs: jobs, err: err} + + if err != nil { + slog.Warn("adapter falhou", + "source", t.adapter.SourceName(), + "keyword", t.keyword, + "error", err, + ) + return + } + + slog.Info("adapter concluído", + "source", t.adapter.SourceName(), + "keyword", t.keyword, + "count", len(jobs), + ) + }(t) + } + + go func() { + wg.Wait() + close(results) + }() + + var allJobs []models.Job + for r := range results { + if r.err == nil { + allJobs = append(allJobs, r.jobs...) + } + } + + return dedup.DedupeJobs(allJobs) +} diff --git a/scraper-go/internal/pipeline/scrape.go b/scraper-go/internal/pipeline/scrape.go new file mode 100644 index 0000000..b29c184 --- /dev/null +++ b/scraper-go/internal/pipeline/scrape.go @@ -0,0 +1,46 @@ +package pipeline + +import ( + "context" + "log/slog" + + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/adapters" + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/dedup" + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/models" +) + +type SearchConfig struct { + Keywords []string `json:"keywords"` + SearchLocation string `json:"searchLocation"` + JobTypes string `json:"jobTypes"` + TimeFilter string `json:"timeFilter"` + RemoteOnly bool `json:"remoteOnly"` +} + +func ScrapeAllSources( + ctx context.Context, + config SearchConfig, +) ([]models.Job, error) { + slog.Info("starting scrape", "keywords", config.Keywords) + + adapterList := adapters.GetAdapters() + + req := models.ScrapeRequest{ + Keywords: config.Keywords, + SearchLocation: config.SearchLocation, + JobTypes: config.JobTypes, + TimeFilter: config.TimeFilter, + RemoteOnly: config.RemoteOnly, + } + + jobs := Run(ctx, adapterList, req) + + deduped := dedup.DedupeJobs(jobs) + + slog.Info("scrape finished", + "raw_jobs", len(jobs), + "deduped_jobs", len(deduped), + ) + + return deduped, nil +} diff --git a/scraper-go/internal/pipeline/search.go b/scraper-go/internal/pipeline/search.go new file mode 100644 index 0000000..1361650 --- /dev/null +++ b/scraper-go/internal/pipeline/search.go @@ -0,0 +1,56 @@ +package pipeline + +import ( + "context" + "time" + + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/cache" + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/inflight" + "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/models" +) + +type SearchResult struct { + Jobs []models.Job `json:"jobs"` + Total int `json:"total"` + CachedAt time.Time `json:"cachedAt"` + FromCache bool `json:"fromCache"` +} + +var searchCache = cache.NewMemoryCache() + +func SearchJobs( + ctx context.Context, + config SearchConfig, + ttl time.Duration, +) (SearchResult, error) { + cacheKey := BuildCacheKey(config) + + var cached SearchResult + if found, _ := searchCache.Get(cacheKey, &cached); found { + cached.FromCache = true + return cached, nil + } + + return inflight.Do(cacheKey, func() (SearchResult, error) { + var cached SearchResult + if found, _ := searchCache.Get(cacheKey, &cached); found { + cached.FromCache = true + return cached, nil + } + + jobs, err := ScrapeAllSources(ctx, config) + if err != nil { + return SearchResult{}, err + } + + result := SearchResult{ + Jobs: jobs, + Total: len(jobs), + CachedAt: time.Now(), + FromCache: false, + } + + _ = searchCache.Set(cacheKey, result, ttl) + return result, nil + }) +} diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/.gitattributes b/scraper-go/vendor/github.com/PuerkitoBio/goquery/.gitattributes new file mode 100644 index 0000000..0cc26ec --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/.gitattributes @@ -0,0 +1 @@ +testdata/* linguist-vendored diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/.gitignore b/scraper-go/vendor/github.com/PuerkitoBio/goquery/.gitignore new file mode 100644 index 0000000..970381c --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/.gitignore @@ -0,0 +1,16 @@ +# editor temporary files +*.sublime-* +.DS_Store +*.swp +#*.*# +tags + +# direnv config +.env* + +# test binaries +*.test + +# coverage and profilte outputs +*.out + diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/LICENSE b/scraper-go/vendor/github.com/PuerkitoBio/goquery/LICENSE new file mode 100644 index 0000000..25372c2 --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/LICENSE @@ -0,0 +1,12 @@ +Copyright (c) 2012-2021, Martin Angers & Contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +* Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/README.md b/scraper-go/vendor/github.com/PuerkitoBio/goquery/README.md new file mode 100644 index 0000000..395314a --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/README.md @@ -0,0 +1,218 @@ +# goquery - a little like that j-thing, only in Go + +[![Build Status](https://github.com/PuerkitoBio/goquery/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/PuerkitoBio/goquery/actions) +[![Go Reference](https://pkg.go.dev/badge/github.com/PuerkitoBio/goquery.svg)](https://pkg.go.dev/github.com/PuerkitoBio/goquery) +[![Sourcegraph Badge](https://sourcegraph.com/github.com/PuerkitoBio/goquery/-/badge.svg)](https://sourcegraph.com/github.com/PuerkitoBio/goquery?badge) + +goquery brings a syntax and a set of features similar to [jQuery][] to the [Go language][go]. It is based on Go's [net/html package][html] and the CSS Selector library [cascadia][]. Since the net/html parser returns nodes, and not a full-featured DOM tree, jQuery's stateful manipulation functions (like height(), css(), detach()) have been left off. + +Also, because the net/html parser requires UTF-8 encoding, so does goquery: it is the caller's responsibility to ensure that the source document provides UTF-8 encoded HTML. See the [wiki][] for various options to do this. + +Syntax-wise, it is as close as possible to jQuery, with the same function names when possible, and that warm and fuzzy chainable interface. jQuery being the ultra-popular library that it is, I felt that writing a similar HTML-manipulating library was better to follow its API than to start anew (in the same spirit as Go's `fmt` package), even though some of its methods are less than intuitive (looking at you, [index()][index]...). + +## Table of Contents + +* [Installation](#installation) +* [Changelog](#changelog) +* [API](#api) +* [Examples](#examples) +* [Related Projects](#related-projects) +* [Support](#support) +* [License](#license) + +## Installation + +Required Go version: + +* Starting with version `v1.12.0` of goquery, Go 1.25+ is required due to its dependencies. +* Starting with version `v1.11.0` of goquery, Go 1.24+ is required due to its dependencies. +* Starting with version `v1.10.0` of goquery, Go 1.23+ is required due to the use of function-based iterators. +* For `v1.9.0` of goquery, Go 1.18+ is required due to the use of generics. +* For previous goquery versions, a Go version of 1.1+ was required because of the `net/html` dependency. + +Ongoing goquery development is tested on the latest 2 versions of Go. + + $ go get github.com/PuerkitoBio/goquery + +(optional) To run unit tests: + + $ cd $GOPATH/src/github.com/PuerkitoBio/goquery + $ go test + +(optional) To run benchmarks (warning: it runs for a few minutes): + + $ cd $GOPATH/src/github.com/PuerkitoBio/goquery + $ go test -bench=".*" + +## Changelog + +**Note that goquery's API is now stable, and will not break.** + +* **2026-03-15 (v1.12.0)** : Update `go.mod` dependencies, add go1.26 to the test matrix, **goquery now requires Go version 1.25+**. +* **2025-11-16 (v1.11.0)** : Update `go.mod` dependencies, add go1.25 to the test matrix, **goquery now requires Go version 1.24+**. +* **2025-04-11 (v1.10.3)** : Update `go.mod` dependencies, small optimization (thanks [@myxzlpltk](https://github.com/myxzlpltk)). +* **2025-02-13 (v1.10.2)** : Update `go.mod` dependencies, add go1.24 to the test matrix. +* **2024-12-26 (v1.10.1)** : Update `go.mod` dependencies. +* **2024-09-06 (v1.10.0)** : Add `EachIter` which provides an iterator that can be used in `for..range` loops on the `*Selection` object. **goquery now requires Go version 1.23+** (thanks [@amikai](https://github.com/amikai)). +* **2024-09-06 (v1.9.3)** : Update `go.mod` dependencies. +* **2024-04-29 (v1.9.2)** : Update `go.mod` dependencies. +* **2024-02-29 (v1.9.1)** : Improve allocation and performance of the `Map` function and `Selection.Map` method, better document the cascadia differences (thanks [@jwilsson](https://github.com/jwilsson)). +* **2024-02-22 (v1.9.0)** : Add a generic `Map` function, **goquery now requires Go version 1.18+** (thanks [@Fesaa](https://github.com/Fesaa)). +* **2023-02-18 (v1.8.1)** : Update `go.mod` dependencies, update CI workflow. +* **2021-10-25 (v1.8.0)** : Add `Render` function to render a `Selection` to an `io.Writer` (thanks [@anthonygedeon](https://github.com/anthonygedeon)). +* **2021-07-11 (v1.7.1)** : Update go.mod dependencies and add dependabot config (thanks [@jauderho](https://github.com/jauderho)). +* **2021-06-14 (v1.7.0)** : Add `Single` and `SingleMatcher` functions to optimize first-match selection (thanks [@gdollardollar](https://github.com/gdollardollar)). +* **2021-01-11 (v1.6.1)** : Fix panic when calling `{Prepend,Append,Set}Html` on a `Selection` that contains non-Element nodes. +* **2020-10-08 (v1.6.0)** : Parse html in context of the container node for all functions that deal with html strings (`AfterHtml`, `AppendHtml`, etc.). Thanks to [@thiemok][thiemok] and [@davidjwilkins][djw] for their work on this. +* **2020-02-04 (v1.5.1)** : Update module dependencies. +* **2018-11-15 (v1.5.0)** : Go module support (thanks @Zaba505). +* **2018-06-07 (v1.4.1)** : Add `NewDocumentFromReader` examples. +* **2018-03-24 (v1.4.0)** : Deprecate `NewDocument(url)` and `NewDocumentFromResponse(response)`. +* **2018-01-28 (v1.3.0)** : Add `ToEnd` constant to `Slice` until the end of the selection (thanks to @davidjwilkins for raising the issue). +* **2018-01-11 (v1.2.0)** : Add `AddBack*` and deprecate `AndSelf` (thanks to @davidjwilkins). +* **2017-02-12 (v1.1.0)** : Add `SetHtml` and `SetText` (thanks to @glebtv). +* **2016-12-29 (v1.0.2)** : Optimize allocations for `Selection.Text` (thanks to @radovskyb). +* **2016-08-28 (v1.0.1)** : Optimize performance for large documents. +* **2016-07-27 (v1.0.0)** : Tag version 1.0.0. +* **2016-06-15** : Invalid selector strings internally compile to a `Matcher` implementation that never matches any node (instead of a panic). So for example, `doc.Find("~")` returns an empty `*Selection` object. +* **2016-02-02** : Add `NodeName` utility function similar to the DOM's `nodeName` property. It returns the tag name of the first element in a selection, and other relevant values of non-element nodes (see [doc][] for details). Add `OuterHtml` utility function similar to the DOM's `outerHTML` property (named `OuterHtml` in small caps for consistency with the existing `Html` method on the `Selection`). +* **2015-04-20** : Add `AttrOr` helper method to return the attribute's value or a default value if absent. Thanks to [piotrkowalczuk][piotr]. +* **2015-02-04** : Add more manipulation functions - Prepend* - thanks again to [Andrew Stone][thatguystone]. +* **2014-11-28** : Add more manipulation functions - ReplaceWith*, Wrap* and Unwrap - thanks again to [Andrew Stone][thatguystone]. +* **2014-11-07** : Add manipulation functions (thanks to [Andrew Stone][thatguystone]) and `*Matcher` functions, that receive compiled cascadia selectors instead of selector strings, thus avoiding potential panics thrown by goquery via `cascadia.MustCompile` calls. This results in better performance (selectors can be compiled once and reused) and more idiomatic error handling (you can handle cascadia's compilation errors, instead of recovering from panics, which had been bugging me for a long time). Note that the actual type expected is a `Matcher` interface, that `cascadia.Selector` implements. Other matcher implementations could be used. +* **2014-11-06** : Change import paths of net/html to golang.org/x/net/html (see https://groups.google.com/forum/#!topic/golang-nuts/eD8dh3T9yyA). Make sure to update your code to use the new import path too when you call goquery with `html.Node`s. +* **v0.3.2** : Add `NewDocumentFromReader()` (thanks jweir) which allows creating a goquery document from an io.Reader. +* **v0.3.1** : Add `NewDocumentFromResponse()` (thanks assassingj) which allows creating a goquery document from an http response. +* **v0.3.0** : Add `EachWithBreak()` which allows to break out of an `Each()` loop by returning false. This function was added instead of changing the existing `Each()` to avoid breaking compatibility. +* **v0.2.1** : Make go-getable, now that [go.net/html is Go1.0-compatible][gonet] (thanks to @matrixik for pointing this out). +* **v0.2.0** : Add support for negative indices in Slice(). **BREAKING CHANGE** `Document.Root` is removed, `Document` is now a `Selection` itself (a selection of one, the root element, just like `Document.Root` was before). Add jQuery's Closest() method. +* **v0.1.1** : Add benchmarks to use as baseline for refactorings, refactor Next...() and Prev...() methods to use the new html package's linked list features (Next/PrevSibling, FirstChild). Good performance boost (40+% in some cases). +* **v0.1.0** : Initial release. + +## API + +goquery exposes two structs, `Document` and `Selection`, and the `Matcher` interface. Unlike jQuery, which is loaded as part of a DOM document, and thus acts on its containing document, goquery doesn't know which HTML document to act upon. So it needs to be told, and that's what the `Document` type is for. It holds the root document node as the initial Selection value to manipulate. + +jQuery often has many variants for the same function (no argument, a selector string argument, a jQuery object argument, a DOM element argument, ...). Instead of exposing the same features in goquery as a single method with variadic empty interface arguments, statically-typed signatures are used following this naming convention: + +* When the jQuery equivalent can be called with no argument, it has the same name as jQuery for the no argument signature (e.g.: `Prev()`), and the version with a selector string argument is called `XxxFiltered()` (e.g.: `PrevFiltered()`) +* When the jQuery equivalent **requires** one argument, the same name as jQuery is used for the selector string version (e.g.: `Is()`) +* The signatures accepting a jQuery object as argument are defined in goquery as `XxxSelection()` and take a `*Selection` object as argument (e.g.: `FilterSelection()`) +* The signatures accepting a DOM element as argument in jQuery are defined in goquery as `XxxNodes()` and take a variadic argument of type `*html.Node` (e.g.: `FilterNodes()`) +* The signatures accepting a function as argument in jQuery are defined in goquery as `XxxFunction()` and take a function as argument (e.g.: `FilterFunction()`) +* The goquery methods that can be called with a selector string have a corresponding version that take a `Matcher` interface and are defined as `XxxMatcher()` (e.g.: `IsMatcher()`) + +Utility functions that are not in jQuery but are useful in Go are implemented as functions (that take a `*Selection` as parameter), to avoid a potential naming clash on the `*Selection`'s methods (reserved for jQuery-equivalent behaviour). + +The complete [package reference documentation can be found here][doc]. + +Please note that Cascadia's selectors do not necessarily match all supported selectors of jQuery (Sizzle). See the [cascadia project][cascadia] for details. Also, the selectors work more like the DOM's `querySelectorAll`, than jQuery's matchers - they have no concept of contextual matching (for some concrete examples of what that means, see [this ticket](https://github.com/andybalholm/cascadia/issues/61)). In practice, it doesn't matter very often but it's something worth mentioning. Invalid selector strings compile to a `Matcher` that fails to match any node. Behaviour of the various functions that take a selector string as argument follows from that fact, e.g. (where `~` is an invalid selector string): + +* `Find("~")` returns an empty selection because the selector string doesn't match anything. +* `Add("~")` returns a new selection that holds the same nodes as the original selection, because it didn't add any node (selector string didn't match anything). +* `ParentsFiltered("~")` returns an empty selection because the selector string doesn't match anything. +* `ParentsUntil("~")` returns all parents of the selection because the selector string didn't match any element to stop before the top element. + +## Examples + +See some tips and tricks in the [wiki][]. + +Adapted from example_test.go: + +```Go +package main + +import ( + "fmt" + "log" + "net/http" + + "github.com/PuerkitoBio/goquery" +) + +func ExampleScrape() { + // Request the HTML page. + res, err := http.Get("http://metalsucks.net") + if err != nil { + log.Fatal(err) + } + defer res.Body.Close() + if res.StatusCode != 200 { + log.Fatalf("status code error: %d %s", res.StatusCode, res.Status) + } + + // Load the HTML document + doc, err := goquery.NewDocumentFromReader(res.Body) + if err != nil { + log.Fatal(err) + } + + // Find the review items + doc.Find(".left-content article .post-title").Each(func(i int, s *goquery.Selection) { + // For each item found, get the title + title := s.Find("a").Text() + fmt.Printf("Review %d: %s\n", i, title) + }) +} + +func main() { + ExampleScrape() +} +``` + +## Related Projects + +- [Goq][goq], an HTML deserialization and scraping library based on goquery and struct tags. +- [andybalholm/cascadia][cascadia], the CSS selector library used by goquery. +- [suntong/cascadia][cascadiacli], a command-line interface to the cascadia CSS selector library, useful to test selectors. +- [gocolly/colly](https://github.com/gocolly/colly), a lightning fast and elegant Scraping Framework +- [gnulnx/goperf](https://github.com/gnulnx/goperf), a website performance test tool that also fetches static assets. +- [MontFerret/ferret](https://github.com/MontFerret/ferret), declarative web scraping. +- [tacusci/berrycms](https://github.com/tacusci/berrycms), a modern simple to use CMS with easy to write plugins +- [Dataflow kit](https://github.com/slotix/dataflowkit), Web Scraping framework for Gophers. +- [Geziyor](https://github.com/geziyor/geziyor), a fast web crawling & scraping framework for Go. Supports JS rendering. +- [Pagser](https://github.com/foolin/pagser), a simple, easy, extensible, configurable HTML parser to struct based on goquery and struct tags. +- [stitcherd](https://github.com/vhodges/stitcherd), A server for doing server side includes using css selectors and DOM updates. +- [goskyr](https://github.com/jakopako/goskyr), an easily configurable command-line scraper written in Go. +- [goGetJS](https://github.com/davemolk/goGetJS), a tool for extracting, searching, and saving JavaScript files (with optional headless browser). +- [fitter](https://github.com/PxyUp/fitter), a tool for selecting values from JSON, XML, HTML and XPath formatted pages. +- [seltabl](github.com/conneroisu/seltabl), an orm-like package and supporting language server for extracting values from HTML + +## Support + +There are a number of ways you can support the project: + +* Use it, star it, build something with it, spread the word! + - If you do build something open-source or otherwise publicly-visible, let me know so I can add it to the [Related Projects](#related-projects) section! +* Raise issues to improve the project (note: doc typos and clarifications are issues too!) + - Please search existing issues before opening a new one - it may have already been addressed. +* Pull requests: please discuss new code in an issue first, unless the fix is really trivial. + - Make sure new code is tested. + - Be mindful of existing code - PRs that break existing code have a high probability of being declined, unless it fixes a serious issue. +* Sponsor the developer + - See the Github Sponsor button at the top of the repo on github + - or via BuyMeACoffee.com, below + +Buy Me A Coffee + +## License + +The [BSD 3-Clause license][bsd], the same as the [Go language][golic]. Cascadia's license is [here][caslic]. + +[jquery]: https://jquery.com/ +[go]: https://go.dev/ +[cascadia]: https://github.com/andybalholm/cascadia +[cascadiacli]: https://github.com/suntong/cascadia +[bsd]: https://opensource.org/licenses/BSD-3-Clause +[golic]: https://go.dev/LICENSE +[caslic]: https://github.com/andybalholm/cascadia/blob/master/LICENSE +[doc]: https://pkg.go.dev/github.com/PuerkitoBio/goquery +[index]: https://api.jquery.com/index/ +[gonet]: https://github.com/golang/net/ +[html]: https://pkg.go.dev/golang.org/x/net/html +[wiki]: https://github.com/PuerkitoBio/goquery/wiki/Tips-and-tricks +[thatguystone]: https://github.com/thatguystone +[piotr]: https://github.com/piotrkowalczuk +[goq]: https://github.com/andrewstuart/goq +[thiemok]: https://github.com/thiemok +[djw]: https://github.com/davidjwilkins diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/array.go b/scraper-go/vendor/github.com/PuerkitoBio/goquery/array.go new file mode 100644 index 0000000..1b1f6cb --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/array.go @@ -0,0 +1,124 @@ +package goquery + +import ( + "golang.org/x/net/html" +) + +const ( + maxUint = ^uint(0) + maxInt = int(maxUint >> 1) + + // ToEnd is a special index value that can be used as end index in a call + // to Slice so that all elements are selected until the end of the Selection. + // It is equivalent to passing (*Selection).Length(). + ToEnd = maxInt +) + +// First reduces the set of matched elements to the first in the set. +// It returns a new Selection object, and an empty Selection object if the +// the selection is empty. +func (s *Selection) First() *Selection { + return s.Eq(0) +} + +// Last reduces the set of matched elements to the last in the set. +// It returns a new Selection object, and an empty Selection object if +// the selection is empty. +func (s *Selection) Last() *Selection { + return s.Eq(-1) +} + +// Eq reduces the set of matched elements to the one at the specified index. +// If a negative index is given, it counts backwards starting at the end of the +// set. It returns a new Selection object, and an empty Selection object if the +// index is invalid. +func (s *Selection) Eq(index int) *Selection { + if index < 0 { + index += len(s.Nodes) + } + + if index >= len(s.Nodes) || index < 0 { + return newEmptySelection(s.document) + } + + return s.Slice(index, index+1) +} + +// Slice reduces the set of matched elements to a subset specified by a range +// of indices. The start index is 0-based and indicates the index of the first +// element to select. The end index is 0-based and indicates the index at which +// the elements stop being selected (the end index is not selected). +// +// The indices may be negative, in which case they represent an offset from the +// end of the selection. +// +// The special value ToEnd may be specified as end index, in which case all elements +// until the end are selected. This works both for a positive and negative start +// index. +func (s *Selection) Slice(start, end int) *Selection { + if start < 0 { + start += len(s.Nodes) + } + if end == ToEnd { + end = len(s.Nodes) + } else if end < 0 { + end += len(s.Nodes) + } + return pushStack(s, s.Nodes[start:end]) +} + +// Get retrieves the underlying node at the specified index. +// Get without parameter is not implemented, since the node array is available +// on the Selection object. +func (s *Selection) Get(index int) *html.Node { + if index < 0 { + index += len(s.Nodes) // Negative index gets from the end + } + return s.Nodes[index] +} + +// Index returns the position of the first element within the Selection object +// relative to its sibling elements. +func (s *Selection) Index() int { + if len(s.Nodes) > 0 { + return newSingleSelection(s.Nodes[0], s.document).PrevAll().Length() + } + return -1 +} + +// IndexSelector returns the position of the first element within the +// Selection object relative to the elements matched by the selector, or -1 if +// not found. +func (s *Selection) IndexSelector(selector string) int { + if len(s.Nodes) > 0 { + sel := s.document.Find(selector) + return indexInSlice(sel.Nodes, s.Nodes[0]) + } + return -1 +} + +// IndexMatcher returns the position of the first element within the +// Selection object relative to the elements matched by the matcher, or -1 if +// not found. +func (s *Selection) IndexMatcher(m Matcher) int { + if len(s.Nodes) > 0 { + sel := s.document.FindMatcher(m) + return indexInSlice(sel.Nodes, s.Nodes[0]) + } + return -1 +} + +// IndexOfNode returns the position of the specified node within the Selection +// object, or -1 if not found. +func (s *Selection) IndexOfNode(node *html.Node) int { + return indexInSlice(s.Nodes, node) +} + +// IndexOfSelection returns the position of the first node in the specified +// Selection object within this Selection object, or -1 if not found. +func (s *Selection) IndexOfSelection(sel *Selection) int { + if sel != nil && len(sel.Nodes) > 0 { + return indexInSlice(s.Nodes, sel.Nodes[0]) + } + return -1 +} diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/doc.go b/scraper-go/vendor/github.com/PuerkitoBio/goquery/doc.go new file mode 100644 index 0000000..71146a7 --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/doc.go @@ -0,0 +1,123 @@ +// Copyright (c) 2012-2016, Martin Angers & Contributors +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation and/or +// other materials provided with the distribution. +// * Neither the name of the author nor the names of its contributors may be used to +// endorse or promote products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS +// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +// WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Package goquery implements features similar to jQuery, including the chainable +syntax, to manipulate and query an HTML document. + +It brings a syntax and a set of features similar to jQuery to the Go language. +It is based on Go's net/html package and the CSS Selector library cascadia. +Since the net/html parser returns nodes, and not a full-featured DOM +tree, jQuery's stateful manipulation functions (like height(), css(), detach()) +have been left off. + +Also, because the net/html parser requires UTF-8 encoding, so does goquery: it is +the caller's responsibility to ensure that the source document provides UTF-8 encoded HTML. +See the repository's wiki for various options on how to do this. + +Syntax-wise, it is as close as possible to jQuery, with the same method names when +possible, and that warm and fuzzy chainable interface. jQuery being the +ultra-popular library that it is, writing a similar HTML-manipulating +library was better to follow its API than to start anew (in the same spirit as +Go's fmt package), even though some of its methods are less than intuitive (looking +at you, index()...). + +It is hosted on GitHub, along with additional documentation in the README.md +file: https://github.com/puerkitobio/goquery + +Please note that because of the net/html dependency, goquery requires Go1.1+. + +The various methods are split into files based on the category of behavior. +The three dots (...) indicate that various "overloads" are available. + +* array.go : array-like positional manipulation of the selection. + - Eq() + - First() + - Get() + - Index...() + - Last() + - Slice() + +* expand.go : methods that expand or augment the selection's set. + - Add...() + - AndSelf() + - Union(), which is an alias for AddSelection() + +* filter.go : filtering methods, that reduce the selection's set. + - End() + - Filter...() + - Has...() + - Intersection(), which is an alias of FilterSelection() + - Not...() + +* iteration.go : methods to loop over the selection's nodes. + - Each() + - EachWithBreak() + - Map() + +* manipulation.go : methods for modifying the document + - After...() + - Append...() + - Before...() + - Clone() + - Empty() + - Prepend...() + - Remove...() + - ReplaceWith...() + - Unwrap() + - Wrap...() + - WrapAll...() + - WrapInner...() + +* property.go : methods that inspect and get the node's properties values. + - Attr*(), RemoveAttr(), SetAttr() + - AddClass(), HasClass(), RemoveClass(), ToggleClass() + - Html() + - Length() + - Size(), which is an alias for Length() + - Text() + +* query.go : methods that query, or reflect, a node's identity. + - Contains() + - Is...() + +* traversal.go : methods to traverse the HTML document tree. + - Children...() + - Contents() + - Find...() + - Next...() + - Parent[s]...() + - Prev...() + - Siblings...() + +* type.go : definition of the types exposed by goquery. + - Document + - Selection + - Matcher + +* utilities.go : definition of helper functions (and not methods on a *Selection) +that are not part of jQuery, but are useful to goquery. + - NodeName + - OuterHtml +*/ +package goquery diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/expand.go b/scraper-go/vendor/github.com/PuerkitoBio/goquery/expand.go new file mode 100644 index 0000000..af54acf --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/expand.go @@ -0,0 +1,70 @@ +package goquery + +import "golang.org/x/net/html" + +// Add adds the selector string's matching nodes to those in the current +// selection and returns a new Selection object. +// The selector string is run in the context of the document of the current +// Selection object. +func (s *Selection) Add(selector string) *Selection { + return s.AddNodes(findWithMatcher([]*html.Node{s.document.rootNode}, compileMatcher(selector))...) +} + +// AddMatcher adds the matcher's matching nodes to those in the current +// selection and returns a new Selection object. +// The matcher is run in the context of the document of the current +// Selection object. +func (s *Selection) AddMatcher(m Matcher) *Selection { + return s.AddNodes(findWithMatcher([]*html.Node{s.document.rootNode}, m)...) +} + +// AddSelection adds the specified Selection object's nodes to those in the +// current selection and returns a new Selection object. +func (s *Selection) AddSelection(sel *Selection) *Selection { + if sel == nil { + return s.AddNodes() + } + return s.AddNodes(sel.Nodes...) +} + +// Union is an alias for AddSelection. +func (s *Selection) Union(sel *Selection) *Selection { + return s.AddSelection(sel) +} + +// AddNodes adds the specified nodes to those in the +// current selection and returns a new Selection object. +func (s *Selection) AddNodes(nodes ...*html.Node) *Selection { + return pushStack(s, appendWithoutDuplicates(s.Nodes, nodes, nil)) +} + +// AndSelf adds the previous set of elements on the stack to the current set. +// It returns a new Selection object containing the current Selection combined +// with the previous one. +// Deprecated: This function has been deprecated and is now an alias for AddBack(). +func (s *Selection) AndSelf() *Selection { + return s.AddBack() +} + +// AddBack adds the previous set of elements on the stack to the current set. +// It returns a new Selection object containing the current Selection combined +// with the previous one. +func (s *Selection) AddBack() *Selection { + return s.AddSelection(s.prevSel) +} + +// AddBackFiltered reduces the previous set of elements on the stack to those that +// match the selector string, and adds them to the current set. +// It returns a new Selection object containing the current Selection combined +// with the filtered previous one +func (s *Selection) AddBackFiltered(selector string) *Selection { + return s.AddSelection(s.prevSel.Filter(selector)) +} + +// AddBackMatcher reduces the previous set of elements on the stack to those that match +// the matcher, and adds them to the current set. +// It returns a new Selection object containing the current Selection combined +// with the filtered previous one +func (s *Selection) AddBackMatcher(m Matcher) *Selection { + return s.AddSelection(s.prevSel.FilterMatcher(m)) +} diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/filter.go b/scraper-go/vendor/github.com/PuerkitoBio/goquery/filter.go new file mode 100644 index 0000000..9138ffb --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/filter.go @@ -0,0 +1,163 @@ +package goquery + +import "golang.org/x/net/html" + +// Filter reduces the set of matched elements to those that match the selector string. +// It returns a new Selection object for this subset of matching elements. +func (s *Selection) Filter(selector string) *Selection { + return s.FilterMatcher(compileMatcher(selector)) +} + +// FilterMatcher reduces the set of matched elements to those that match +// the given matcher. It returns a new Selection object for this subset +// of matching elements. +func (s *Selection) FilterMatcher(m Matcher) *Selection { + return pushStack(s, winnow(s, m, true)) +} + +// Not removes elements from the Selection that match the selector string. +// It returns a new Selection object with the matching elements removed. +func (s *Selection) Not(selector string) *Selection { + return s.NotMatcher(compileMatcher(selector)) +} + +// NotMatcher removes elements from the Selection that match the given matcher. +// It returns a new Selection object with the matching elements removed. +func (s *Selection) NotMatcher(m Matcher) *Selection { + return pushStack(s, winnow(s, m, false)) +} + +// FilterFunction reduces the set of matched elements to those that pass the function's test. +// It returns a new Selection object for this subset of elements. +func (s *Selection) FilterFunction(f func(int, *Selection) bool) *Selection { + return pushStack(s, winnowFunction(s, f, true)) +} + +// NotFunction removes elements from the Selection that pass the function's test. +// It returns a new Selection object with the matching elements removed. +func (s *Selection) NotFunction(f func(int, *Selection) bool) *Selection { + return pushStack(s, winnowFunction(s, f, false)) +} + +// FilterNodes reduces the set of matched elements to those that match the specified nodes. +// It returns a new Selection object for this subset of elements. +func (s *Selection) FilterNodes(nodes ...*html.Node) *Selection { + return pushStack(s, winnowNodes(s, nodes, true)) +} + +// NotNodes removes elements from the Selection that match the specified nodes. +// It returns a new Selection object with the matching elements removed. +func (s *Selection) NotNodes(nodes ...*html.Node) *Selection { + return pushStack(s, winnowNodes(s, nodes, false)) +} + +// FilterSelection reduces the set of matched elements to those that match a +// node in the specified Selection object. +// It returns a new Selection object for this subset of elements. +func (s *Selection) FilterSelection(sel *Selection) *Selection { + if sel == nil { + return pushStack(s, winnowNodes(s, nil, true)) + } + return pushStack(s, winnowNodes(s, sel.Nodes, true)) +} + +// NotSelection removes elements from the Selection that match a node in the specified +// Selection object. It returns a new Selection object with the matching elements removed. +func (s *Selection) NotSelection(sel *Selection) *Selection { + if sel == nil { + return pushStack(s, winnowNodes(s, nil, false)) + } + return pushStack(s, winnowNodes(s, sel.Nodes, false)) +} + +// Intersection is an alias for FilterSelection. +func (s *Selection) Intersection(sel *Selection) *Selection { + return s.FilterSelection(sel) +} + +// Has reduces the set of matched elements to those that have a descendant +// that matches the selector. +// It returns a new Selection object with the matching elements. +func (s *Selection) Has(selector string) *Selection { + return s.HasSelection(s.document.Find(selector)) +} + +// HasMatcher reduces the set of matched elements to those that have a descendant +// that matches the matcher. +// It returns a new Selection object with the matching elements. +func (s *Selection) HasMatcher(m Matcher) *Selection { + return s.HasSelection(s.document.FindMatcher(m)) +} + +// HasNodes reduces the set of matched elements to those that have a +// descendant that matches one of the nodes. +// It returns a new Selection object with the matching elements. +func (s *Selection) HasNodes(nodes ...*html.Node) *Selection { + return s.FilterFunction(func(_ int, sel *Selection) bool { + // Add all nodes that contain one of the specified nodes + for _, n := range nodes { + if sel.Contains(n) { + return true + } + } + return false + }) +} + +// HasSelection reduces the set of matched elements to those that have a +// descendant that matches one of the nodes of the specified Selection object. +// It returns a new Selection object with the matching elements. +func (s *Selection) HasSelection(sel *Selection) *Selection { + if sel == nil { + return s.HasNodes() + } + return s.HasNodes(sel.Nodes...) +} + +// End ends the most recent filtering operation in the current chain and +// returns the set of matched elements to its previous state. +func (s *Selection) End() *Selection { + if s.prevSel != nil { + return s.prevSel + } + return newEmptySelection(s.document) +} + +// Filter based on the matcher, and the indicator to keep (Filter) or +// to get rid of (Not) the matching elements. +func winnow(sel *Selection, m Matcher, keep bool) []*html.Node { + // Optimize if keep is requested + if keep { + return m.Filter(sel.Nodes) + } + // Use grep + return grep(sel, func(i int, s *Selection) bool { + return !m.Match(s.Get(0)) + }) +} + +// Filter based on an array of nodes, and the indicator to keep (Filter) or +// to get rid of (Not) the matching elements. +func winnowNodes(sel *Selection, nodes []*html.Node, keep bool) []*html.Node { + if len(nodes)+len(sel.Nodes) < minNodesForSet { + return grep(sel, func(i int, s *Selection) bool { + return isInSlice(nodes, s.Get(0)) == keep + }) + } + + set := make(map[*html.Node]bool) + for _, n := range nodes { + set[n] = true + } + return grep(sel, func(i int, s *Selection) bool { + return set[s.Get(0)] == keep + }) +} + +// Filter based on a function test, and the indicator to keep (Filter) or +// to get rid of (Not) the matching elements. +func winnowFunction(sel *Selection, f func(int, *Selection) bool, keep bool) []*html.Node { + return grep(sel, func(i int, s *Selection) bool { + return f(i, s) == keep + }) +} diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/iteration.go b/scraper-go/vendor/github.com/PuerkitoBio/goquery/iteration.go new file mode 100644 index 0000000..1ca5245 --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/iteration.go @@ -0,0 +1,61 @@ +package goquery + +import "iter" + +// Each iterates over a Selection object, executing a function for each +// matched element. It returns the current Selection object. The function +// f is called for each element in the selection with the index of the +// element in that selection starting at 0, and a *Selection that contains +// only that element. +func (s *Selection) Each(f func(int, *Selection)) *Selection { + for i, n := range s.Nodes { + f(i, newSingleSelection(n, s.document)) + } + return s +} + +// EachIter returns an iterator that yields the Selection object in order. +// The implementation is similar to Each, but it returns an iterator instead. +func (s *Selection) EachIter() iter.Seq2[int, *Selection] { + return func(yield func(int, *Selection) bool) { + for i, n := range s.Nodes { + if !yield(i, newSingleSelection(n, s.document)) { + return + } + } + } +} + +// EachWithBreak iterates over a Selection object, executing a function for each +// matched element. It is identical to Each except that it is possible to break +// out of the loop by returning false in the callback function. It returns the +// current Selection object. +func (s *Selection) EachWithBreak(f func(int, *Selection) bool) *Selection { + for i, n := range s.Nodes { + if !f(i, newSingleSelection(n, s.document)) { + return s + } + } + return s +} + +// Map passes each element in the current matched set through a function, +// producing a slice of string holding the returned values. The function +// f is called for each element in the selection with the index of the +// element in that selection starting at 0, and a *Selection that contains +// only that element. +func (s *Selection) Map(f func(int, *Selection) string) (result []string) { + return Map(s, f) +} + +// Map is the generic version of Selection.Map, allowing any type to be +// returned. +func Map[E any](s *Selection, f func(int, *Selection) E) (result []E) { + result = make([]E, len(s.Nodes)) + + for i, n := range s.Nodes { + result[i] = f(i, newSingleSelection(n, s.document)) + } + + return result +} diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/manipulation.go b/scraper-go/vendor/github.com/PuerkitoBio/goquery/manipulation.go new file mode 100644 index 0000000..35febf1 --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/manipulation.go @@ -0,0 +1,679 @@ +package goquery + +import ( + "strings" + + "golang.org/x/net/html" +) + +// After applies the selector from the root document and inserts the matched elements +// after the elements in the set of matched elements. +// +// If one of the matched elements in the selection is not currently in the +// document, it's impossible to insert nodes after it, so it will be ignored. +// +// This follows the same rules as Selection.Append. +func (s *Selection) After(selector string) *Selection { + return s.AfterMatcher(compileMatcher(selector)) +} + +// AfterMatcher applies the matcher from the root document and inserts the matched elements +// after the elements in the set of matched elements. +// +// If one of the matched elements in the selection is not currently in the +// document, it's impossible to insert nodes after it, so it will be ignored. +// +// This follows the same rules as Selection.Append. +func (s *Selection) AfterMatcher(m Matcher) *Selection { + return s.AfterNodes(m.MatchAll(s.document.rootNode)...) +} + +// AfterSelection inserts the elements in the selection after each element in the set of matched +// elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) AfterSelection(sel *Selection) *Selection { + return s.AfterNodes(sel.Nodes...) +} + +// AfterHtml parses the html and inserts it after the set of matched elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) AfterHtml(htmlStr string) *Selection { + return s.eachNodeHtml(htmlStr, true, func(node *html.Node, nodes []*html.Node) { + nextSibling := node.NextSibling + for _, n := range nodes { + if node.Parent != nil { + node.Parent.InsertBefore(n, nextSibling) + } + } + }) +} + +// AfterNodes inserts the nodes after each element in the set of matched elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) AfterNodes(ns ...*html.Node) *Selection { + return s.manipulateNodes(ns, true, func(sn *html.Node, n *html.Node) { + if sn.Parent != nil { + sn.Parent.InsertBefore(n, sn.NextSibling) + } + }) +} + +// Append appends the elements specified by the selector to the end of each element +// in the set of matched elements, following those rules: +// +// 1) The selector is applied to the root document. +// +// 2) Elements that are part of the document will be moved to the new location. +// +// 3) If there are multiple locations to append to, cloned nodes will be +// appended to all target locations except the last one, which will be moved +// as noted in (2). +func (s *Selection) Append(selector string) *Selection { + return s.AppendMatcher(compileMatcher(selector)) +} + +// AppendMatcher appends the elements specified by the matcher to the end of each element +// in the set of matched elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) AppendMatcher(m Matcher) *Selection { + return s.AppendNodes(m.MatchAll(s.document.rootNode)...) +} + +// AppendSelection appends the elements in the selection to the end of each element +// in the set of matched elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) AppendSelection(sel *Selection) *Selection { + return s.AppendNodes(sel.Nodes...) +} + +// AppendHtml parses the html and appends it to the set of matched elements. +func (s *Selection) AppendHtml(htmlStr string) *Selection { + return s.eachNodeHtml(htmlStr, false, func(node *html.Node, nodes []*html.Node) { + for _, n := range nodes { + node.AppendChild(n) + } + }) +} + +// AppendNodes appends the specified nodes to each node in the set of matched elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) AppendNodes(ns ...*html.Node) *Selection { + return s.manipulateNodes(ns, false, func(sn *html.Node, n *html.Node) { + sn.AppendChild(n) + }) +} + +// Before inserts the matched elements before each element in the set of matched elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) Before(selector string) *Selection { + return s.BeforeMatcher(compileMatcher(selector)) +} + +// BeforeMatcher inserts the matched elements before each element in the set of matched elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) BeforeMatcher(m Matcher) *Selection { + return s.BeforeNodes(m.MatchAll(s.document.rootNode)...) +} + +// BeforeSelection inserts the elements in the selection before each element in the set of matched +// elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) BeforeSelection(sel *Selection) *Selection { + return s.BeforeNodes(sel.Nodes...) +} + +// BeforeHtml parses the html and inserts it before the set of matched elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) BeforeHtml(htmlStr string) *Selection { + return s.eachNodeHtml(htmlStr, true, func(node *html.Node, nodes []*html.Node) { + for _, n := range nodes { + if node.Parent != nil { + node.Parent.InsertBefore(n, node) + } + } + }) +} + +// BeforeNodes inserts the nodes before each element in the set of matched elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) BeforeNodes(ns ...*html.Node) *Selection { + return s.manipulateNodes(ns, false, func(sn *html.Node, n *html.Node) { + if sn.Parent != nil { + sn.Parent.InsertBefore(n, sn) + } + }) +} + +// Clone creates a deep copy of the set of matched nodes. The new nodes will not be +// attached to the document. +func (s *Selection) Clone() *Selection { + ns := newEmptySelection(s.document) + ns.Nodes = cloneNodes(s.Nodes) + return ns +} + +// Empty removes all children nodes from the set of matched elements. +// It returns the children nodes in a new Selection. +func (s *Selection) Empty() *Selection { + var nodes []*html.Node + + for _, n := range s.Nodes { + for c := n.FirstChild; c != nil; c = n.FirstChild { + n.RemoveChild(c) + nodes = append(nodes, c) + } + } + + return pushStack(s, nodes) +} + +// Prepend prepends the elements specified by the selector to each element in +// the set of matched elements, following the same rules as Append. +func (s *Selection) Prepend(selector string) *Selection { + return s.PrependMatcher(compileMatcher(selector)) +} + +// PrependMatcher prepends the elements specified by the matcher to each +// element in the set of matched elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) PrependMatcher(m Matcher) *Selection { + return s.PrependNodes(m.MatchAll(s.document.rootNode)...) +} + +// PrependSelection prepends the elements in the selection to each element in +// the set of matched elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) PrependSelection(sel *Selection) *Selection { + return s.PrependNodes(sel.Nodes...) +} + +// PrependHtml parses the html and prepends it to the set of matched elements. +func (s *Selection) PrependHtml(htmlStr string) *Selection { + return s.eachNodeHtml(htmlStr, false, func(node *html.Node, nodes []*html.Node) { + firstChild := node.FirstChild + for _, n := range nodes { + node.InsertBefore(n, firstChild) + } + }) +} + +// PrependNodes prepends the specified nodes to each node in the set of +// matched elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) PrependNodes(ns ...*html.Node) *Selection { + return s.manipulateNodes(ns, true, func(sn *html.Node, n *html.Node) { + // sn.FirstChild may be nil, in which case this functions like + // sn.AppendChild() + sn.InsertBefore(n, sn.FirstChild) + }) +} + +// Remove removes the set of matched elements from the document. +// It returns the same selection, now consisting of nodes not in the document. +func (s *Selection) Remove() *Selection { + for _, n := range s.Nodes { + if n.Parent != nil { + n.Parent.RemoveChild(n) + } + } + + return s +} + +// RemoveFiltered removes from the current set of matched elements those that +// match the selector filter. It returns the Selection of removed nodes. +// +// For example if the selection s contains "

", "

" and "

" +// and s.RemoveFiltered("h2") is called, only the "

" node is removed +// (and returned), while "

" and "

" are kept in the document. +func (s *Selection) RemoveFiltered(selector string) *Selection { + return s.RemoveMatcher(compileMatcher(selector)) +} + +// RemoveMatcher removes from the current set of matched elements those that +// match the Matcher filter. It returns the Selection of removed nodes. +// See RemoveFiltered for additional information. +func (s *Selection) RemoveMatcher(m Matcher) *Selection { + return s.FilterMatcher(m).Remove() +} + +// ReplaceWith replaces each element in the set of matched elements with the +// nodes matched by the given selector. +// It returns the removed elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) ReplaceWith(selector string) *Selection { + return s.ReplaceWithMatcher(compileMatcher(selector)) +} + +// ReplaceWithMatcher replaces each element in the set of matched elements with +// the nodes matched by the given Matcher. +// It returns the removed elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) ReplaceWithMatcher(m Matcher) *Selection { + return s.ReplaceWithNodes(m.MatchAll(s.document.rootNode)...) +} + +// ReplaceWithSelection replaces each element in the set of matched elements with +// the nodes from the given Selection. +// It returns the removed elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) ReplaceWithSelection(sel *Selection) *Selection { + return s.ReplaceWithNodes(sel.Nodes...) +} + +// ReplaceWithHtml replaces each element in the set of matched elements with +// the parsed HTML. +// It returns the removed elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) ReplaceWithHtml(htmlStr string) *Selection { + s.eachNodeHtml(htmlStr, true, func(node *html.Node, nodes []*html.Node) { + nextSibling := node.NextSibling + for _, n := range nodes { + if node.Parent != nil { + node.Parent.InsertBefore(n, nextSibling) + } + } + }) + return s.Remove() +} + +// ReplaceWithNodes replaces each element in the set of matched elements with +// the given nodes. +// It returns the removed elements. +// +// This follows the same rules as Selection.Append. +func (s *Selection) ReplaceWithNodes(ns ...*html.Node) *Selection { + s.AfterNodes(ns...) + return s.Remove() +} + +// SetHtml sets the html content of each element in the selection to +// specified html string. +func (s *Selection) SetHtml(htmlStr string) *Selection { + for _, context := range s.Nodes { + for c := context.FirstChild; c != nil; c = context.FirstChild { + context.RemoveChild(c) + } + } + return s.eachNodeHtml(htmlStr, false, func(node *html.Node, nodes []*html.Node) { + for _, n := range nodes { + node.AppendChild(n) + } + }) +} + +// SetText sets the content of each element in the selection to specified content. +// The provided text string is escaped. +func (s *Selection) SetText(text string) *Selection { + return s.SetHtml(html.EscapeString(text)) +} + +// Unwrap removes the parents of the set of matched elements, leaving the matched +// elements (and their siblings, if any) in their place. +// It returns the original selection. +func (s *Selection) Unwrap() *Selection { + s.Parent().Each(func(i int, ss *Selection) { + // For some reason, jquery allows unwrap to remove the element, so + // allowing it here too. Same for . Why it allows those elements to + // be unwrapped while not allowing body is a mystery to me. + if ss.Nodes[0].Data != "body" { + ss.ReplaceWithSelection(ss.Contents()) + } + }) + + return s +} + +// Wrap wraps each element in the set of matched elements inside the first +// element matched by the given selector. The matched child is cloned before +// being inserted into the document. +// +// It returns the original set of elements. +func (s *Selection) Wrap(selector string) *Selection { + return s.WrapMatcher(compileMatcher(selector)) +} + +// WrapMatcher wraps each element in the set of matched elements inside the +// first element matched by the given matcher. The matched child is cloned +// before being inserted into the document. +// +// It returns the original set of elements. +func (s *Selection) WrapMatcher(m Matcher) *Selection { + return s.wrapNodes(m.MatchAll(s.document.rootNode)...) +} + +// WrapSelection wraps each element in the set of matched elements inside the +// first element in the given Selection. The element is cloned before being +// inserted into the document. +// +// It returns the original set of elements. +func (s *Selection) WrapSelection(sel *Selection) *Selection { + return s.wrapNodes(sel.Nodes...) +} + +// WrapHtml wraps each element in the set of matched elements inside the inner- +// most child of the given HTML. +// +// It returns the original set of elements. +func (s *Selection) WrapHtml(htmlStr string) *Selection { + nodesMap := make(map[string][]*html.Node) + for _, context := range s.Nodes { + var parent *html.Node + if context.Parent != nil { + parent = context.Parent + } else { + parent = &html.Node{Type: html.ElementNode} + } + nodes, found := nodesMap[nodeName(parent)] + if !found { + nodes = parseHtmlWithContext(htmlStr, parent) + nodesMap[nodeName(parent)] = nodes + } + newSingleSelection(context, s.document).wrapAllNodes(cloneNodes(nodes)...) + } + return s +} + +// WrapNode wraps each element in the set of matched elements inside the inner- +// most child of the given node. The given node is copied before being inserted +// into the document. +// +// It returns the original set of elements. +func (s *Selection) WrapNode(n *html.Node) *Selection { + return s.wrapNodes(n) +} + +func (s *Selection) wrapNodes(ns ...*html.Node) *Selection { + s.Each(func(i int, ss *Selection) { + ss.wrapAllNodes(ns...) + }) + + return s +} + +// WrapAll wraps a single HTML structure, matched by the given selector, around +// all elements in the set of matched elements. The matched child is cloned +// before being inserted into the document. +// +// It returns the original set of elements. +func (s *Selection) WrapAll(selector string) *Selection { + return s.WrapAllMatcher(compileMatcher(selector)) +} + +// WrapAllMatcher wraps a single HTML structure, matched by the given Matcher, +// around all elements in the set of matched elements. The matched child is +// cloned before being inserted into the document. +// +// It returns the original set of elements. +func (s *Selection) WrapAllMatcher(m Matcher) *Selection { + return s.wrapAllNodes(m.MatchAll(s.document.rootNode)...) +} + +// WrapAllSelection wraps a single HTML structure, the first node of the given +// Selection, around all elements in the set of matched elements. The matched +// child is cloned before being inserted into the document. +// +// It returns the original set of elements. +func (s *Selection) WrapAllSelection(sel *Selection) *Selection { + return s.wrapAllNodes(sel.Nodes...) +} + +// WrapAllHtml wraps the given HTML structure around all elements in the set of +// matched elements. The matched child is cloned before being inserted into the +// document. +// +// It returns the original set of elements. +func (s *Selection) WrapAllHtml(htmlStr string) *Selection { + var context *html.Node + var nodes []*html.Node + if len(s.Nodes) > 0 { + context = s.Nodes[0] + if context.Parent != nil { + nodes = parseHtmlWithContext(htmlStr, context) + } else { + nodes = parseHtml(htmlStr) + } + } + return s.wrapAllNodes(nodes...) +} + +func (s *Selection) wrapAllNodes(ns ...*html.Node) *Selection { + if len(ns) > 0 { + return s.WrapAllNode(ns[0]) + } + return s +} + +// WrapAllNode wraps the given node around the first element in the Selection, +// making all other nodes in the Selection children of the given node. The node +// is cloned before being inserted into the document. +// +// It returns the original set of elements. +func (s *Selection) WrapAllNode(n *html.Node) *Selection { + if s.Size() == 0 { + return s + } + + wrap := cloneNode(n) + + first := s.Nodes[0] + if first.Parent != nil { + first.Parent.InsertBefore(wrap, first) + first.Parent.RemoveChild(first) + } + + for c := getFirstChildEl(wrap); c != nil; c = getFirstChildEl(wrap) { + wrap = c + } + + newSingleSelection(wrap, s.document).AppendSelection(s) + + return s +} + +// WrapInner wraps an HTML structure, matched by the given selector, around the +// content of element in the set of matched elements. The matched child is +// cloned before being inserted into the document. +// +// It returns the original set of elements. +func (s *Selection) WrapInner(selector string) *Selection { + return s.WrapInnerMatcher(compileMatcher(selector)) +} + +// WrapInnerMatcher wraps an HTML structure, matched by the given selector, +// around the content of element in the set of matched elements. The matched +// child is cloned before being inserted into the document. +// +// It returns the original set of elements. +func (s *Selection) WrapInnerMatcher(m Matcher) *Selection { + return s.wrapInnerNodes(m.MatchAll(s.document.rootNode)...) +} + +// WrapInnerSelection wraps an HTML structure, matched by the given selector, +// around the content of element in the set of matched elements. The matched +// child is cloned before being inserted into the document. +// +// It returns the original set of elements. +func (s *Selection) WrapInnerSelection(sel *Selection) *Selection { + return s.wrapInnerNodes(sel.Nodes...) +} + +// WrapInnerHtml wraps an HTML structure, matched by the given selector, around +// the content of element in the set of matched elements. The matched child is +// cloned before being inserted into the document. +// +// It returns the original set of elements. +func (s *Selection) WrapInnerHtml(htmlStr string) *Selection { + nodesMap := make(map[string][]*html.Node) + for _, context := range s.Nodes { + nodes, found := nodesMap[nodeName(context)] + if !found { + nodes = parseHtmlWithContext(htmlStr, context) + nodesMap[nodeName(context)] = nodes + } + newSingleSelection(context, s.document).wrapInnerNodes(cloneNodes(nodes)...) + } + return s +} + +// WrapInnerNode wraps an HTML structure, matched by the given selector, around +// the content of element in the set of matched elements. The matched child is +// cloned before being inserted into the document. +// +// It returns the original set of elements. +func (s *Selection) WrapInnerNode(n *html.Node) *Selection { + return s.wrapInnerNodes(n) +} + +func (s *Selection) wrapInnerNodes(ns ...*html.Node) *Selection { + if len(ns) == 0 { + return s + } + + s.Each(func(i int, s *Selection) { + contents := s.Contents() + + if contents.Size() > 0 { + contents.wrapAllNodes(ns...) + } else { + s.AppendNodes(cloneNode(ns[0])) + } + }) + + return s +} + +func parseHtml(h string) []*html.Node { + // Errors are only returned when the io.Reader returns any error besides + // EOF, but strings.Reader never will + nodes, err := html.ParseFragment(strings.NewReader(h), &html.Node{Type: html.ElementNode}) + if err != nil { + panic("goquery: failed to parse HTML: " + err.Error()) + } + return nodes +} + +func parseHtmlWithContext(h string, context *html.Node) []*html.Node { + // Errors are only returned when the io.Reader returns any error besides + // EOF, but strings.Reader never will + nodes, err := html.ParseFragment(strings.NewReader(h), context) + if err != nil { + panic("goquery: failed to parse HTML: " + err.Error()) + } + return nodes +} + +// Get the first child that is an ElementNode +func getFirstChildEl(n *html.Node) *html.Node { + c := n.FirstChild + for c != nil && c.Type != html.ElementNode { + c = c.NextSibling + } + return c +} + +// Deep copy a slice of nodes. +func cloneNodes(ns []*html.Node) []*html.Node { + cns := make([]*html.Node, 0, len(ns)) + + for _, n := range ns { + cns = append(cns, cloneNode(n)) + } + + return cns +} + +// Deep copy a node. The new node has clones of all the original node's +// children but none of its parents or siblings. +func cloneNode(n *html.Node) *html.Node { + nn := &html.Node{ + Type: n.Type, + DataAtom: n.DataAtom, + Data: n.Data, + Attr: make([]html.Attribute, len(n.Attr)), + } + + copy(nn.Attr, n.Attr) + for c := n.FirstChild; c != nil; c = c.NextSibling { + nn.AppendChild(cloneNode(c)) + } + + return nn +} + +func (s *Selection) manipulateNodes(ns []*html.Node, reverse bool, + f func(sn *html.Node, n *html.Node)) *Selection { + + lasti := s.Size() - 1 + + // net.Html doesn't provide document fragments for insertion, so to get + // things in the correct order with After() and Prepend(), the callback + // needs to be called on the reverse of the nodes. + if reverse { + for i, j := 0, len(ns)-1; i < j; i, j = i+1, j-1 { + ns[i], ns[j] = ns[j], ns[i] + } + } + + for i, sn := range s.Nodes { + for _, n := range ns { + if i != lasti { + f(sn, cloneNode(n)) + } else { + if n.Parent != nil { + n.Parent.RemoveChild(n) + } + f(sn, n) + } + } + } + + return s +} + +// eachNodeHtml parses the given html string and inserts the resulting nodes in the dom with the mergeFn. +// The parsed nodes are inserted for each element of the selection. +// isParent can be used to indicate that the elements of the selection should be treated as the parent for the parsed html. +// A cache is used to avoid parsing the html multiple times should the elements of the selection result in the same context. +func (s *Selection) eachNodeHtml(htmlStr string, isParent bool, mergeFn func(n *html.Node, nodes []*html.Node)) *Selection { + // cache to avoid parsing the html for the same context multiple times + nodeCache := make(map[string][]*html.Node) + var context *html.Node + for _, n := range s.Nodes { + if isParent { + context = n.Parent + } else { + if n.Type != html.ElementNode { + continue + } + context = n + } + if context != nil { + nodes, found := nodeCache[nodeName(context)] + if !found { + nodes = parseHtmlWithContext(htmlStr, context) + nodeCache[nodeName(context)] = nodes + } + mergeFn(n, cloneNodes(nodes)) + } + } + return s +} diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/property.go b/scraper-go/vendor/github.com/PuerkitoBio/goquery/property.go new file mode 100644 index 0000000..25afced --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/property.go @@ -0,0 +1,275 @@ +package goquery + +import ( + "regexp" + "strings" + + "golang.org/x/net/html" +) + +var rxClassTrim = regexp.MustCompile("[\t\r\n]") + +// Attr gets the specified attribute's value for the first element in the +// Selection. To get the value for each element individually, use a looping +// construct such as Each or Map method. +func (s *Selection) Attr(attrName string) (val string, exists bool) { + if len(s.Nodes) == 0 { + return + } + return getAttributeValue(attrName, s.Nodes[0]) +} + +// AttrOr works like Attr but returns default value if attribute is not present. +func (s *Selection) AttrOr(attrName, defaultValue string) string { + if len(s.Nodes) == 0 { + return defaultValue + } + + val, exists := getAttributeValue(attrName, s.Nodes[0]) + if !exists { + return defaultValue + } + + return val +} + +// RemoveAttr removes the named attribute from each element in the set of matched elements. +func (s *Selection) RemoveAttr(attrName string) *Selection { + for _, n := range s.Nodes { + removeAttr(n, attrName) + } + + return s +} + +// SetAttr sets the given attribute on each element in the set of matched elements. +func (s *Selection) SetAttr(attrName, val string) *Selection { + for _, n := range s.Nodes { + attr := getAttributePtr(attrName, n) + if attr == nil { + n.Attr = append(n.Attr, html.Attribute{Key: attrName, Val: val}) + } else { + attr.Val = val + } + } + + return s +} + +// Text gets the combined text contents of each element in the set of matched +// elements, including their descendants. +func (s *Selection) Text() string { + var builder strings.Builder + + // Slightly optimized vs calling Each: no single selection object created + var f func(*html.Node) + f = func(n *html.Node) { + if n.Type == html.TextNode { + // Keep newlines and spaces, like jQuery + builder.WriteString(n.Data) + } + if n.FirstChild != nil { + for c := n.FirstChild; c != nil; c = c.NextSibling { + f(c) + } + } + } + for _, n := range s.Nodes { + f(n) + } + + return builder.String() +} + +// Size is an alias for Length. +func (s *Selection) Size() int { + return s.Length() +} + +// Length returns the number of elements in the Selection object. +func (s *Selection) Length() int { + return len(s.Nodes) +} + +// Html gets the HTML contents of the first element in the set of matched +// elements. It includes text and comment nodes. +func (s *Selection) Html() (ret string, e error) { + // Since there is no .innerHtml, the HTML content must be re-created from + // the nodes using html.Render. + var builder strings.Builder + + if len(s.Nodes) > 0 { + for c := s.Nodes[0].FirstChild; c != nil; c = c.NextSibling { + e = html.Render(&builder, c) + if e != nil { + return + } + } + ret = builder.String() + } + + return +} + +// AddClass adds the given class(es) to each element in the set of matched elements. +// Multiple class names can be specified, separated by a space or via multiple arguments. +func (s *Selection) AddClass(class ...string) *Selection { + classStr := strings.TrimSpace(strings.Join(class, " ")) + + if classStr == "" { + return s + } + + tcls := getClassesSlice(classStr) + for _, n := range s.Nodes { + curClasses, attr := getClassesAndAttr(n, true) + for _, newClass := range tcls { + if !strings.Contains(curClasses, " "+newClass+" ") { + curClasses += newClass + " " + } + } + + setClasses(n, attr, curClasses) + } + + return s +} + +// HasClass determines whether any of the matched elements are assigned the +// given class. +func (s *Selection) HasClass(class string) bool { + class = " " + class + " " + for _, n := range s.Nodes { + classes, _ := getClassesAndAttr(n, false) + if strings.Contains(classes, class) { + return true + } + } + return false +} + +// RemoveClass removes the given class(es) from each element in the set of matched elements. +// Multiple class names can be specified, separated by a space or via multiple arguments. +// If no class name is provided, all classes are removed. +func (s *Selection) RemoveClass(class ...string) *Selection { + var rclasses []string + + classStr := strings.TrimSpace(strings.Join(class, " ")) + remove := classStr == "" + + if !remove { + rclasses = getClassesSlice(classStr) + } + + for _, n := range s.Nodes { + if remove { + removeAttr(n, "class") + } else { + classes, attr := getClassesAndAttr(n, true) + for _, rcl := range rclasses { + classes = strings.ReplaceAll(classes, " "+rcl+" ", " ") + } + + setClasses(n, attr, classes) + } + } + + return s +} + +// ToggleClass adds or removes the given class(es) for each element in the set of matched elements. +// Multiple class names can be specified, separated by a space or via multiple arguments. +func (s *Selection) ToggleClass(class ...string) *Selection { + classStr := strings.TrimSpace(strings.Join(class, " ")) + + if classStr == "" { + return s + } + + tcls := getClassesSlice(classStr) + + for _, n := range s.Nodes { + classes, attr := getClassesAndAttr(n, true) + for _, tcl := range tcls { + spaceAroundTcl := " " + tcl + " " + if strings.Contains(classes, spaceAroundTcl) { + classes = strings.ReplaceAll(classes, spaceAroundTcl, " ") + } else { + classes += tcl + " " + } + } + + setClasses(n, attr, classes) + } + + return s +} + +func getAttributePtr(attrName string, n *html.Node) *html.Attribute { + if n == nil { + return nil + } + + for i, a := range n.Attr { + if a.Key == attrName { + return &n.Attr[i] + } + } + return nil +} + +// Private function to get the specified attribute's value from a node. +func getAttributeValue(attrName string, n *html.Node) (val string, exists bool) { + if a := getAttributePtr(attrName, n); a != nil { + val = a.Val + exists = true + } + return +} + +// Get and normalize the "class" attribute from the node. +func getClassesAndAttr(n *html.Node, create bool) (classes string, attr *html.Attribute) { + // Applies only to element nodes + if n.Type == html.ElementNode { + attr = getAttributePtr("class", n) + if attr == nil && create { + n.Attr = append(n.Attr, html.Attribute{ + Key: "class", + Val: "", + }) + attr = &n.Attr[len(n.Attr)-1] + } + } + + if attr == nil { + classes = " " + } else { + classes = rxClassTrim.ReplaceAllString(" "+attr.Val+" ", " ") + } + + return +} + +func getClassesSlice(classes string) []string { + return strings.Split(rxClassTrim.ReplaceAllString(" "+classes+" ", " "), " ") +} + +func removeAttr(n *html.Node, attrName string) { + for i, a := range n.Attr { + if a.Key == attrName { + n.Attr[i], n.Attr[len(n.Attr)-1], n.Attr = + n.Attr[len(n.Attr)-1], html.Attribute{}, n.Attr[:len(n.Attr)-1] + return + } + } +} + +func setClasses(n *html.Node, attr *html.Attribute, classes string) { + classes = strings.TrimSpace(classes) + if classes == "" { + removeAttr(n, "class") + return + } + + attr.Val = classes +} diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/query.go b/scraper-go/vendor/github.com/PuerkitoBio/goquery/query.go new file mode 100644 index 0000000..fe86bf0 --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/query.go @@ -0,0 +1,49 @@ +package goquery + +import "golang.org/x/net/html" + +// Is checks the current matched set of elements against a selector and +// returns true if at least one of these elements matches. +func (s *Selection) Is(selector string) bool { + return s.IsMatcher(compileMatcher(selector)) +} + +// IsMatcher checks the current matched set of elements against a matcher and +// returns true if at least one of these elements matches. +func (s *Selection) IsMatcher(m Matcher) bool { + if len(s.Nodes) > 0 { + if len(s.Nodes) == 1 { + return m.Match(s.Nodes[0]) + } + return len(m.Filter(s.Nodes)) > 0 + } + + return false +} + +// IsFunction checks the current matched set of elements against a predicate and +// returns true if at least one of these elements matches. +func (s *Selection) IsFunction(f func(int, *Selection) bool) bool { + return s.FilterFunction(f).Length() > 0 +} + +// IsSelection checks the current matched set of elements against a Selection object +// and returns true if at least one of these elements matches. +func (s *Selection) IsSelection(sel *Selection) bool { + return s.FilterSelection(sel).Length() > 0 +} + +// IsNodes checks the current matched set of elements against the specified nodes +// and returns true if at least one of these elements matches. +func (s *Selection) IsNodes(nodes ...*html.Node) bool { + return s.FilterNodes(nodes...).Length() > 0 +} + +// Contains returns true if the specified Node is within, +// at any depth, one of the nodes in the Selection object. +// It is NOT inclusive, to behave like jQuery's implementation, and +// unlike Javascript's .contains, so if the contained +// node is itself in the selection, it returns false. +func (s *Selection) Contains(n *html.Node) bool { + return sliceContains(s.Nodes, n) +} diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/traversal.go b/scraper-go/vendor/github.com/PuerkitoBio/goquery/traversal.go new file mode 100644 index 0000000..c45fa5d --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/traversal.go @@ -0,0 +1,704 @@ +package goquery + +import "golang.org/x/net/html" + +type siblingType int + +// Sibling type, used internally when iterating over children at the same +// level (siblings) to specify which nodes are requested. +const ( + siblingPrevUntil siblingType = iota - 3 + siblingPrevAll + siblingPrev + siblingAll + siblingNext + siblingNextAll + siblingNextUntil + siblingAllIncludingNonElements +) + +// Find gets the descendants of each element in the current set of matched +// elements, filtered by a selector. It returns a new Selection object +// containing these matched elements. +// +// Note that as for all methods accepting a selector string, the selector is +// compiled and applied by the cascadia package and inherits its behavior and +// constraints regarding supported selectors. See the note on cascadia in +// the goquery documentation here: +// https://github.com/PuerkitoBio/goquery?tab=readme-ov-file#api +func (s *Selection) Find(selector string) *Selection { + return pushStack(s, findWithMatcher(s.Nodes, compileMatcher(selector))) +} + +// FindMatcher gets the descendants of each element in the current set of matched +// elements, filtered by the matcher. It returns a new Selection object +// containing these matched elements. +func (s *Selection) FindMatcher(m Matcher) *Selection { + return pushStack(s, findWithMatcher(s.Nodes, m)) +} + +// FindSelection gets the descendants of each element in the current +// Selection, filtered by a Selection. It returns a new Selection object +// containing these matched elements. +func (s *Selection) FindSelection(sel *Selection) *Selection { + if sel == nil { + return pushStack(s, nil) + } + return s.FindNodes(sel.Nodes...) +} + +// FindNodes gets the descendants of each element in the current +// Selection, filtered by some nodes. It returns a new Selection object +// containing these matched elements. +func (s *Selection) FindNodes(nodes ...*html.Node) *Selection { + return pushStack(s, mapNodes(nodes, func(i int, n *html.Node) []*html.Node { + if sliceContains(s.Nodes, n) { + return []*html.Node{n} + } + return nil + })) +} + +// Contents gets the children of each element in the Selection, +// including text and comment nodes. It returns a new Selection object +// containing these elements. +func (s *Selection) Contents() *Selection { + return pushStack(s, getChildrenNodes(s.Nodes, siblingAllIncludingNonElements)) +} + +// ContentsFiltered gets the children of each element in the Selection, +// filtered by the specified selector. It returns a new Selection +// object containing these elements. Since selectors only act on Element nodes, +// this function is an alias to ChildrenFiltered unless the selector is empty, +// in which case it is an alias to Contents. +func (s *Selection) ContentsFiltered(selector string) *Selection { + if selector != "" { + return s.ChildrenFiltered(selector) + } + return s.Contents() +} + +// ContentsMatcher gets the children of each element in the Selection, +// filtered by the specified matcher. It returns a new Selection +// object containing these elements. Since matchers only act on Element nodes, +// this function is an alias to ChildrenMatcher. +func (s *Selection) ContentsMatcher(m Matcher) *Selection { + return s.ChildrenMatcher(m) +} + +// Children gets the child elements of each element in the Selection. +// It returns a new Selection object containing these elements. +func (s *Selection) Children() *Selection { + return pushStack(s, getChildrenNodes(s.Nodes, siblingAll)) +} + +// ChildrenFiltered gets the child elements of each element in the Selection, +// filtered by the specified selector. It returns a new +// Selection object containing these elements. +func (s *Selection) ChildrenFiltered(selector string) *Selection { + return filterAndPush(s, getChildrenNodes(s.Nodes, siblingAll), compileMatcher(selector)) +} + +// ChildrenMatcher gets the child elements of each element in the Selection, +// filtered by the specified matcher. It returns a new +// Selection object containing these elements. +func (s *Selection) ChildrenMatcher(m Matcher) *Selection { + return filterAndPush(s, getChildrenNodes(s.Nodes, siblingAll), m) +} + +// Parent gets the parent of each element in the Selection. It returns a +// new Selection object containing the matched elements. +func (s *Selection) Parent() *Selection { + return pushStack(s, getParentNodes(s.Nodes)) +} + +// ParentFiltered gets the parent of each element in the Selection filtered by a +// selector. It returns a new Selection object containing the matched elements. +func (s *Selection) ParentFiltered(selector string) *Selection { + return filterAndPush(s, getParentNodes(s.Nodes), compileMatcher(selector)) +} + +// ParentMatcher gets the parent of each element in the Selection filtered by a +// matcher. It returns a new Selection object containing the matched elements. +func (s *Selection) ParentMatcher(m Matcher) *Selection { + return filterAndPush(s, getParentNodes(s.Nodes), m) +} + +// Closest gets the first element that matches the selector by testing the +// element itself and traversing up through its ancestors in the DOM tree. +func (s *Selection) Closest(selector string) *Selection { + cs := compileMatcher(selector) + return s.ClosestMatcher(cs) +} + +// ClosestMatcher gets the first element that matches the matcher by testing the +// element itself and traversing up through its ancestors in the DOM tree. +func (s *Selection) ClosestMatcher(m Matcher) *Selection { + return pushStack(s, mapNodes(s.Nodes, func(i int, n *html.Node) []*html.Node { + // For each node in the selection, test the node itself, then each parent + // until a match is found. + for ; n != nil; n = n.Parent { + if m.Match(n) { + return []*html.Node{n} + } + } + return nil + })) +} + +// ClosestNodes gets the first element that matches one of the nodes by testing the +// element itself and traversing up through its ancestors in the DOM tree. +func (s *Selection) ClosestNodes(nodes ...*html.Node) *Selection { + set := make(map[*html.Node]bool) + for _, n := range nodes { + set[n] = true + } + return pushStack(s, mapNodes(s.Nodes, func(i int, n *html.Node) []*html.Node { + // For each node in the selection, test the node itself, then each parent + // until a match is found. + for ; n != nil; n = n.Parent { + if set[n] { + return []*html.Node{n} + } + } + return nil + })) +} + +// ClosestSelection gets the first element that matches one of the nodes in the +// Selection by testing the element itself and traversing up through its ancestors +// in the DOM tree. +func (s *Selection) ClosestSelection(sel *Selection) *Selection { + if sel == nil { + return pushStack(s, nil) + } + return s.ClosestNodes(sel.Nodes...) +} + +// Parents gets the ancestors of each element in the current Selection. It +// returns a new Selection object with the matched elements. +func (s *Selection) Parents() *Selection { + return pushStack(s, getParentsNodes(s.Nodes, nil, nil)) +} + +// ParentsFiltered gets the ancestors of each element in the current +// Selection. It returns a new Selection object with the matched elements. +func (s *Selection) ParentsFiltered(selector string) *Selection { + return filterAndPush(s, getParentsNodes(s.Nodes, nil, nil), compileMatcher(selector)) +} + +// ParentsMatcher gets the ancestors of each element in the current +// Selection. It returns a new Selection object with the matched elements. +func (s *Selection) ParentsMatcher(m Matcher) *Selection { + return filterAndPush(s, getParentsNodes(s.Nodes, nil, nil), m) +} + +// ParentsUntil gets the ancestors of each element in the Selection, up to but +// not including the element matched by the selector. It returns a new Selection +// object containing the matched elements. +func (s *Selection) ParentsUntil(selector string) *Selection { + return pushStack(s, getParentsNodes(s.Nodes, compileMatcher(selector), nil)) +} + +// ParentsUntilMatcher gets the ancestors of each element in the Selection, up to but +// not including the element matched by the matcher. It returns a new Selection +// object containing the matched elements. +func (s *Selection) ParentsUntilMatcher(m Matcher) *Selection { + return pushStack(s, getParentsNodes(s.Nodes, m, nil)) +} + +// ParentsUntilSelection gets the ancestors of each element in the Selection, +// up to but not including the elements in the specified Selection. It returns a +// new Selection object containing the matched elements. +func (s *Selection) ParentsUntilSelection(sel *Selection) *Selection { + if sel == nil { + return s.Parents() + } + return s.ParentsUntilNodes(sel.Nodes...) +} + +// ParentsUntilNodes gets the ancestors of each element in the Selection, +// up to but not including the specified nodes. It returns a +// new Selection object containing the matched elements. +func (s *Selection) ParentsUntilNodes(nodes ...*html.Node) *Selection { + return pushStack(s, getParentsNodes(s.Nodes, nil, nodes)) +} + +// ParentsFilteredUntil is like ParentsUntil, with the option to filter the +// results based on a selector string. It returns a new Selection +// object containing the matched elements. +func (s *Selection) ParentsFilteredUntil(filterSelector, untilSelector string) *Selection { + return filterAndPush(s, getParentsNodes(s.Nodes, compileMatcher(untilSelector), nil), compileMatcher(filterSelector)) +} + +// ParentsFilteredUntilMatcher is like ParentsUntilMatcher, with the option to filter the +// results based on a matcher. It returns a new Selection object containing the matched elements. +func (s *Selection) ParentsFilteredUntilMatcher(filter, until Matcher) *Selection { + return filterAndPush(s, getParentsNodes(s.Nodes, until, nil), filter) +} + +// ParentsFilteredUntilSelection is like ParentsUntilSelection, with the +// option to filter the results based on a selector string. It returns a new +// Selection object containing the matched elements. +func (s *Selection) ParentsFilteredUntilSelection(filterSelector string, sel *Selection) *Selection { + return s.ParentsMatcherUntilSelection(compileMatcher(filterSelector), sel) +} + +// ParentsMatcherUntilSelection is like ParentsUntilSelection, with the +// option to filter the results based on a matcher. It returns a new +// Selection object containing the matched elements. +func (s *Selection) ParentsMatcherUntilSelection(filter Matcher, sel *Selection) *Selection { + if sel == nil { + return s.ParentsMatcher(filter) + } + return s.ParentsMatcherUntilNodes(filter, sel.Nodes...) +} + +// ParentsFilteredUntilNodes is like ParentsUntilNodes, with the +// option to filter the results based on a selector string. It returns a new +// Selection object containing the matched elements. +func (s *Selection) ParentsFilteredUntilNodes(filterSelector string, nodes ...*html.Node) *Selection { + return filterAndPush(s, getParentsNodes(s.Nodes, nil, nodes), compileMatcher(filterSelector)) +} + +// ParentsMatcherUntilNodes is like ParentsUntilNodes, with the +// option to filter the results based on a matcher. It returns a new +// Selection object containing the matched elements. +func (s *Selection) ParentsMatcherUntilNodes(filter Matcher, nodes ...*html.Node) *Selection { + return filterAndPush(s, getParentsNodes(s.Nodes, nil, nodes), filter) +} + +// Siblings gets the siblings of each element in the Selection. It returns +// a new Selection object containing the matched elements. +func (s *Selection) Siblings() *Selection { + return pushStack(s, getSiblingNodes(s.Nodes, siblingAll, nil, nil)) +} + +// SiblingsFiltered gets the siblings of each element in the Selection +// filtered by a selector. It returns a new Selection object containing the +// matched elements. +func (s *Selection) SiblingsFiltered(selector string) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingAll, nil, nil), compileMatcher(selector)) +} + +// SiblingsMatcher gets the siblings of each element in the Selection +// filtered by a matcher. It returns a new Selection object containing the +// matched elements. +func (s *Selection) SiblingsMatcher(m Matcher) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingAll, nil, nil), m) +} + +// Next gets the immediately following sibling of each element in the +// Selection. It returns a new Selection object containing the matched elements. +func (s *Selection) Next() *Selection { + return pushStack(s, getSiblingNodes(s.Nodes, siblingNext, nil, nil)) +} + +// NextFiltered gets the immediately following sibling of each element in the +// Selection filtered by a selector. It returns a new Selection object +// containing the matched elements. +func (s *Selection) NextFiltered(selector string) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingNext, nil, nil), compileMatcher(selector)) +} + +// NextMatcher gets the immediately following sibling of each element in the +// Selection filtered by a matcher. It returns a new Selection object +// containing the matched elements. +func (s *Selection) NextMatcher(m Matcher) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingNext, nil, nil), m) +} + +// NextAll gets all the following siblings of each element in the +// Selection. It returns a new Selection object containing the matched elements. +func (s *Selection) NextAll() *Selection { + return pushStack(s, getSiblingNodes(s.Nodes, siblingNextAll, nil, nil)) +} + +// NextAllFiltered gets all the following siblings of each element in the +// Selection filtered by a selector. It returns a new Selection object +// containing the matched elements. +func (s *Selection) NextAllFiltered(selector string) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingNextAll, nil, nil), compileMatcher(selector)) +} + +// NextAllMatcher gets all the following siblings of each element in the +// Selection filtered by a matcher. It returns a new Selection object +// containing the matched elements. +func (s *Selection) NextAllMatcher(m Matcher) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingNextAll, nil, nil), m) +} + +// Prev gets the immediately preceding sibling of each element in the +// Selection. It returns a new Selection object containing the matched elements. +func (s *Selection) Prev() *Selection { + return pushStack(s, getSiblingNodes(s.Nodes, siblingPrev, nil, nil)) +} + +// PrevFiltered gets the immediately preceding sibling of each element in the +// Selection filtered by a selector. It returns a new Selection object +// containing the matched elements. +func (s *Selection) PrevFiltered(selector string) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingPrev, nil, nil), compileMatcher(selector)) +} + +// PrevMatcher gets the immediately preceding sibling of each element in the +// Selection filtered by a matcher. It returns a new Selection object +// containing the matched elements. +func (s *Selection) PrevMatcher(m Matcher) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingPrev, nil, nil), m) +} + +// PrevAll gets all the preceding siblings of each element in the +// Selection. It returns a new Selection object containing the matched elements. +func (s *Selection) PrevAll() *Selection { + return pushStack(s, getSiblingNodes(s.Nodes, siblingPrevAll, nil, nil)) +} + +// PrevAllFiltered gets all the preceding siblings of each element in the +// Selection filtered by a selector. It returns a new Selection object +// containing the matched elements. +func (s *Selection) PrevAllFiltered(selector string) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingPrevAll, nil, nil), compileMatcher(selector)) +} + +// PrevAllMatcher gets all the preceding siblings of each element in the +// Selection filtered by a matcher. It returns a new Selection object +// containing the matched elements. +func (s *Selection) PrevAllMatcher(m Matcher) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingPrevAll, nil, nil), m) +} + +// NextUntil gets all following siblings of each element up to but not +// including the element matched by the selector. It returns a new Selection +// object containing the matched elements. +func (s *Selection) NextUntil(selector string) *Selection { + return pushStack(s, getSiblingNodes(s.Nodes, siblingNextUntil, + compileMatcher(selector), nil)) +} + +// NextUntilMatcher gets all following siblings of each element up to but not +// including the element matched by the matcher. It returns a new Selection +// object containing the matched elements. +func (s *Selection) NextUntilMatcher(m Matcher) *Selection { + return pushStack(s, getSiblingNodes(s.Nodes, siblingNextUntil, + m, nil)) +} + +// NextUntilSelection gets all following siblings of each element up to but not +// including the element matched by the Selection. It returns a new Selection +// object containing the matched elements. +func (s *Selection) NextUntilSelection(sel *Selection) *Selection { + if sel == nil { + return s.NextAll() + } + return s.NextUntilNodes(sel.Nodes...) +} + +// NextUntilNodes gets all following siblings of each element up to but not +// including the element matched by the nodes. It returns a new Selection +// object containing the matched elements. +func (s *Selection) NextUntilNodes(nodes ...*html.Node) *Selection { + return pushStack(s, getSiblingNodes(s.Nodes, siblingNextUntil, + nil, nodes)) +} + +// PrevUntil gets all preceding siblings of each element up to but not +// including the element matched by the selector. It returns a new Selection +// object containing the matched elements. +func (s *Selection) PrevUntil(selector string) *Selection { + return pushStack(s, getSiblingNodes(s.Nodes, siblingPrevUntil, + compileMatcher(selector), nil)) +} + +// PrevUntilMatcher gets all preceding siblings of each element up to but not +// including the element matched by the matcher. It returns a new Selection +// object containing the matched elements. +func (s *Selection) PrevUntilMatcher(m Matcher) *Selection { + return pushStack(s, getSiblingNodes(s.Nodes, siblingPrevUntil, + m, nil)) +} + +// PrevUntilSelection gets all preceding siblings of each element up to but not +// including the element matched by the Selection. It returns a new Selection +// object containing the matched elements. +func (s *Selection) PrevUntilSelection(sel *Selection) *Selection { + if sel == nil { + return s.PrevAll() + } + return s.PrevUntilNodes(sel.Nodes...) +} + +// PrevUntilNodes gets all preceding siblings of each element up to but not +// including the element matched by the nodes. It returns a new Selection +// object containing the matched elements. +func (s *Selection) PrevUntilNodes(nodes ...*html.Node) *Selection { + return pushStack(s, getSiblingNodes(s.Nodes, siblingPrevUntil, + nil, nodes)) +} + +// NextFilteredUntil is like NextUntil, with the option to filter +// the results based on a selector string. +// It returns a new Selection object containing the matched elements. +func (s *Selection) NextFilteredUntil(filterSelector, untilSelector string) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingNextUntil, + compileMatcher(untilSelector), nil), compileMatcher(filterSelector)) +} + +// NextFilteredUntilMatcher is like NextUntilMatcher, with the option to filter +// the results based on a matcher. +// It returns a new Selection object containing the matched elements. +func (s *Selection) NextFilteredUntilMatcher(filter, until Matcher) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingNextUntil, + until, nil), filter) +} + +// NextFilteredUntilSelection is like NextUntilSelection, with the +// option to filter the results based on a selector string. It returns a new +// Selection object containing the matched elements. +func (s *Selection) NextFilteredUntilSelection(filterSelector string, sel *Selection) *Selection { + return s.NextMatcherUntilSelection(compileMatcher(filterSelector), sel) +} + +// NextMatcherUntilSelection is like NextUntilSelection, with the +// option to filter the results based on a matcher. It returns a new +// Selection object containing the matched elements. +func (s *Selection) NextMatcherUntilSelection(filter Matcher, sel *Selection) *Selection { + if sel == nil { + return s.NextMatcher(filter) + } + return s.NextMatcherUntilNodes(filter, sel.Nodes...) +} + +// NextFilteredUntilNodes is like NextUntilNodes, with the +// option to filter the results based on a selector string. It returns a new +// Selection object containing the matched elements. +func (s *Selection) NextFilteredUntilNodes(filterSelector string, nodes ...*html.Node) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingNextUntil, + nil, nodes), compileMatcher(filterSelector)) +} + +// NextMatcherUntilNodes is like NextUntilNodes, with the +// option to filter the results based on a matcher. It returns a new +// Selection object containing the matched elements. +func (s *Selection) NextMatcherUntilNodes(filter Matcher, nodes ...*html.Node) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingNextUntil, + nil, nodes), filter) +} + +// PrevFilteredUntil is like PrevUntil, with the option to filter +// the results based on a selector string. +// It returns a new Selection object containing the matched elements. +func (s *Selection) PrevFilteredUntil(filterSelector, untilSelector string) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingPrevUntil, + compileMatcher(untilSelector), nil), compileMatcher(filterSelector)) +} + +// PrevFilteredUntilMatcher is like PrevUntilMatcher, with the option to filter +// the results based on a matcher. +// It returns a new Selection object containing the matched elements. +func (s *Selection) PrevFilteredUntilMatcher(filter, until Matcher) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingPrevUntil, + until, nil), filter) +} + +// PrevFilteredUntilSelection is like PrevUntilSelection, with the +// option to filter the results based on a selector string. It returns a new +// Selection object containing the matched elements. +func (s *Selection) PrevFilteredUntilSelection(filterSelector string, sel *Selection) *Selection { + return s.PrevMatcherUntilSelection(compileMatcher(filterSelector), sel) +} + +// PrevMatcherUntilSelection is like PrevUntilSelection, with the +// option to filter the results based on a matcher. It returns a new +// Selection object containing the matched elements. +func (s *Selection) PrevMatcherUntilSelection(filter Matcher, sel *Selection) *Selection { + if sel == nil { + return s.PrevMatcher(filter) + } + return s.PrevMatcherUntilNodes(filter, sel.Nodes...) +} + +// PrevFilteredUntilNodes is like PrevUntilNodes, with the +// option to filter the results based on a selector string. It returns a new +// Selection object containing the matched elements. +func (s *Selection) PrevFilteredUntilNodes(filterSelector string, nodes ...*html.Node) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingPrevUntil, + nil, nodes), compileMatcher(filterSelector)) +} + +// PrevMatcherUntilNodes is like PrevUntilNodes, with the +// option to filter the results based on a matcher. It returns a new +// Selection object containing the matched elements. +func (s *Selection) PrevMatcherUntilNodes(filter Matcher, nodes ...*html.Node) *Selection { + return filterAndPush(s, getSiblingNodes(s.Nodes, siblingPrevUntil, + nil, nodes), filter) +} + +// Filter and push filters the nodes based on a matcher, and pushes the results +// on the stack, with the srcSel as previous selection. +func filterAndPush(srcSel *Selection, nodes []*html.Node, m Matcher) *Selection { + // Create a temporary Selection with the specified nodes to filter using winnow + sel := &Selection{nodes, srcSel.document, nil} + // Filter based on matcher and push on stack + return pushStack(srcSel, winnow(sel, m, true)) +} + +// Internal implementation of Find that return raw nodes. +func findWithMatcher(nodes []*html.Node, m Matcher) []*html.Node { + // Map nodes to find the matches within the children of each node + return mapNodes(nodes, func(i int, n *html.Node) (result []*html.Node) { + // Go down one level, becausejQuery's Find selects only within descendants + for c := n.FirstChild; c != nil; c = c.NextSibling { + if c.Type == html.ElementNode { + result = append(result, m.MatchAll(c)...) + } + } + return + }) +} + +// Internal implementation to get all parent nodes, stopping at the specified +// node (or nil if no stop). +func getParentsNodes(nodes []*html.Node, stopm Matcher, stopNodes []*html.Node) []*html.Node { + return mapNodes(nodes, func(i int, n *html.Node) (result []*html.Node) { + for p := n.Parent; p != nil; p = p.Parent { + sel := newSingleSelection(p, nil) + if stopm != nil { + if sel.IsMatcher(stopm) { + break + } + } else if len(stopNodes) > 0 { + if sel.IsNodes(stopNodes...) { + break + } + } + if p.Type == html.ElementNode { + result = append(result, p) + } + } + return + }) +} + +// Internal implementation of sibling nodes that return a raw slice of matches. +func getSiblingNodes(nodes []*html.Node, st siblingType, untilm Matcher, untilNodes []*html.Node) []*html.Node { + var f func(*html.Node) bool + + // If the requested siblings are ...Until, create the test function to + // determine if the until condition is reached (returns true if it is) + if st == siblingNextUntil || st == siblingPrevUntil { + f = func(n *html.Node) bool { + if untilm != nil { + // Matcher-based condition + sel := newSingleSelection(n, nil) + return sel.IsMatcher(untilm) + } else if len(untilNodes) > 0 { + // Nodes-based condition + sel := newSingleSelection(n, nil) + return sel.IsNodes(untilNodes...) + } + return false + } + } + + return mapNodes(nodes, func(i int, n *html.Node) []*html.Node { + return getChildrenWithSiblingType(n.Parent, st, n, f) + }) +} + +// Gets the children nodes of each node in the specified slice of nodes, +// based on the sibling type request. +func getChildrenNodes(nodes []*html.Node, st siblingType) []*html.Node { + return mapNodes(nodes, func(i int, n *html.Node) []*html.Node { + return getChildrenWithSiblingType(n, st, nil, nil) + }) +} + +// Gets the children of the specified parent, based on the requested sibling +// type, skipping a specified node if required. +func getChildrenWithSiblingType(parent *html.Node, st siblingType, skipNode *html.Node, + untilFunc func(*html.Node) bool) (result []*html.Node) { + + // Create the iterator function + var iter = func(cur *html.Node) (ret *html.Node) { + // Based on the sibling type requested, iterate the right way + for { + switch st { + case siblingAll, siblingAllIncludingNonElements: + if cur == nil { + // First iteration, start with first child of parent + // Skip node if required + if ret = parent.FirstChild; ret == skipNode && skipNode != nil { + ret = skipNode.NextSibling + } + } else { + // Skip node if required + if ret = cur.NextSibling; ret == skipNode && skipNode != nil { + ret = skipNode.NextSibling + } + } + case siblingPrev, siblingPrevAll, siblingPrevUntil: + if cur == nil { + // Start with previous sibling of the skip node + ret = skipNode.PrevSibling + } else { + ret = cur.PrevSibling + } + case siblingNext, siblingNextAll, siblingNextUntil: + if cur == nil { + // Start with next sibling of the skip node + ret = skipNode.NextSibling + } else { + ret = cur.NextSibling + } + default: + panic("Invalid sibling type.") + } + if ret == nil || ret.Type == html.ElementNode || st == siblingAllIncludingNonElements { + return + } + // Not a valid node, try again from this one + cur = ret + } + } + + for c := iter(nil); c != nil; c = iter(c) { + // If this is an ...Until case, test before append (returns true + // if the until condition is reached) + if st == siblingNextUntil || st == siblingPrevUntil { + if untilFunc(c) { + return + } + } + result = append(result, c) + if st == siblingNext || st == siblingPrev { + // Only one node was requested (immediate next or previous), so exit + return + } + } + return +} + +// Internal implementation of parent nodes that return a raw slice of Nodes. +func getParentNodes(nodes []*html.Node) []*html.Node { + return mapNodes(nodes, func(i int, n *html.Node) []*html.Node { + if n.Parent != nil && n.Parent.Type == html.ElementNode { + return []*html.Node{n.Parent} + } + return nil + }) +} + +// Internal map function used by many traversing methods. Takes the source nodes +// to iterate on and the mapping function that returns an array of nodes. +// Returns an array of nodes mapped by calling the callback function once for +// each node in the source nodes. +func mapNodes(nodes []*html.Node, f func(int, *html.Node) []*html.Node) (result []*html.Node) { + set := make(map[*html.Node]bool) + for i, n := range nodes { + if vals := f(i, n); len(vals) > 0 { + result = appendWithoutDuplicates(result, vals, set) + } + } + return result +} diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/type.go b/scraper-go/vendor/github.com/PuerkitoBio/goquery/type.go new file mode 100644 index 0000000..6646c14 --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/type.go @@ -0,0 +1,203 @@ +package goquery + +import ( + "errors" + "io" + "net/http" + "net/url" + + "github.com/andybalholm/cascadia" + "golang.org/x/net/html" +) + +// Document represents an HTML document to be manipulated. Unlike jQuery, which +// is loaded as part of a DOM document, and thus acts upon its containing +// document, GoQuery doesn't know which HTML document to act upon. So it needs +// to be told, and that's what the Document class is for. It holds the root +// document node to manipulate, and can make selections on this document. +type Document struct { + *Selection + Url *url.URL + rootNode *html.Node +} + +// NewDocumentFromNode is a Document constructor that takes a root html Node +// as argument. +func NewDocumentFromNode(root *html.Node) *Document { + return newDocument(root, nil) +} + +// NewDocument is a Document constructor that takes a string URL as argument. +// It loads the specified document, parses it, and stores the root Document +// node, ready to be manipulated. +// +// Deprecated: Use the net/http standard library package to make the request +// and validate the response before calling goquery.NewDocumentFromReader +// with the response's body. +func NewDocument(url string) (*Document, error) { + // Load the URL + res, e := http.Get(url) + if e != nil { + return nil, e + } + return NewDocumentFromResponse(res) +} + +// NewDocumentFromReader returns a Document from an io.Reader. +// It returns an error as second value if the reader's data cannot be parsed +// as html. It does not check if the reader is also an io.Closer, the +// provided reader is never closed by this call. It is the responsibility +// of the caller to close it if required. +func NewDocumentFromReader(r io.Reader) (*Document, error) { + root, e := html.Parse(r) + if e != nil { + return nil, e + } + return newDocument(root, nil), nil +} + +// NewDocumentFromResponse is another Document constructor that takes an http response as argument. +// It loads the specified response's document, parses it, and stores the root Document +// node, ready to be manipulated. The response's body is closed on return. +// +// Deprecated: Use goquery.NewDocumentFromReader with the response's body. +func NewDocumentFromResponse(res *http.Response) (*Document, error) { + if res == nil { + return nil, errors.New("Response is nil") + } + defer res.Body.Close() + if res.Request == nil { + return nil, errors.New("Response.Request is nil") + } + + // Parse the HTML into nodes + root, e := html.Parse(res.Body) + if e != nil { + return nil, e + } + + // Create and fill the document + return newDocument(root, res.Request.URL), nil +} + +// CloneDocument creates a deep-clone of a document. +func CloneDocument(doc *Document) *Document { + return newDocument(cloneNode(doc.rootNode), doc.Url) +} + +// Private constructor, make sure all fields are correctly filled. +func newDocument(root *html.Node, url *url.URL) *Document { + // Create and fill the document + d := &Document{nil, url, root} + d.Selection = newSingleSelection(root, d) + return d +} + +// Selection represents a collection of nodes matching some criteria. The +// initial Selection can be created by using Document.Find, and then +// manipulated using the jQuery-like chainable syntax and methods. +type Selection struct { + Nodes []*html.Node + document *Document + prevSel *Selection +} + +// Helper constructor to create an empty selection +func newEmptySelection(doc *Document) *Selection { + return &Selection{nil, doc, nil} +} + +// Helper constructor to create a selection of only one node +func newSingleSelection(node *html.Node, doc *Document) *Selection { + return &Selection{[]*html.Node{node}, doc, nil} +} + +// Matcher is an interface that defines the methods to match +// HTML nodes against a compiled selector string. Cascadia's +// Selector implements this interface. +type Matcher interface { + Match(*html.Node) bool + MatchAll(*html.Node) []*html.Node + Filter([]*html.Node) []*html.Node +} + +// Single compiles a selector string to a Matcher that stops after the first +// match is found. +// +// By default, Selection.Find and other functions that accept a selector string +// to select nodes will use all matches corresponding to that selector. By +// using the Matcher returned by Single, at most the first match will be +// selected. +// +// For example, those two statements are semantically equivalent: +// +// sel1 := doc.Find("a").First() +// sel2 := doc.FindMatcher(goquery.Single("a")) +// +// The one using Single is optimized to be potentially much faster on large +// documents. +// +// Only the behaviour of the MatchAll method of the Matcher interface is +// altered compared to standard Matchers. This means that the single-selection +// property of the Matcher only applies for Selection methods where the Matcher +// is used to select nodes, not to filter or check if a node matches the +// Matcher - in those cases, the behaviour of the Matcher is unchanged (e.g. +// FilterMatcher(Single("div")) will still result in a Selection with multiple +// "div"s if there were many "div"s in the Selection to begin with). +func Single(selector string) Matcher { + return singleMatcher{compileMatcher(selector)} +} + +// SingleMatcher returns a Matcher matches the same nodes as m, but that stops +// after the first match is found. +// +// See the documentation of function Single for more details. +func SingleMatcher(m Matcher) Matcher { + if _, ok := m.(singleMatcher); ok { + // m is already a singleMatcher + return m + } + return singleMatcher{m} +} + +// compileMatcher compiles the selector string s and returns +// the corresponding Matcher. If s is an invalid selector string, +// it returns a Matcher that fails all matches. +func compileMatcher(s string) Matcher { + cs, err := cascadia.Compile(s) + if err != nil { + return invalidMatcher{} + } + return cs +} + +type singleMatcher struct { + Matcher +} + +func (m singleMatcher) MatchAll(n *html.Node) []*html.Node { + // Optimized version - stops finding at the first match (cascadia-compiled + // matchers all use this code path). + if mm, ok := m.Matcher.(interface{ MatchFirst(*html.Node) *html.Node }); ok { + node := mm.MatchFirst(n) + if node == nil { + return nil + } + return []*html.Node{node} + } + + // Fallback version, for e.g. test mocks that don't provide the MatchFirst + // method. + nodes := m.Matcher.MatchAll(n) + if len(nodes) > 0 { + return nodes[:1:1] + } + return nil +} + +// invalidMatcher is a Matcher that always fails to match. +type invalidMatcher struct{} + +func (invalidMatcher) Match(n *html.Node) bool { return false } +func (invalidMatcher) MatchAll(n *html.Node) []*html.Node { return nil } +func (invalidMatcher) Filter(ns []*html.Node) []*html.Node { return nil } diff --git a/scraper-go/vendor/github.com/PuerkitoBio/goquery/utilities.go b/scraper-go/vendor/github.com/PuerkitoBio/goquery/utilities.go new file mode 100644 index 0000000..361795b --- /dev/null +++ b/scraper-go/vendor/github.com/PuerkitoBio/goquery/utilities.go @@ -0,0 +1,177 @@ +package goquery + +import ( + "io" + "strings" + + "golang.org/x/net/html" +) + +// used to determine if a set (map[*html.Node]bool) should be used +// instead of iterating over a slice. The set uses more memory and +// is slower than slice iteration for small N. +const minNodesForSet = 1000 + +var nodeNames = []string{ + html.ErrorNode: "#error", + html.TextNode: "#text", + html.DocumentNode: "#document", + html.CommentNode: "#comment", +} + +// NodeName returns the node name of the first element in the selection. +// It tries to behave in a similar way as the DOM's nodeName property +// (https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeName). +// +// Go's net/html package defines the following node types, listed with +// the corresponding returned value from this function: +// +// ErrorNode : #error +// TextNode : #text +// DocumentNode : #document +// ElementNode : the element's tag name +// CommentNode : #comment +// DoctypeNode : the name of the document type +func NodeName(s *Selection) string { + if s.Length() == 0 { + return "" + } + return nodeName(s.Get(0)) +} + +// nodeName returns the node name of the given html node. +// See NodeName for additional details on behaviour. +func nodeName(node *html.Node) string { + if node == nil { + return "" + } + + switch node.Type { + case html.ElementNode, html.DoctypeNode: + return node.Data + default: + if int(node.Type) < len(nodeNames) { + return nodeNames[node.Type] + } + return "" + } +} + +// Render renders the HTML of the first item in the selection and writes it to +// the writer. It behaves the same as OuterHtml but writes to w instead of +// returning the string. +func Render(w io.Writer, s *Selection) error { + if s.Length() == 0 { + return nil + } + n := s.Get(0) + return html.Render(w, n) +} + +// OuterHtml returns the outer HTML rendering of the first item in +// the selection - that is, the HTML including the first element's +// tag and attributes. +// +// Unlike Html, this is a function and not a method on the Selection, +// because this is not a jQuery method (in javascript-land, this is +// a property provided by the DOM). +func OuterHtml(s *Selection) (string, error) { + var builder strings.Builder + if err := Render(&builder, s); err != nil { + return "", err + } + return builder.String(), nil +} + +// Loop through all container nodes to search for the target node. +func sliceContains(container []*html.Node, contained *html.Node) bool { + for _, n := range container { + if nodeContains(n, contained) { + return true + } + } + + return false +} + +// Checks if the contained node is within the container node. +func nodeContains(container *html.Node, contained *html.Node) bool { + // Check if the parent of the contained node is the container node, traversing + // upward until the top is reached, or the container is found. + for contained = contained.Parent; contained != nil; contained = contained.Parent { + if container == contained { + return true + } + } + return false +} + +// Checks if the target node is in the slice of nodes. +func isInSlice(slice []*html.Node, node *html.Node) bool { + return indexInSlice(slice, node) > -1 +} + +// Returns the index of the target node in the slice, or -1. +func indexInSlice(slice []*html.Node, node *html.Node) int { + if node != nil { + for i, n := range slice { + if n == node { + return i + } + } + } + return -1 +} + +// Appends the new nodes to the target slice, making sure no duplicate is added. +// There is no check to the original state of the target slice, so it may still +// contain duplicates. The target slice is returned because append() may create +// a new underlying array. If targetSet is nil, a local set is created with the +// target if len(target) + len(nodes) is greater than minNodesForSet. +func appendWithoutDuplicates(target []*html.Node, nodes []*html.Node, targetSet map[*html.Node]bool) []*html.Node { + // if there are not that many nodes, don't use the map, faster to just use nested loops + // (unless a non-nil targetSet is passed, in which case the caller knows better). + if targetSet == nil && len(target)+len(nodes) < minNodesForSet { + for _, n := range nodes { + if !isInSlice(target, n) { + target = append(target, n) + } + } + return target + } + + // if a targetSet is passed, then assume it is reliable, otherwise create one + // and initialize it with the current target contents. + if targetSet == nil { + targetSet = make(map[*html.Node]bool, len(target)) + for _, n := range target { + targetSet[n] = true + } + } + for _, n := range nodes { + if !targetSet[n] { + target = append(target, n) + targetSet[n] = true + } + } + + return target +} + +// Loop through a selection, returning only those nodes that pass the predicate +// function. +func grep(sel *Selection, predicate func(i int, s *Selection) bool) (result []*html.Node) { + for i, n := range sel.Nodes { + if predicate(i, newSingleSelection(n, sel.document)) { + result = append(result, n) + } + } + return result +} + +// Creates a new Selection object based on the specified nodes, and keeps the +// source Selection object on the stack (linked list). +func pushStack(fromSel *Selection, nodes []*html.Node) *Selection { + result := &Selection{nodes, fromSel.document, fromSel} + return result +} diff --git a/scraper-go/vendor/github.com/andybalholm/cascadia/.travis.yml b/scraper-go/vendor/github.com/andybalholm/cascadia/.travis.yml new file mode 100644 index 0000000..6f22751 --- /dev/null +++ b/scraper-go/vendor/github.com/andybalholm/cascadia/.travis.yml @@ -0,0 +1,14 @@ +language: go + +go: + - 1.3 + - 1.4 + +install: + - go get github.com/andybalholm/cascadia + +script: + - go test -v + +notifications: + email: false diff --git a/scraper-go/vendor/github.com/andybalholm/cascadia/LICENSE b/scraper-go/vendor/github.com/andybalholm/cascadia/LICENSE new file mode 100644 index 0000000..ee5ad35 --- /dev/null +++ b/scraper-go/vendor/github.com/andybalholm/cascadia/LICENSE @@ -0,0 +1,24 @@ +Copyright (c) 2011 Andy Balholm. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/scraper-go/vendor/github.com/andybalholm/cascadia/README.md b/scraper-go/vendor/github.com/andybalholm/cascadia/README.md new file mode 100644 index 0000000..6433cb9 --- /dev/null +++ b/scraper-go/vendor/github.com/andybalholm/cascadia/README.md @@ -0,0 +1,144 @@ +# cascadia + +[![](https://travis-ci.org/andybalholm/cascadia.svg)](https://travis-ci.org/andybalholm/cascadia) + +The Cascadia package implements CSS selectors for use with the parse trees produced by the html package. + +To test CSS selectors without writing Go code, check out [cascadia](https://github.com/suntong/cascadia) the command line tool, a thin wrapper around this package. + +[Refer to godoc here](https://godoc.org/github.com/andybalholm/cascadia). + +## Example + +The following is an example of how you can use Cascadia. + +```go +package main + +import ( + "fmt" + "log" + "strings" + + "github.com/andybalholm/cascadia" + "golang.org/x/net/html" +) + +var pricingHtml string = ` +
+
+

Free

+
+
+

$0/mo

+
    +
  • 10 users included
  • +
  • 2 GB of storage
  • +
  • See more
  • +
+
+
+ +
+
+

Pro

+
+
+

$15/mo

+
    +
  • 20 users included
  • +
  • 10 GB of storage
  • +
  • See more
  • +
+
+
+ +
+
+

Enterprise

+
+
+

$29/mo

+
    +
  • 30 users included
  • +
  • 15 GB of storage
  • +
  • See more
  • +
+
+
+` + +func Query(n *html.Node, query string) *html.Node { + sel, err := cascadia.Parse(query) + if err != nil { + return &html.Node{} + } + return cascadia.Query(n, sel) +} + +func QueryAll(n *html.Node, query string) []*html.Node { + sel, err := cascadia.Parse(query) + if err != nil { + return []*html.Node{} + } + return cascadia.QueryAll(n, sel) +} + +func AttrOr(n *html.Node, attrName, or string) string { + for _, a := range n.Attr { + if a.Key == attrName { + return a.Val + } + } + return or +} + +func main() { + doc, err := html.Parse(strings.NewReader(pricingHtml)) + if err != nil { + log.Fatal(err) + } + fmt.Printf("List of pricing plans:\n\n") + for i, p := range QueryAll(doc, "div.card.mb-4.box-shadow") { + planName := Query(p, "h4").FirstChild.Data + price := Query(p, ".pricing-card-title").FirstChild.Data + usersIncluded := Query(p, "li:first-child").FirstChild.Data + storage := Query(p, "li:nth-child(2)").FirstChild.Data + detailsUrl := AttrOr(Query(p, "li:last-child a"), "href", "(No link available)") + fmt.Printf( + "Plan #%d\nName: %s\nPrice: %s\nUsers: %s\nStorage: %s\nDetails: %s\n\n", + i+1, + planName, + price, + usersIncluded, + storage, + detailsUrl, + ) + } +} +``` +The output is: +``` +List of pricing plans: + +Plan #1 +Name: Free +Price: $0/mo +Users: 10 users included +Storage: 2 GB of storage +Details: https://example.com + +Plan #2 +Name: Pro +Price: $15/mo +Users: 20 users included +Storage: 10 GB of storage +Details: https://example.com + +Plan #3 +Name: Enterprise +Price: $29/mo +Users: 30 users included +Storage: 15 GB of storage +Details: (No link available) +``` diff --git a/scraper-go/vendor/github.com/andybalholm/cascadia/parser.go b/scraper-go/vendor/github.com/andybalholm/cascadia/parser.go new file mode 100644 index 0000000..06eccd5 --- /dev/null +++ b/scraper-go/vendor/github.com/andybalholm/cascadia/parser.go @@ -0,0 +1,889 @@ +// Package cascadia is an implementation of CSS selectors. +package cascadia + +import ( + "errors" + "fmt" + "regexp" + "strconv" + "strings" +) + +// a parser for CSS selectors +type parser struct { + s string // the source text + i int // the current position + + // if `false`, parsing a pseudo-element + // returns an error. + acceptPseudoElements bool +} + +// parseEscape parses a backslash escape. +func (p *parser) parseEscape() (result string, err error) { + if len(p.s) < p.i+2 || p.s[p.i] != '\\' { + return "", errors.New("invalid escape sequence") + } + + start := p.i + 1 + c := p.s[start] + switch { + case c == '\r' || c == '\n' || c == '\f': + return "", errors.New("escaped line ending outside string") + case hexDigit(c): + // unicode escape (hex) + var i int + for i = start; i < start+6 && i < len(p.s) && hexDigit(p.s[i]); i++ { + // empty + } + v, _ := strconv.ParseUint(p.s[start:i], 16, 64) + if len(p.s) > i { + switch p.s[i] { + case '\r': + i++ + if len(p.s) > i && p.s[i] == '\n' { + i++ + } + case ' ', '\t', '\n', '\f': + i++ + } + } + p.i = i + return string(rune(v)), nil + } + + // Return the literal character after the backslash. + result = p.s[start : start+1] + p.i += 2 + return result, nil +} + +// toLowerASCII returns s with all ASCII capital letters lowercased. +func toLowerASCII(s string) string { + var b []byte + for i := 0; i < len(s); i++ { + if c := s[i]; 'A' <= c && c <= 'Z' { + if b == nil { + b = make([]byte, len(s)) + copy(b, s) + } + b[i] = s[i] + ('a' - 'A') + } + } + + if b == nil { + return s + } + + return string(b) +} + +func hexDigit(c byte) bool { + return '0' <= c && c <= '9' || 'a' <= c && c <= 'f' || 'A' <= c && c <= 'F' +} + +// nameStart returns whether c can be the first character of an identifier +// (not counting an initial hyphen, or an escape sequence). +func nameStart(c byte) bool { + return 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || c == '_' || c > 127 +} + +// nameChar returns whether c can be a character within an identifier +// (not counting an escape sequence). +func nameChar(c byte) bool { + return 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || c == '_' || c > 127 || + c == '-' || '0' <= c && c <= '9' +} + +// parseIdentifier parses an identifier. +func (p *parser) parseIdentifier() (result string, err error) { + const prefix = '-' + var numPrefix int + + for len(p.s) > p.i && p.s[p.i] == prefix { + p.i++ + numPrefix++ + } + + if len(p.s) <= p.i { + return "", errors.New("expected identifier, found EOF instead") + } + + if c := p.s[p.i]; !(nameStart(c) || c == '\\') { + return "", fmt.Errorf("expected identifier, found %c instead", c) + } + + result, err = p.parseName() + if numPrefix > 0 && err == nil { + result = strings.Repeat(string(prefix), numPrefix) + result + } + return +} + +// parseName parses a name (which is like an identifier, but doesn't have +// extra restrictions on the first character). +func (p *parser) parseName() (result string, err error) { + i := p.i +loop: + for i < len(p.s) { + c := p.s[i] + switch { + case nameChar(c): + start := i + for i < len(p.s) && nameChar(p.s[i]) { + i++ + } + result += p.s[start:i] + case c == '\\': + p.i = i + val, err := p.parseEscape() + if err != nil { + return "", err + } + i = p.i + result += val + default: + break loop + } + } + + if result == "" { + return "", errors.New("expected name, found EOF instead") + } + + p.i = i + return result, nil +} + +// parseString parses a single- or double-quoted string. +func (p *parser) parseString() (result string, err error) { + i := p.i + if len(p.s) < i+2 { + return "", errors.New("expected string, found EOF instead") + } + + quote := p.s[i] + i++ + +loop: + for i < len(p.s) { + switch p.s[i] { + case '\\': + if len(p.s) > i+1 { + switch c := p.s[i+1]; c { + case '\r': + if len(p.s) > i+2 && p.s[i+2] == '\n' { + i += 3 + continue loop + } + fallthrough + case '\n', '\f': + i += 2 + continue loop + } + } + p.i = i + val, err := p.parseEscape() + if err != nil { + return "", err + } + i = p.i + result += val + case quote: + break loop + case '\r', '\n', '\f': + return "", errors.New("unexpected end of line in string") + default: + start := i + for i < len(p.s) { + if c := p.s[i]; c == quote || c == '\\' || c == '\r' || c == '\n' || c == '\f' { + break + } + i++ + } + result += p.s[start:i] + } + } + + if i >= len(p.s) { + return "", errors.New("EOF in string") + } + + // Consume the final quote. + i++ + + p.i = i + return result, nil +} + +// parseRegex parses a regular expression; the end is defined by encountering an +// unmatched closing ')' or ']' which is not consumed +func (p *parser) parseRegex() (rx *regexp.Regexp, err error) { + i := p.i + if len(p.s) < i+2 { + return nil, errors.New("expected regular expression, found EOF instead") + } + + // number of open parens or brackets; + // when it becomes negative, finished parsing regex + open := 0 + +loop: + for i < len(p.s) { + switch p.s[i] { + case '(', '[': + open++ + case ')', ']': + open-- + if open < 0 { + break loop + } + } + i++ + } + + if i >= len(p.s) { + return nil, errors.New("EOF in regular expression") + } + rx, err = regexp.Compile(p.s[p.i:i]) + p.i = i + return rx, err +} + +// skipWhitespace consumes whitespace characters and comments. +// It returns true if there was actually anything to skip. +func (p *parser) skipWhitespace() bool { + i := p.i + for i < len(p.s) { + switch p.s[i] { + case ' ', '\t', '\r', '\n', '\f': + i++ + continue + case '/': + if strings.HasPrefix(p.s[i:], "/*") { + end := strings.Index(p.s[i+len("/*"):], "*/") + if end != -1 { + i += end + len("/**/") + continue + } + } + } + break + } + + if i > p.i { + p.i = i + return true + } + + return false +} + +// consumeParenthesis consumes an opening parenthesis and any following +// whitespace. It returns true if there was actually a parenthesis to skip. +func (p *parser) consumeParenthesis() bool { + if p.i < len(p.s) && p.s[p.i] == '(' { + p.i++ + p.skipWhitespace() + return true + } + return false +} + +// consumeClosingParenthesis consumes a closing parenthesis and any preceding +// whitespace. It returns true if there was actually a parenthesis to skip. +func (p *parser) consumeClosingParenthesis() bool { + i := p.i + p.skipWhitespace() + if p.i < len(p.s) && p.s[p.i] == ')' { + p.i++ + return true + } + p.i = i + return false +} + +// parseTypeSelector parses a type selector (one that matches by tag name). +func (p *parser) parseTypeSelector() (result tagSelector, err error) { + tag, err := p.parseIdentifier() + if err != nil { + return + } + return tagSelector{tag: toLowerASCII(tag)}, nil +} + +// parseIDSelector parses a selector that matches by id attribute. +func (p *parser) parseIDSelector() (idSelector, error) { + if p.i >= len(p.s) { + return idSelector{}, fmt.Errorf("expected id selector (#id), found EOF instead") + } + if p.s[p.i] != '#' { + return idSelector{}, fmt.Errorf("expected id selector (#id), found '%c' instead", p.s[p.i]) + } + + p.i++ + id, err := p.parseName() + if err != nil { + return idSelector{}, err + } + + return idSelector{id: id}, nil +} + +// parseClassSelector parses a selector that matches by class attribute. +func (p *parser) parseClassSelector() (classSelector, error) { + if p.i >= len(p.s) { + return classSelector{}, fmt.Errorf("expected class selector (.class), found EOF instead") + } + if p.s[p.i] != '.' { + return classSelector{}, fmt.Errorf("expected class selector (.class), found '%c' instead", p.s[p.i]) + } + + p.i++ + class, err := p.parseIdentifier() + if err != nil { + return classSelector{}, err + } + + return classSelector{class: class}, nil +} + +// parseAttributeSelector parses a selector that matches by attribute value. +func (p *parser) parseAttributeSelector() (attrSelector, error) { + if p.i >= len(p.s) { + return attrSelector{}, fmt.Errorf("expected attribute selector ([attribute]), found EOF instead") + } + if p.s[p.i] != '[' { + return attrSelector{}, fmt.Errorf("expected attribute selector ([attribute]), found '%c' instead", p.s[p.i]) + } + + p.i++ + p.skipWhitespace() + key, err := p.parseIdentifier() + if err != nil { + return attrSelector{}, err + } + key = toLowerASCII(key) + + p.skipWhitespace() + if p.i >= len(p.s) { + return attrSelector{}, errors.New("unexpected EOF in attribute selector") + } + + if p.s[p.i] == ']' { + p.i++ + return attrSelector{key: key, operation: ""}, nil + } + + if p.i+2 >= len(p.s) { + return attrSelector{}, errors.New("unexpected EOF in attribute selector") + } + + op := p.s[p.i : p.i+2] + if op[0] == '=' { + op = "=" + } else if op[1] != '=' { + return attrSelector{}, fmt.Errorf(`expected equality operator, found "%s" instead`, op) + } + p.i += len(op) + + p.skipWhitespace() + if p.i >= len(p.s) { + return attrSelector{}, errors.New("unexpected EOF in attribute selector") + } + var val string + var rx *regexp.Regexp + if op == "#=" { + rx, err = p.parseRegex() + } else { + switch p.s[p.i] { + case '\'', '"': + val, err = p.parseString() + default: + val, err = p.parseIdentifier() + } + } + if err != nil { + return attrSelector{}, err + } + + p.skipWhitespace() + if p.i >= len(p.s) { + return attrSelector{}, errors.New("unexpected EOF in attribute selector") + } + + // check if the attribute contains an ignore case flag + ignoreCase := false + if p.s[p.i] == 'i' || p.s[p.i] == 'I' { + ignoreCase = true + p.i++ + } + + p.skipWhitespace() + if p.i >= len(p.s) { + return attrSelector{}, errors.New("unexpected EOF in attribute selector") + } + + if p.s[p.i] != ']' { + return attrSelector{}, fmt.Errorf("expected ']', found '%c' instead", p.s[p.i]) + } + p.i++ + + switch op { + case "=", "!=", "~=", "|=", "^=", "$=", "*=", "#=": + return attrSelector{key: key, val: val, operation: op, regexp: rx, insensitive: ignoreCase}, nil + default: + return attrSelector{}, fmt.Errorf("attribute operator %q is not supported", op) + } +} + +var ( + errExpectedParenthesis = errors.New("expected '(' but didn't find it") + errExpectedClosingParenthesis = errors.New("expected ')' but didn't find it") + errUnmatchedParenthesis = errors.New("unmatched '('") +) + +// parsePseudoclassSelector parses a pseudoclass selector like :not(p) or a pseudo-element +// For backwards compatibility, both ':' and '::' prefix are allowed for pseudo-elements. +// https://drafts.csswg.org/selectors-3/#pseudo-elements +// Returning a nil `Sel` (and a nil `error`) means we found a pseudo-element. +func (p *parser) parsePseudoclassSelector() (out Sel, pseudoElement string, err error) { + if p.i >= len(p.s) { + return nil, "", fmt.Errorf("expected pseudoclass selector (:pseudoclass), found EOF instead") + } + if p.s[p.i] != ':' { + return nil, "", fmt.Errorf("expected attribute selector (:pseudoclass), found '%c' instead", p.s[p.i]) + } + + p.i++ + var mustBePseudoElement bool + if p.i >= len(p.s) { + return nil, "", fmt.Errorf("got empty pseudoclass (or pseudoelement)") + } + if p.s[p.i] == ':' { // we found a pseudo-element + mustBePseudoElement = true + p.i++ + } + + name, err := p.parseIdentifier() + if err != nil { + return + } + name = toLowerASCII(name) + if mustBePseudoElement && (name != "after" && name != "backdrop" && name != "before" && + name != "cue" && name != "first-letter" && name != "first-line" && name != "grammar-error" && + name != "marker" && name != "placeholder" && name != "selection" && name != "spelling-error") { + return out, "", fmt.Errorf("unknown pseudoelement :%s", name) + } + + switch name { + case "not", "has", "haschild": + if !p.consumeParenthesis() { + return out, "", errExpectedParenthesis + } + sel, parseErr := p.parseSelectorGroup() + if parseErr != nil { + return out, "", parseErr + } + if !p.consumeClosingParenthesis() { + return out, "", errExpectedClosingParenthesis + } + + out = relativePseudoClassSelector{name: name, match: sel} + + case "contains", "containsown": + if !p.consumeParenthesis() { + return out, "", errExpectedParenthesis + } + if p.i == len(p.s) { + return out, "", errUnmatchedParenthesis + } + var val string + switch p.s[p.i] { + case '\'', '"': + val, err = p.parseString() + default: + val, err = p.parseIdentifier() + } + if err != nil { + return out, "", err + } + val = strings.ToLower(val) + p.skipWhitespace() + if p.i >= len(p.s) { + return out, "", errors.New("unexpected EOF in pseudo selector") + } + if !p.consumeClosingParenthesis() { + return out, "", errExpectedClosingParenthesis + } + + out = containsPseudoClassSelector{own: name == "containsown", value: val} + + case "matches", "matchesown": + if !p.consumeParenthesis() { + return out, "", errExpectedParenthesis + } + rx, err := p.parseRegex() + if err != nil { + return out, "", err + } + if p.i >= len(p.s) { + return out, "", errors.New("unexpected EOF in pseudo selector") + } + if !p.consumeClosingParenthesis() { + return out, "", errExpectedClosingParenthesis + } + + out = regexpPseudoClassSelector{own: name == "matchesown", regexp: rx} + + case "nth-child", "nth-last-child", "nth-of-type", "nth-last-of-type": + if !p.consumeParenthesis() { + return out, "", errExpectedParenthesis + } + a, b, err := p.parseNth() + if err != nil { + return out, "", err + } + if !p.consumeClosingParenthesis() { + return out, "", errExpectedClosingParenthesis + } + last := name == "nth-last-child" || name == "nth-last-of-type" + ofType := name == "nth-of-type" || name == "nth-last-of-type" + out = nthPseudoClassSelector{a: a, b: b, last: last, ofType: ofType} + + case "first-child": + out = nthPseudoClassSelector{a: 0, b: 1, ofType: false, last: false} + case "last-child": + out = nthPseudoClassSelector{a: 0, b: 1, ofType: false, last: true} + case "first-of-type": + out = nthPseudoClassSelector{a: 0, b: 1, ofType: true, last: false} + case "last-of-type": + out = nthPseudoClassSelector{a: 0, b: 1, ofType: true, last: true} + case "only-child": + out = onlyChildPseudoClassSelector{ofType: false} + case "only-of-type": + out = onlyChildPseudoClassSelector{ofType: true} + case "input": + out = inputPseudoClassSelector{} + case "empty": + out = emptyElementPseudoClassSelector{} + case "root": + out = rootPseudoClassSelector{} + case "link": + out = linkPseudoClassSelector{} + case "lang": + if !p.consumeParenthesis() { + return out, "", errExpectedParenthesis + } + if p.i == len(p.s) { + return out, "", errUnmatchedParenthesis + } + val, err := p.parseIdentifier() + if err != nil { + return out, "", err + } + val = strings.ToLower(val) + p.skipWhitespace() + if p.i >= len(p.s) { + return out, "", errors.New("unexpected EOF in pseudo selector") + } + if !p.consumeClosingParenthesis() { + return out, "", errExpectedClosingParenthesis + } + out = langPseudoClassSelector{lang: val} + case "enabled": + out = enabledPseudoClassSelector{} + case "disabled": + out = disabledPseudoClassSelector{} + case "checked": + out = checkedPseudoClassSelector{} + case "visited", "hover", "active", "focus", "target": + // Not applicable in a static context: never match. + out = neverMatchSelector{value: ":" + name} + case "after", "backdrop", "before", "cue", "first-letter", "first-line", "grammar-error", "marker", "placeholder", "selection", "spelling-error": + return nil, name, nil + default: + return out, "", fmt.Errorf("unknown pseudoclass or pseudoelement :%s", name) + } + return +} + +// parseInteger parses a decimal integer. +func (p *parser) parseInteger() (int, error) { + i := p.i + start := i + for i < len(p.s) && '0' <= p.s[i] && p.s[i] <= '9' { + i++ + } + if i == start { + return 0, errors.New("expected integer, but didn't find it") + } + p.i = i + + val, err := strconv.Atoi(p.s[start:i]) + if err != nil { + return 0, err + } + + return val, nil +} + +// parseNth parses the argument for :nth-child (normally of the form an+b). +func (p *parser) parseNth() (a, b int, err error) { + // initial state + if p.i >= len(p.s) { + goto eof + } + switch p.s[p.i] { + case '-': + p.i++ + goto negativeA + case '+': + p.i++ + goto positiveA + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + goto positiveA + case 'n', 'N': + a = 1 + p.i++ + goto readN + case 'o', 'O', 'e', 'E': + id, nameErr := p.parseName() + if nameErr != nil { + return 0, 0, nameErr + } + id = toLowerASCII(id) + if id == "odd" { + return 2, 1, nil + } + if id == "even" { + return 2, 0, nil + } + return 0, 0, fmt.Errorf("expected 'odd' or 'even', but found '%s' instead", id) + default: + goto invalid + } + +positiveA: + if p.i >= len(p.s) { + goto eof + } + switch p.s[p.i] { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + a, err = p.parseInteger() + if err != nil { + return 0, 0, err + } + goto readA + case 'n', 'N': + a = 1 + p.i++ + goto readN + default: + goto invalid + } + +negativeA: + if p.i >= len(p.s) { + goto eof + } + switch p.s[p.i] { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + a, err = p.parseInteger() + if err != nil { + return 0, 0, err + } + a = -a + goto readA + case 'n', 'N': + a = -1 + p.i++ + goto readN + default: + goto invalid + } + +readA: + if p.i >= len(p.s) { + goto eof + } + switch p.s[p.i] { + case 'n', 'N': + p.i++ + goto readN + default: + // The number we read as a is actually b. + return 0, a, nil + } + +readN: + p.skipWhitespace() + if p.i >= len(p.s) { + goto eof + } + switch p.s[p.i] { + case '+': + p.i++ + p.skipWhitespace() + b, err = p.parseInteger() + if err != nil { + return 0, 0, err + } + return a, b, nil + case '-': + p.i++ + p.skipWhitespace() + b, err = p.parseInteger() + if err != nil { + return 0, 0, err + } + return a, -b, nil + default: + return a, 0, nil + } + +eof: + return 0, 0, errors.New("unexpected EOF while attempting to parse expression of form an+b") + +invalid: + return 0, 0, errors.New("unexpected character while attempting to parse expression of form an+b") +} + +// parseSimpleSelectorSequence parses a selector sequence that applies to +// a single element. +func (p *parser) parseSimpleSelectorSequence() (Sel, error) { + var selectors []Sel + + if p.i >= len(p.s) { + return nil, errors.New("expected selector, found EOF instead") + } + + switch p.s[p.i] { + case '*': + // It's the universal selector. Just skip over it, since it doesn't affect the meaning. + p.i++ + if p.i+2 < len(p.s) && p.s[p.i:p.i+2] == "|*" { // other version of universal selector + p.i += 2 + } + case '#', '.', '[', ':': + // There's no type selector. Wait to process the other till the main loop. + default: + r, err := p.parseTypeSelector() + if err != nil { + return nil, err + } + selectors = append(selectors, r) + } + + var pseudoElement string +loop: + for p.i < len(p.s) { + var ( + ns Sel + newPseudoElement string + err error + ) + switch p.s[p.i] { + case '#': + ns, err = p.parseIDSelector() + case '.': + ns, err = p.parseClassSelector() + case '[': + ns, err = p.parseAttributeSelector() + case ':': + ns, newPseudoElement, err = p.parsePseudoclassSelector() + default: + break loop + } + if err != nil { + return nil, err + } + // From https://drafts.csswg.org/selectors-3/#pseudo-elements : + // "Only one pseudo-element may appear per selector, and if present + // it must appear after the sequence of simple selectors that + // represents the subjects of the selector."" + if ns == nil { // we found a pseudo-element + if pseudoElement != "" { + return nil, fmt.Errorf("only one pseudo-element is accepted per selector, got %s and %s", pseudoElement, newPseudoElement) + } + if !p.acceptPseudoElements { + return nil, fmt.Errorf("pseudo-element %s found, but pseudo-elements support is disabled", newPseudoElement) + } + pseudoElement = newPseudoElement + } else { + if pseudoElement != "" { + return nil, fmt.Errorf("pseudo-element %s must be at the end of selector", pseudoElement) + } + selectors = append(selectors, ns) + } + + } + if len(selectors) == 1 && pseudoElement == "" { // no need wrap the selectors in compoundSelector + return selectors[0], nil + } + return compoundSelector{selectors: selectors, pseudoElement: pseudoElement}, nil +} + +// parseSelector parses a selector that may include combinators. +func (p *parser) parseSelector() (Sel, error) { + p.skipWhitespace() + result, err := p.parseSimpleSelectorSequence() + if err != nil { + return nil, err + } + + for { + var ( + combinator byte + c Sel + ) + if p.skipWhitespace() { + combinator = ' ' + } + if p.i >= len(p.s) { + return result, nil + } + + switch p.s[p.i] { + case '+', '>', '~': + combinator = p.s[p.i] + p.i++ + p.skipWhitespace() + case ',', ')': + // These characters can't begin a selector, but they can legally occur after one. + return result, nil + } + + if combinator == 0 { + return result, nil + } + + c, err = p.parseSimpleSelectorSequence() + if err != nil { + return nil, err + } + result = combinedSelector{first: result, combinator: combinator, second: c} + } +} + +// parseSelectorGroup parses a group of selectors, separated by commas. +func (p *parser) parseSelectorGroup() (SelectorGroup, error) { + current, err := p.parseSelector() + if err != nil { + return nil, err + } + result := SelectorGroup{current} + + for p.i < len(p.s) { + if p.s[p.i] != ',' { + break + } + p.i++ + c, err := p.parseSelector() + if err != nil { + return nil, err + } + result = append(result, c) + } + return result, nil +} diff --git a/scraper-go/vendor/github.com/andybalholm/cascadia/pseudo_classes.go b/scraper-go/vendor/github.com/andybalholm/cascadia/pseudo_classes.go new file mode 100644 index 0000000..6234c3e --- /dev/null +++ b/scraper-go/vendor/github.com/andybalholm/cascadia/pseudo_classes.go @@ -0,0 +1,458 @@ +package cascadia + +import ( + "bytes" + "fmt" + "regexp" + "strings" + + "golang.org/x/net/html" + "golang.org/x/net/html/atom" +) + +// This file implements the pseudo classes selectors, +// which share the implementation of PseudoElement() and Specificity() + +type abstractPseudoClass struct{} + +func (s abstractPseudoClass) Specificity() Specificity { + return Specificity{0, 1, 0} +} + +func (c abstractPseudoClass) PseudoElement() string { + return "" +} + +type relativePseudoClassSelector struct { + name string // one of "not", "has", "haschild" + match SelectorGroup +} + +func (s relativePseudoClassSelector) Match(n *html.Node) bool { + if n.Type != html.ElementNode { + return false + } + switch s.name { + case "not": + // matches elements that do not match a. + return !s.match.Match(n) + case "has": + // matches elements with any descendant that matches a. + return hasDescendantMatch(n, s.match) + case "haschild": + // matches elements with a child that matches a. + return hasChildMatch(n, s.match) + default: + panic(fmt.Sprintf("unsupported relative pseudo class selector : %s", s.name)) + } +} + +// hasChildMatch returns whether n has any child that matches a. +func hasChildMatch(n *html.Node, a Matcher) bool { + for c := n.FirstChild; c != nil; c = c.NextSibling { + if a.Match(c) { + return true + } + } + return false +} + +// hasDescendantMatch performs a depth-first search of n's descendants, +// testing whether any of them match a. It returns true as soon as a match is +// found, or false if no match is found. +func hasDescendantMatch(n *html.Node, a Matcher) bool { + for c := n.FirstChild; c != nil; c = c.NextSibling { + if a.Match(c) || (c.Type == html.ElementNode && hasDescendantMatch(c, a)) { + return true + } + } + return false +} + +// Specificity returns the specificity of the most specific selectors +// in the pseudo-class arguments. +// See https://www.w3.org/TR/selectors/#specificity-rules +func (s relativePseudoClassSelector) Specificity() Specificity { + var max Specificity + for _, sel := range s.match { + newSpe := sel.Specificity() + if max.Less(newSpe) { + max = newSpe + } + } + return max +} + +func (c relativePseudoClassSelector) PseudoElement() string { + return "" +} + +type containsPseudoClassSelector struct { + abstractPseudoClass + value string + own bool +} + +func (s containsPseudoClassSelector) Match(n *html.Node) bool { + var text string + if s.own { + // matches nodes that directly contain the given text + text = strings.ToLower(nodeOwnText(n)) + } else { + // matches nodes that contain the given text. + text = strings.ToLower(nodeText(n)) + } + return strings.Contains(text, s.value) +} + +type regexpPseudoClassSelector struct { + abstractPseudoClass + regexp *regexp.Regexp + own bool +} + +func (s regexpPseudoClassSelector) Match(n *html.Node) bool { + var text string + if s.own { + // matches nodes whose text directly matches the specified regular expression + text = nodeOwnText(n) + } else { + // matches nodes whose text matches the specified regular expression + text = nodeText(n) + } + return s.regexp.MatchString(text) +} + +// writeNodeText writes the text contained in n and its descendants to b. +func writeNodeText(n *html.Node, b *bytes.Buffer) { + switch n.Type { + case html.TextNode: + b.WriteString(n.Data) + case html.ElementNode: + for c := n.FirstChild; c != nil; c = c.NextSibling { + writeNodeText(c, b) + } + } +} + +// nodeText returns the text contained in n and its descendants. +func nodeText(n *html.Node) string { + var b bytes.Buffer + writeNodeText(n, &b) + return b.String() +} + +// nodeOwnText returns the contents of the text nodes that are direct +// children of n. +func nodeOwnText(n *html.Node) string { + var b bytes.Buffer + for c := n.FirstChild; c != nil; c = c.NextSibling { + if c.Type == html.TextNode { + b.WriteString(c.Data) + } + } + return b.String() +} + +type nthPseudoClassSelector struct { + abstractPseudoClass + a, b int + last, ofType bool +} + +func (s nthPseudoClassSelector) Match(n *html.Node) bool { + if s.a == 0 { + if s.last { + return simpleNthLastChildMatch(s.b, s.ofType, n) + } else { + return simpleNthChildMatch(s.b, s.ofType, n) + } + } + return nthChildMatch(s.a, s.b, s.last, s.ofType, n) +} + +// nthChildMatch implements :nth-child(an+b). +// If last is true, implements :nth-last-child instead. +// If ofType is true, implements :nth-of-type instead. +func nthChildMatch(a, b int, last, ofType bool, n *html.Node) bool { + if n.Type != html.ElementNode { + return false + } + + parent := n.Parent + if parent == nil { + return false + } + + i := -1 + count := 0 + for c := parent.FirstChild; c != nil; c = c.NextSibling { + if (c.Type != html.ElementNode) || (ofType && c.Data != n.Data) { + continue + } + count++ + if c == n { + i = count + if !last { + break + } + } + } + + if i == -1 { + // This shouldn't happen, since n should always be one of its parent's children. + return false + } + + if last { + i = count - i + 1 + } + + i -= b + if a == 0 { + return i == 0 + } + + return i%a == 0 && i/a >= 0 +} + +// simpleNthChildMatch implements :nth-child(b). +// If ofType is true, implements :nth-of-type instead. +func simpleNthChildMatch(b int, ofType bool, n *html.Node) bool { + if n.Type != html.ElementNode { + return false + } + + parent := n.Parent + if parent == nil { + return false + } + + count := 0 + for c := parent.FirstChild; c != nil; c = c.NextSibling { + if c.Type != html.ElementNode || (ofType && c.Data != n.Data) { + continue + } + count++ + if c == n { + return count == b + } + if count >= b { + return false + } + } + return false +} + +// simpleNthLastChildMatch implements :nth-last-child(b). +// If ofType is true, implements :nth-last-of-type instead. +func simpleNthLastChildMatch(b int, ofType bool, n *html.Node) bool { + if n.Type != html.ElementNode { + return false + } + + parent := n.Parent + if parent == nil { + return false + } + + count := 0 + for c := parent.LastChild; c != nil; c = c.PrevSibling { + if c.Type != html.ElementNode || (ofType && c.Data != n.Data) { + continue + } + count++ + if c == n { + return count == b + } + if count >= b { + return false + } + } + return false +} + +type onlyChildPseudoClassSelector struct { + abstractPseudoClass + ofType bool +} + +// Match implements :only-child. +// If `ofType` is true, it implements :only-of-type instead. +func (s onlyChildPseudoClassSelector) Match(n *html.Node) bool { + if n.Type != html.ElementNode { + return false + } + + parent := n.Parent + if parent == nil { + return false + } + + count := 0 + for c := parent.FirstChild; c != nil; c = c.NextSibling { + if (c.Type != html.ElementNode) || (s.ofType && c.Data != n.Data) { + continue + } + count++ + if count > 1 { + return false + } + } + + return count == 1 +} + +type inputPseudoClassSelector struct { + abstractPseudoClass +} + +// Matches input, select, textarea and button elements. +func (s inputPseudoClassSelector) Match(n *html.Node) bool { + return n.Type == html.ElementNode && (n.Data == "input" || n.Data == "select" || n.Data == "textarea" || n.Data == "button") +} + +type emptyElementPseudoClassSelector struct { + abstractPseudoClass +} + +// Matches empty elements. +func (s emptyElementPseudoClassSelector) Match(n *html.Node) bool { + if n.Type != html.ElementNode { + return false + } + + for c := n.FirstChild; c != nil; c = c.NextSibling { + switch c.Type { + case html.ElementNode: + return false + case html.TextNode: + if strings.TrimSpace(nodeText(c)) == "" { + continue + } else { + return false + } + } + } + + return true +} + +type rootPseudoClassSelector struct { + abstractPseudoClass +} + +// Match implements :root +func (s rootPseudoClassSelector) Match(n *html.Node) bool { + if n.Type != html.ElementNode { + return false + } + if n.Parent == nil { + return false + } + return n.Parent.Type == html.DocumentNode +} + +func hasAttr(n *html.Node, attr string) bool { + return matchAttribute(n, attr, func(string) bool { return true }) +} + +type linkPseudoClassSelector struct { + abstractPseudoClass +} + +// Match implements :link +func (s linkPseudoClassSelector) Match(n *html.Node) bool { + return (n.DataAtom == atom.A || n.DataAtom == atom.Area || n.DataAtom == atom.Link) && hasAttr(n, "href") +} + +type langPseudoClassSelector struct { + abstractPseudoClass + lang string +} + +func (s langPseudoClassSelector) Match(n *html.Node) bool { + own := matchAttribute(n, "lang", func(val string) bool { + return val == s.lang || strings.HasPrefix(val, s.lang+"-") + }) + if n.Parent == nil { + return own + } + return own || s.Match(n.Parent) +} + +type enabledPseudoClassSelector struct { + abstractPseudoClass +} + +func (s enabledPseudoClassSelector) Match(n *html.Node) bool { + if n.Type != html.ElementNode { + return false + } + switch n.DataAtom { + case atom.A, atom.Area, atom.Link: + return hasAttr(n, "href") + case atom.Optgroup, atom.Menuitem, atom.Fieldset: + return !hasAttr(n, "disabled") + case atom.Button, atom.Input, atom.Select, atom.Textarea, atom.Option: + return !hasAttr(n, "disabled") && !inDisabledFieldset(n) + } + return false +} + +type disabledPseudoClassSelector struct { + abstractPseudoClass +} + +func (s disabledPseudoClassSelector) Match(n *html.Node) bool { + if n.Type != html.ElementNode { + return false + } + switch n.DataAtom { + case atom.Optgroup, atom.Menuitem, atom.Fieldset: + return hasAttr(n, "disabled") + case atom.Button, atom.Input, atom.Select, atom.Textarea, atom.Option: + return hasAttr(n, "disabled") || inDisabledFieldset(n) + } + return false +} + +func hasLegendInPreviousSiblings(n *html.Node) bool { + for s := n.PrevSibling; s != nil; s = s.PrevSibling { + if s.DataAtom == atom.Legend { + return true + } + } + return false +} + +func inDisabledFieldset(n *html.Node) bool { + if n.Parent == nil { + return false + } + if n.Parent.DataAtom == atom.Fieldset && hasAttr(n.Parent, "disabled") && + (n.DataAtom != atom.Legend || hasLegendInPreviousSiblings(n)) { + return true + } + return inDisabledFieldset(n.Parent) +} + +type checkedPseudoClassSelector struct { + abstractPseudoClass +} + +func (s checkedPseudoClassSelector) Match(n *html.Node) bool { + if n.Type != html.ElementNode { + return false + } + switch n.DataAtom { + case atom.Input, atom.Menuitem: + return hasAttr(n, "checked") && matchAttribute(n, "type", func(val string) bool { + t := toLowerASCII(val) + return t == "checkbox" || t == "radio" + }) + case atom.Option: + return hasAttr(n, "selected") + } + return false +} diff --git a/scraper-go/vendor/github.com/andybalholm/cascadia/selector.go b/scraper-go/vendor/github.com/andybalholm/cascadia/selector.go new file mode 100644 index 0000000..87549be --- /dev/null +++ b/scraper-go/vendor/github.com/andybalholm/cascadia/selector.go @@ -0,0 +1,586 @@ +package cascadia + +import ( + "fmt" + "regexp" + "strings" + + "golang.org/x/net/html" +) + +// Matcher is the interface for basic selector functionality. +// Match returns whether a selector matches n. +type Matcher interface { + Match(n *html.Node) bool +} + +// Sel is the interface for all the functionality provided by selectors. +type Sel interface { + Matcher + Specificity() Specificity + + // Returns a CSS input compiling to this selector. + String() string + + // Returns a pseudo-element, or an empty string. + PseudoElement() string +} + +// Parse parses a selector. Use `ParseWithPseudoElement` +// if you need support for pseudo-elements. +func Parse(sel string) (Sel, error) { + p := &parser{s: sel} + compiled, err := p.parseSelector() + if err != nil { + return nil, err + } + + if p.i < len(sel) { + return nil, fmt.Errorf("parsing %q: %d bytes left over", sel, len(sel)-p.i) + } + + return compiled, nil +} + +// ParseWithPseudoElement parses a single selector, +// with support for pseudo-element. +func ParseWithPseudoElement(sel string) (Sel, error) { + p := &parser{s: sel, acceptPseudoElements: true} + compiled, err := p.parseSelector() + if err != nil { + return nil, err + } + + if p.i < len(sel) { + return nil, fmt.Errorf("parsing %q: %d bytes left over", sel, len(sel)-p.i) + } + + return compiled, nil +} + +// ParseGroup parses a selector, or a group of selectors separated by commas. +// Use `ParseGroupWithPseudoElements` +// if you need support for pseudo-elements. +func ParseGroup(sel string) (SelectorGroup, error) { + p := &parser{s: sel} + compiled, err := p.parseSelectorGroup() + if err != nil { + return nil, err + } + + if p.i < len(sel) { + return nil, fmt.Errorf("parsing %q: %d bytes left over", sel, len(sel)-p.i) + } + + return compiled, nil +} + +// ParseGroupWithPseudoElements parses a selector, or a group of selectors separated by commas. +// It supports pseudo-elements. +func ParseGroupWithPseudoElements(sel string) (SelectorGroup, error) { + p := &parser{s: sel, acceptPseudoElements: true} + compiled, err := p.parseSelectorGroup() + if err != nil { + return nil, err + } + + if p.i < len(sel) { + return nil, fmt.Errorf("parsing %q: %d bytes left over", sel, len(sel)-p.i) + } + + return compiled, nil +} + +// A Selector is a function which tells whether a node matches or not. +// +// This type is maintained for compatibility; I recommend using the newer and +// more idiomatic interfaces Sel and Matcher. +type Selector func(*html.Node) bool + +// Compile parses a selector and returns, if successful, a Selector object +// that can be used to match against html.Node objects. +func Compile(sel string) (Selector, error) { + compiled, err := ParseGroup(sel) + if err != nil { + return nil, err + } + + return Selector(compiled.Match), nil +} + +// MustCompile is like Compile, but panics instead of returning an error. +func MustCompile(sel string) Selector { + compiled, err := Compile(sel) + if err != nil { + panic(err) + } + return compiled +} + +// MatchAll returns a slice of the nodes that match the selector, +// from n and its children. +func (s Selector) MatchAll(n *html.Node) []*html.Node { + return s.matchAllInto(n, nil) +} + +func (s Selector) matchAllInto(n *html.Node, storage []*html.Node) []*html.Node { + if s(n) { + storage = append(storage, n) + } + + for child := n.FirstChild; child != nil; child = child.NextSibling { + storage = s.matchAllInto(child, storage) + } + + return storage +} + +func queryInto(n *html.Node, m Matcher, storage []*html.Node) []*html.Node { + for child := n.FirstChild; child != nil; child = child.NextSibling { + if m.Match(child) { + storage = append(storage, child) + } + storage = queryInto(child, m, storage) + } + + return storage +} + +// QueryAll returns a slice of all the nodes that match m, from the descendants +// of n. +func QueryAll(n *html.Node, m Matcher) []*html.Node { + return queryInto(n, m, nil) +} + +// Match returns true if the node matches the selector. +func (s Selector) Match(n *html.Node) bool { + return s(n) +} + +// MatchFirst returns the first node that matches s, from n and its children. +func (s Selector) MatchFirst(n *html.Node) *html.Node { + if s.Match(n) { + return n + } + + for c := n.FirstChild; c != nil; c = c.NextSibling { + m := s.MatchFirst(c) + if m != nil { + return m + } + } + return nil +} + +// Query returns the first node that matches m, from the descendants of n. +// If none matches, it returns nil. +func Query(n *html.Node, m Matcher) *html.Node { + for c := n.FirstChild; c != nil; c = c.NextSibling { + if m.Match(c) { + return c + } + if matched := Query(c, m); matched != nil { + return matched + } + } + + return nil +} + +// Filter returns the nodes in nodes that match the selector. +func (s Selector) Filter(nodes []*html.Node) (result []*html.Node) { + for _, n := range nodes { + if s(n) { + result = append(result, n) + } + } + return result +} + +// Filter returns the nodes that match m. +func Filter(nodes []*html.Node, m Matcher) (result []*html.Node) { + for _, n := range nodes { + if m.Match(n) { + result = append(result, n) + } + } + return result +} + +type tagSelector struct { + tag string +} + +// Matches elements with a given tag name. +func (t tagSelector) Match(n *html.Node) bool { + return n.Type == html.ElementNode && n.Data == t.tag +} + +func (c tagSelector) Specificity() Specificity { + return Specificity{0, 0, 1} +} + +func (c tagSelector) PseudoElement() string { + return "" +} + +type classSelector struct { + class string +} + +// Matches elements by class attribute. +func (t classSelector) Match(n *html.Node) bool { + return matchAttribute(n, "class", func(s string) bool { + return matchInclude(t.class, s, false) + }) +} + +func (c classSelector) Specificity() Specificity { + return Specificity{0, 1, 0} +} + +func (c classSelector) PseudoElement() string { + return "" +} + +type idSelector struct { + id string +} + +// Matches elements by id attribute. +func (t idSelector) Match(n *html.Node) bool { + return matchAttribute(n, "id", func(s string) bool { + return s == t.id + }) +} + +func (c idSelector) Specificity() Specificity { + return Specificity{1, 0, 0} +} + +func (c idSelector) PseudoElement() string { + return "" +} + +type attrSelector struct { + key, val, operation string + regexp *regexp.Regexp + insensitive bool +} + +// Matches elements by attribute value. +func (t attrSelector) Match(n *html.Node) bool { + switch t.operation { + case "": + return matchAttribute(n, t.key, func(string) bool { return true }) + case "=": + return matchAttribute(n, t.key, func(s string) bool { return matchInsensitiveValue(s, t.val, t.insensitive) }) + case "!=": + return attributeNotEqualMatch(t.key, t.val, n, t.insensitive) + case "~=": + // matches elements where the attribute named key is a whitespace-separated list that includes val. + return matchAttribute(n, t.key, func(s string) bool { return matchInclude(t.val, s, t.insensitive) }) + case "|=": + return attributeDashMatch(t.key, t.val, n, t.insensitive) + case "^=": + return attributePrefixMatch(t.key, t.val, n, t.insensitive) + case "$=": + return attributeSuffixMatch(t.key, t.val, n, t.insensitive) + case "*=": + return attributeSubstringMatch(t.key, t.val, n, t.insensitive) + case "#=": + return attributeRegexMatch(t.key, t.regexp, n) + default: + panic(fmt.Sprintf("unsuported operation : %s", t.operation)) + } +} + +// matches elements where we ignore (or not) the case of the attribute value +// the user attribute is the value set by the user to match elements +// the real attribute is the attribute value found in the code parsed +func matchInsensitiveValue(userAttr string, realAttr string, ignoreCase bool) bool { + if ignoreCase { + return strings.EqualFold(userAttr, realAttr) + } + return userAttr == realAttr + +} + +// matches elements where the attribute named key satisifes the function f. +func matchAttribute(n *html.Node, key string, f func(string) bool) bool { + if n.Type != html.ElementNode { + return false + } + for _, a := range n.Attr { + if a.Key == key && f(a.Val) { + return true + } + } + return false +} + +// attributeNotEqualMatch matches elements where +// the attribute named key does not have the value val. +func attributeNotEqualMatch(key, val string, n *html.Node, ignoreCase bool) bool { + if n.Type != html.ElementNode { + return false + } + for _, a := range n.Attr { + if a.Key == key && matchInsensitiveValue(a.Val, val, ignoreCase) { + return false + } + } + return true +} + +// returns true if s is a whitespace-separated list that includes val. +func matchInclude(val string, s string, ignoreCase bool) bool { + for s != "" { + i := strings.IndexAny(s, " \t\r\n\f") + if i == -1 { + return matchInsensitiveValue(s, val, ignoreCase) + } + if matchInsensitiveValue(s[:i], val, ignoreCase) { + return true + } + s = s[i+1:] + } + return false +} + +// matches elements where the attribute named key equals val or starts with val plus a hyphen. +func attributeDashMatch(key, val string, n *html.Node, ignoreCase bool) bool { + return matchAttribute(n, key, + func(s string) bool { + if matchInsensitiveValue(s, val, ignoreCase) { + return true + } + if len(s) <= len(val) { + return false + } + if matchInsensitiveValue(s[:len(val)], val, ignoreCase) && s[len(val)] == '-' { + return true + } + return false + }) +} + +// attributePrefixMatch returns a Selector that matches elements where +// the attribute named key starts with val. +func attributePrefixMatch(key, val string, n *html.Node, ignoreCase bool) bool { + return matchAttribute(n, key, + func(s string) bool { + if strings.TrimSpace(s) == "" { + return false + } + if ignoreCase { + return strings.HasPrefix(strings.ToLower(s), strings.ToLower(val)) + } + return strings.HasPrefix(s, val) + }) +} + +// attributeSuffixMatch matches elements where +// the attribute named key ends with val. +func attributeSuffixMatch(key, val string, n *html.Node, ignoreCase bool) bool { + return matchAttribute(n, key, + func(s string) bool { + if strings.TrimSpace(s) == "" { + return false + } + if ignoreCase { + return strings.HasSuffix(strings.ToLower(s), strings.ToLower(val)) + } + return strings.HasSuffix(s, val) + }) +} + +// attributeSubstringMatch matches nodes where +// the attribute named key contains val. +func attributeSubstringMatch(key, val string, n *html.Node, ignoreCase bool) bool { + return matchAttribute(n, key, + func(s string) bool { + if strings.TrimSpace(s) == "" { + return false + } + if ignoreCase { + return strings.Contains(strings.ToLower(s), strings.ToLower(val)) + } + return strings.Contains(s, val) + }) +} + +// attributeRegexMatch matches nodes where +// the attribute named key matches the regular expression rx +func attributeRegexMatch(key string, rx *regexp.Regexp, n *html.Node) bool { + return matchAttribute(n, key, + func(s string) bool { + return rx.MatchString(s) + }) +} + +func (c attrSelector) Specificity() Specificity { + return Specificity{0, 1, 0} +} + +func (c attrSelector) PseudoElement() string { + return "" +} + +// see pseudo_classes.go for pseudo classes selectors + +// on a static context, some selectors can't match anything +type neverMatchSelector struct { + value string +} + +func (s neverMatchSelector) Match(n *html.Node) bool { + return false +} + +func (s neverMatchSelector) Specificity() Specificity { + return Specificity{0, 0, 0} +} + +func (c neverMatchSelector) PseudoElement() string { + return "" +} + +type compoundSelector struct { + selectors []Sel + pseudoElement string +} + +// Matches elements if each sub-selectors matches. +func (t compoundSelector) Match(n *html.Node) bool { + if len(t.selectors) == 0 { + return n.Type == html.ElementNode + } + + for _, sel := range t.selectors { + if !sel.Match(n) { + return false + } + } + return true +} + +func (s compoundSelector) Specificity() Specificity { + var out Specificity + for _, sel := range s.selectors { + out = out.Add(sel.Specificity()) + } + if s.pseudoElement != "" { + // https://drafts.csswg.org/selectors-3/#specificity + out = out.Add(Specificity{0, 0, 1}) + } + return out +} + +func (c compoundSelector) PseudoElement() string { + return c.pseudoElement +} + +type combinedSelector struct { + first Sel + combinator byte + second Sel +} + +func (t combinedSelector) Match(n *html.Node) bool { + if t.first == nil { + return false // maybe we should panic + } + switch t.combinator { + case 0: + return t.first.Match(n) + case ' ': + return descendantMatch(t.first, t.second, n) + case '>': + return childMatch(t.first, t.second, n) + case '+': + return siblingMatch(t.first, t.second, true, n) + case '~': + return siblingMatch(t.first, t.second, false, n) + default: + panic("unknown combinator") + } +} + +// matches an element if it matches d and has an ancestor that matches a. +func descendantMatch(a, d Matcher, n *html.Node) bool { + if !d.Match(n) { + return false + } + + for p := n.Parent; p != nil; p = p.Parent { + if a.Match(p) { + return true + } + } + + return false +} + +// matches an element if it matches d and its parent matches a. +func childMatch(a, d Matcher, n *html.Node) bool { + return d.Match(n) && n.Parent != nil && a.Match(n.Parent) +} + +// matches an element if it matches s2 and is preceded by an element that matches s1. +// If adjacent is true, the sibling must be immediately before the element. +func siblingMatch(s1, s2 Matcher, adjacent bool, n *html.Node) bool { + if !s2.Match(n) { + return false + } + + if adjacent { + for n = n.PrevSibling; n != nil; n = n.PrevSibling { + if n.Type == html.TextNode || n.Type == html.CommentNode { + continue + } + return s1.Match(n) + } + return false + } + + // Walk backwards looking for element that matches s1 + for c := n.PrevSibling; c != nil; c = c.PrevSibling { + if s1.Match(c) { + return true + } + } + + return false +} + +func (s combinedSelector) Specificity() Specificity { + spec := s.first.Specificity() + if s.second != nil { + spec = spec.Add(s.second.Specificity()) + } + return spec +} + +// on combinedSelector, a pseudo-element only makes sens on the last +// selector, although others increase specificity. +func (c combinedSelector) PseudoElement() string { + if c.second == nil { + return "" + } + return c.second.PseudoElement() +} + +// A SelectorGroup is a list of selectors, which matches if any of the +// individual selectors matches. +type SelectorGroup []Sel + +// Match returns true if the node matches one of the single selectors. +func (s SelectorGroup) Match(n *html.Node) bool { + for _, sel := range s { + if sel.Match(n) { + return true + } + } + return false +} diff --git a/scraper-go/vendor/github.com/andybalholm/cascadia/serialize.go b/scraper-go/vendor/github.com/andybalholm/cascadia/serialize.go new file mode 100644 index 0000000..61acf04 --- /dev/null +++ b/scraper-go/vendor/github.com/andybalholm/cascadia/serialize.go @@ -0,0 +1,176 @@ +package cascadia + +import ( + "fmt" + "strconv" + "strings" +) + +// implements the reverse operation Sel -> string + +var specialCharReplacer *strings.Replacer + +func init() { + var pairs []string + for _, s := range ",!\"#$%&'()*+ -./:;<=>?@[\\]^`{|}~" { + pairs = append(pairs, string(s), "\\"+string(s)) + } + specialCharReplacer = strings.NewReplacer(pairs...) +} + +// espace special CSS char +func escape(s string) string { return specialCharReplacer.Replace(s) } + +func (c tagSelector) String() string { + return c.tag +} + +func (c idSelector) String() string { + return "#" + escape(c.id) +} + +func (c classSelector) String() string { + return "." + escape(c.class) +} + +func (c attrSelector) String() string { + val := c.val + if c.operation == "#=" { + val = c.regexp.String() + } else if c.operation != "" { + val = fmt.Sprintf(`"%s"`, val) + } + + ignoreCase := "" + + if c.insensitive { + ignoreCase = " i" + } + + return fmt.Sprintf(`[%s%s%s%s]`, c.key, c.operation, val, ignoreCase) +} + +func (c relativePseudoClassSelector) String() string { + return fmt.Sprintf(":%s(%s)", c.name, c.match.String()) +} + +func (c containsPseudoClassSelector) String() string { + s := "contains" + if c.own { + s += "Own" + } + return fmt.Sprintf(`:%s("%s")`, s, c.value) +} + +func (c regexpPseudoClassSelector) String() string { + s := "matches" + if c.own { + s += "Own" + } + return fmt.Sprintf(":%s(%s)", s, c.regexp.String()) +} + +func (c nthPseudoClassSelector) String() string { + if c.a == 0 && c.b == 1 { // special cases + s := ":first-" + if c.last { + s = ":last-" + } + if c.ofType { + s += "of-type" + } else { + s += "child" + } + return s + } + var name string + switch [2]bool{c.last, c.ofType} { + case [2]bool{true, true}: + name = "nth-last-of-type" + case [2]bool{true, false}: + name = "nth-last-child" + case [2]bool{false, true}: + name = "nth-of-type" + case [2]bool{false, false}: + name = "nth-child" + } + s := fmt.Sprintf("+%d", c.b) + if c.b < 0 { // avoid +-8 invalid syntax + s = strconv.Itoa(c.b) + } + return fmt.Sprintf(":%s(%dn%s)", name, c.a, s) +} + +func (c onlyChildPseudoClassSelector) String() string { + if c.ofType { + return ":only-of-type" + } + return ":only-child" +} + +func (c inputPseudoClassSelector) String() string { + return ":input" +} + +func (c emptyElementPseudoClassSelector) String() string { + return ":empty" +} + +func (c rootPseudoClassSelector) String() string { + return ":root" +} + +func (c linkPseudoClassSelector) String() string { + return ":link" +} + +func (c langPseudoClassSelector) String() string { + return fmt.Sprintf(":lang(%s)", c.lang) +} + +func (c neverMatchSelector) String() string { + return c.value +} + +func (c enabledPseudoClassSelector) String() string { + return ":enabled" +} + +func (c disabledPseudoClassSelector) String() string { + return ":disabled" +} + +func (c checkedPseudoClassSelector) String() string { + return ":checked" +} + +func (c compoundSelector) String() string { + if len(c.selectors) == 0 && c.pseudoElement == "" { + return "*" + } + chunks := make([]string, len(c.selectors)) + for i, sel := range c.selectors { + chunks[i] = sel.String() + } + s := strings.Join(chunks, "") + if c.pseudoElement != "" { + s += "::" + c.pseudoElement + } + return s +} + +func (c combinedSelector) String() string { + start := c.first.String() + if c.second != nil { + start += fmt.Sprintf(" %s %s", string(c.combinator), c.second.String()) + } + return start +} + +func (c SelectorGroup) String() string { + ck := make([]string, len(c)) + for i, s := range c { + ck[i] = s.String() + } + return strings.Join(ck, ", ") +} diff --git a/scraper-go/vendor/github.com/andybalholm/cascadia/specificity.go b/scraper-go/vendor/github.com/andybalholm/cascadia/specificity.go new file mode 100644 index 0000000..8db864f --- /dev/null +++ b/scraper-go/vendor/github.com/andybalholm/cascadia/specificity.go @@ -0,0 +1,26 @@ +package cascadia + +// Specificity is the CSS specificity as defined in +// https://www.w3.org/TR/selectors/#specificity-rules +// with the convention Specificity = [A,B,C]. +type Specificity [3]int + +// returns `true` if s < other (strictly), false otherwise +func (s Specificity) Less(other Specificity) bool { + for i := range s { + if s[i] < other[i] { + return true + } + if s[i] > other[i] { + return false + } + } + return false +} + +func (s Specificity) Add(other Specificity) Specificity { + for i, sp := range other { + s[i] += sp + } + return s +} diff --git a/scraper-go/vendor/github.com/cespare/xxhash/v2/LICENSE.txt b/scraper-go/vendor/github.com/cespare/xxhash/v2/LICENSE.txt new file mode 100644 index 0000000..24b5306 --- /dev/null +++ b/scraper-go/vendor/github.com/cespare/xxhash/v2/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (c) 2016 Caleb Spare + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/scraper-go/vendor/github.com/cespare/xxhash/v2/README.md b/scraper-go/vendor/github.com/cespare/xxhash/v2/README.md new file mode 100644 index 0000000..33c8830 --- /dev/null +++ b/scraper-go/vendor/github.com/cespare/xxhash/v2/README.md @@ -0,0 +1,74 @@ +# xxhash + +[![Go Reference](https://pkg.go.dev/badge/github.com/cespare/xxhash/v2.svg)](https://pkg.go.dev/github.com/cespare/xxhash/v2) +[![Test](https://github.com/cespare/xxhash/actions/workflows/test.yml/badge.svg)](https://github.com/cespare/xxhash/actions/workflows/test.yml) + +xxhash is a Go implementation of the 64-bit [xxHash] algorithm, XXH64. This is a +high-quality hashing algorithm that is much faster than anything in the Go +standard library. + +This package provides a straightforward API: + +``` +func Sum64(b []byte) uint64 +func Sum64String(s string) uint64 +type Digest struct{ ... } + func New() *Digest +``` + +The `Digest` type implements hash.Hash64. Its key methods are: + +``` +func (*Digest) Write([]byte) (int, error) +func (*Digest) WriteString(string) (int, error) +func (*Digest) Sum64() uint64 +``` + +The package is written with optimized pure Go and also contains even faster +assembly implementations for amd64 and arm64. If desired, the `purego` build tag +opts into using the Go code even on those architectures. + +[xxHash]: http://cyan4973.github.io/xxHash/ + +## Compatibility + +This package is in a module and the latest code is in version 2 of the module. +You need a version of Go with at least "minimal module compatibility" to use +github.com/cespare/xxhash/v2: + +* 1.9.7+ for Go 1.9 +* 1.10.3+ for Go 1.10 +* Go 1.11 or later + +I recommend using the latest release of Go. + +## Benchmarks + +Here are some quick benchmarks comparing the pure-Go and assembly +implementations of Sum64. + +| input size | purego | asm | +| ---------- | --------- | --------- | +| 4 B | 1.3 GB/s | 1.2 GB/s | +| 16 B | 2.9 GB/s | 3.5 GB/s | +| 100 B | 6.9 GB/s | 8.1 GB/s | +| 4 KB | 11.7 GB/s | 16.7 GB/s | +| 10 MB | 12.0 GB/s | 17.3 GB/s | + +These numbers were generated on Ubuntu 20.04 with an Intel Xeon Platinum 8252C +CPU using the following commands under Go 1.19.2: + +``` +benchstat <(go test -tags purego -benchtime 500ms -count 15 -bench 'Sum64$') +benchstat <(go test -benchtime 500ms -count 15 -bench 'Sum64$') +``` + +## Projects using this package + +- [InfluxDB](https://github.com/influxdata/influxdb) +- [Prometheus](https://github.com/prometheus/prometheus) +- [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics) +- [FreeCache](https://github.com/coocood/freecache) +- [FastCache](https://github.com/VictoriaMetrics/fastcache) +- [Ristretto](https://github.com/dgraph-io/ristretto) +- [Badger](https://github.com/dgraph-io/badger) diff --git a/scraper-go/vendor/github.com/cespare/xxhash/v2/testall.sh b/scraper-go/vendor/github.com/cespare/xxhash/v2/testall.sh new file mode 100644 index 0000000..94b9c44 --- /dev/null +++ b/scraper-go/vendor/github.com/cespare/xxhash/v2/testall.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -eu -o pipefail + +# Small convenience script for running the tests with various combinations of +# arch/tags. This assumes we're running on amd64 and have qemu available. + +go test ./... +go test -tags purego ./... +GOARCH=arm64 go test +GOARCH=arm64 go test -tags purego diff --git a/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash.go b/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash.go new file mode 100644 index 0000000..78bddf1 --- /dev/null +++ b/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash.go @@ -0,0 +1,243 @@ +// Package xxhash implements the 64-bit variant of xxHash (XXH64) as described +// at http://cyan4973.github.io/xxHash/. +package xxhash + +import ( + "encoding/binary" + "errors" + "math/bits" +) + +const ( + prime1 uint64 = 11400714785074694791 + prime2 uint64 = 14029467366897019727 + prime3 uint64 = 1609587929392839161 + prime4 uint64 = 9650029242287828579 + prime5 uint64 = 2870177450012600261 +) + +// Store the primes in an array as well. +// +// The consts are used when possible in Go code to avoid MOVs but we need a +// contiguous array for the assembly code. +var primes = [...]uint64{prime1, prime2, prime3, prime4, prime5} + +// Digest implements hash.Hash64. +// +// Note that a zero-valued Digest is not ready to receive writes. +// Call Reset or create a Digest using New before calling other methods. +type Digest struct { + v1 uint64 + v2 uint64 + v3 uint64 + v4 uint64 + total uint64 + mem [32]byte + n int // how much of mem is used +} + +// New creates a new Digest with a zero seed. +func New() *Digest { + return NewWithSeed(0) +} + +// NewWithSeed creates a new Digest with the given seed. +func NewWithSeed(seed uint64) *Digest { + var d Digest + d.ResetWithSeed(seed) + return &d +} + +// Reset clears the Digest's state so that it can be reused. +// It uses a seed value of zero. +func (d *Digest) Reset() { + d.ResetWithSeed(0) +} + +// ResetWithSeed clears the Digest's state so that it can be reused. +// It uses the given seed to initialize the state. +func (d *Digest) ResetWithSeed(seed uint64) { + d.v1 = seed + prime1 + prime2 + d.v2 = seed + prime2 + d.v3 = seed + d.v4 = seed - prime1 + d.total = 0 + d.n = 0 +} + +// Size always returns 8 bytes. +func (d *Digest) Size() int { return 8 } + +// BlockSize always returns 32 bytes. +func (d *Digest) BlockSize() int { return 32 } + +// Write adds more data to d. It always returns len(b), nil. +func (d *Digest) Write(b []byte) (n int, err error) { + n = len(b) + d.total += uint64(n) + + memleft := d.mem[d.n&(len(d.mem)-1):] + + if d.n+n < 32 { + // This new data doesn't even fill the current block. + copy(memleft, b) + d.n += n + return + } + + if d.n > 0 { + // Finish off the partial block. + c := copy(memleft, b) + d.v1 = round(d.v1, u64(d.mem[0:8])) + d.v2 = round(d.v2, u64(d.mem[8:16])) + d.v3 = round(d.v3, u64(d.mem[16:24])) + d.v4 = round(d.v4, u64(d.mem[24:32])) + b = b[c:] + d.n = 0 + } + + if len(b) >= 32 { + // One or more full blocks left. + nw := writeBlocks(d, b) + b = b[nw:] + } + + // Store any remaining partial block. + copy(d.mem[:], b) + d.n = len(b) + + return +} + +// Sum appends the current hash to b and returns the resulting slice. +func (d *Digest) Sum(b []byte) []byte { + s := d.Sum64() + return append( + b, + byte(s>>56), + byte(s>>48), + byte(s>>40), + byte(s>>32), + byte(s>>24), + byte(s>>16), + byte(s>>8), + byte(s), + ) +} + +// Sum64 returns the current hash. +func (d *Digest) Sum64() uint64 { + var h uint64 + + if d.total >= 32 { + v1, v2, v3, v4 := d.v1, d.v2, d.v3, d.v4 + h = rol1(v1) + rol7(v2) + rol12(v3) + rol18(v4) + h = mergeRound(h, v1) + h = mergeRound(h, v2) + h = mergeRound(h, v3) + h = mergeRound(h, v4) + } else { + h = d.v3 + prime5 + } + + h += d.total + + b := d.mem[:d.n&(len(d.mem)-1)] + for ; len(b) >= 8; b = b[8:] { + k1 := round(0, u64(b[:8])) + h ^= k1 + h = rol27(h)*prime1 + prime4 + } + if len(b) >= 4 { + h ^= uint64(u32(b[:4])) * prime1 + h = rol23(h)*prime2 + prime3 + b = b[4:] + } + for ; len(b) > 0; b = b[1:] { + h ^= uint64(b[0]) * prime5 + h = rol11(h) * prime1 + } + + h ^= h >> 33 + h *= prime2 + h ^= h >> 29 + h *= prime3 + h ^= h >> 32 + + return h +} + +const ( + magic = "xxh\x06" + marshaledSize = len(magic) + 8*5 + 32 +) + +// MarshalBinary implements the encoding.BinaryMarshaler interface. +func (d *Digest) MarshalBinary() ([]byte, error) { + b := make([]byte, 0, marshaledSize) + b = append(b, magic...) + b = appendUint64(b, d.v1) + b = appendUint64(b, d.v2) + b = appendUint64(b, d.v3) + b = appendUint64(b, d.v4) + b = appendUint64(b, d.total) + b = append(b, d.mem[:d.n]...) + b = b[:len(b)+len(d.mem)-d.n] + return b, nil +} + +// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. +func (d *Digest) UnmarshalBinary(b []byte) error { + if len(b) < len(magic) || string(b[:len(magic)]) != magic { + return errors.New("xxhash: invalid hash state identifier") + } + if len(b) != marshaledSize { + return errors.New("xxhash: invalid hash state size") + } + b = b[len(magic):] + b, d.v1 = consumeUint64(b) + b, d.v2 = consumeUint64(b) + b, d.v3 = consumeUint64(b) + b, d.v4 = consumeUint64(b) + b, d.total = consumeUint64(b) + copy(d.mem[:], b) + d.n = int(d.total % uint64(len(d.mem))) + return nil +} + +func appendUint64(b []byte, x uint64) []byte { + var a [8]byte + binary.LittleEndian.PutUint64(a[:], x) + return append(b, a[:]...) +} + +func consumeUint64(b []byte) ([]byte, uint64) { + x := u64(b) + return b[8:], x +} + +func u64(b []byte) uint64 { return binary.LittleEndian.Uint64(b) } +func u32(b []byte) uint32 { return binary.LittleEndian.Uint32(b) } + +func round(acc, input uint64) uint64 { + acc += input * prime2 + acc = rol31(acc) + acc *= prime1 + return acc +} + +func mergeRound(acc, val uint64) uint64 { + val = round(0, val) + acc ^= val + acc = acc*prime1 + prime4 + return acc +} + +func rol1(x uint64) uint64 { return bits.RotateLeft64(x, 1) } +func rol7(x uint64) uint64 { return bits.RotateLeft64(x, 7) } +func rol11(x uint64) uint64 { return bits.RotateLeft64(x, 11) } +func rol12(x uint64) uint64 { return bits.RotateLeft64(x, 12) } +func rol18(x uint64) uint64 { return bits.RotateLeft64(x, 18) } +func rol23(x uint64) uint64 { return bits.RotateLeft64(x, 23) } +func rol27(x uint64) uint64 { return bits.RotateLeft64(x, 27) } +func rol31(x uint64) uint64 { return bits.RotateLeft64(x, 31) } diff --git a/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s b/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s new file mode 100644 index 0000000..3e8b132 --- /dev/null +++ b/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s @@ -0,0 +1,209 @@ +//go:build !appengine && gc && !purego +// +build !appengine +// +build gc +// +build !purego + +#include "textflag.h" + +// Registers: +#define h AX +#define d AX +#define p SI // pointer to advance through b +#define n DX +#define end BX // loop end +#define v1 R8 +#define v2 R9 +#define v3 R10 +#define v4 R11 +#define x R12 +#define prime1 R13 +#define prime2 R14 +#define prime4 DI + +#define round(acc, x) \ + IMULQ prime2, x \ + ADDQ x, acc \ + ROLQ $31, acc \ + IMULQ prime1, acc + +// round0 performs the operation x = round(0, x). +#define round0(x) \ + IMULQ prime2, x \ + ROLQ $31, x \ + IMULQ prime1, x + +// mergeRound applies a merge round on the two registers acc and x. +// It assumes that prime1, prime2, and prime4 have been loaded. +#define mergeRound(acc, x) \ + round0(x) \ + XORQ x, acc \ + IMULQ prime1, acc \ + ADDQ prime4, acc + +// blockLoop processes as many 32-byte blocks as possible, +// updating v1, v2, v3, and v4. It assumes that there is at least one block +// to process. +#define blockLoop() \ +loop: \ + MOVQ +0(p), x \ + round(v1, x) \ + MOVQ +8(p), x \ + round(v2, x) \ + MOVQ +16(p), x \ + round(v3, x) \ + MOVQ +24(p), x \ + round(v4, x) \ + ADDQ $32, p \ + CMPQ p, end \ + JLE loop + +// func Sum64(b []byte) uint64 +TEXT ·Sum64(SB), NOSPLIT|NOFRAME, $0-32 + // Load fixed primes. + MOVQ ·primes+0(SB), prime1 + MOVQ ·primes+8(SB), prime2 + MOVQ ·primes+24(SB), prime4 + + // Load slice. + MOVQ b_base+0(FP), p + MOVQ b_len+8(FP), n + LEAQ (p)(n*1), end + + // The first loop limit will be len(b)-32. + SUBQ $32, end + + // Check whether we have at least one block. + CMPQ n, $32 + JLT noBlocks + + // Set up initial state (v1, v2, v3, v4). + MOVQ prime1, v1 + ADDQ prime2, v1 + MOVQ prime2, v2 + XORQ v3, v3 + XORQ v4, v4 + SUBQ prime1, v4 + + blockLoop() + + MOVQ v1, h + ROLQ $1, h + MOVQ v2, x + ROLQ $7, x + ADDQ x, h + MOVQ v3, x + ROLQ $12, x + ADDQ x, h + MOVQ v4, x + ROLQ $18, x + ADDQ x, h + + mergeRound(h, v1) + mergeRound(h, v2) + mergeRound(h, v3) + mergeRound(h, v4) + + JMP afterBlocks + +noBlocks: + MOVQ ·primes+32(SB), h + +afterBlocks: + ADDQ n, h + + ADDQ $24, end + CMPQ p, end + JG try4 + +loop8: + MOVQ (p), x + ADDQ $8, p + round0(x) + XORQ x, h + ROLQ $27, h + IMULQ prime1, h + ADDQ prime4, h + + CMPQ p, end + JLE loop8 + +try4: + ADDQ $4, end + CMPQ p, end + JG try1 + + MOVL (p), x + ADDQ $4, p + IMULQ prime1, x + XORQ x, h + + ROLQ $23, h + IMULQ prime2, h + ADDQ ·primes+16(SB), h + +try1: + ADDQ $4, end + CMPQ p, end + JGE finalize + +loop1: + MOVBQZX (p), x + ADDQ $1, p + IMULQ ·primes+32(SB), x + XORQ x, h + ROLQ $11, h + IMULQ prime1, h + + CMPQ p, end + JL loop1 + +finalize: + MOVQ h, x + SHRQ $33, x + XORQ x, h + IMULQ prime2, h + MOVQ h, x + SHRQ $29, x + XORQ x, h + IMULQ ·primes+16(SB), h + MOVQ h, x + SHRQ $32, x + XORQ x, h + + MOVQ h, ret+24(FP) + RET + +// func writeBlocks(d *Digest, b []byte) int +TEXT ·writeBlocks(SB), NOSPLIT|NOFRAME, $0-40 + // Load fixed primes needed for round. + MOVQ ·primes+0(SB), prime1 + MOVQ ·primes+8(SB), prime2 + + // Load slice. + MOVQ b_base+8(FP), p + MOVQ b_len+16(FP), n + LEAQ (p)(n*1), end + SUBQ $32, end + + // Load vN from d. + MOVQ s+0(FP), d + MOVQ 0(d), v1 + MOVQ 8(d), v2 + MOVQ 16(d), v3 + MOVQ 24(d), v4 + + // We don't need to check the loop condition here; this function is + // always called with at least one block of data to process. + blockLoop() + + // Copy vN back to d. + MOVQ v1, 0(d) + MOVQ v2, 8(d) + MOVQ v3, 16(d) + MOVQ v4, 24(d) + + // The number of bytes written is p minus the old base pointer. + SUBQ b_base+8(FP), p + MOVQ p, ret+32(FP) + + RET diff --git a/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s b/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s new file mode 100644 index 0000000..7e3145a --- /dev/null +++ b/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s @@ -0,0 +1,183 @@ +//go:build !appengine && gc && !purego +// +build !appengine +// +build gc +// +build !purego + +#include "textflag.h" + +// Registers: +#define digest R1 +#define h R2 // return value +#define p R3 // input pointer +#define n R4 // input length +#define nblocks R5 // n / 32 +#define prime1 R7 +#define prime2 R8 +#define prime3 R9 +#define prime4 R10 +#define prime5 R11 +#define v1 R12 +#define v2 R13 +#define v3 R14 +#define v4 R15 +#define x1 R20 +#define x2 R21 +#define x3 R22 +#define x4 R23 + +#define round(acc, x) \ + MADD prime2, acc, x, acc \ + ROR $64-31, acc \ + MUL prime1, acc + +// round0 performs the operation x = round(0, x). +#define round0(x) \ + MUL prime2, x \ + ROR $64-31, x \ + MUL prime1, x + +#define mergeRound(acc, x) \ + round0(x) \ + EOR x, acc \ + MADD acc, prime4, prime1, acc + +// blockLoop processes as many 32-byte blocks as possible, +// updating v1, v2, v3, and v4. It assumes that n >= 32. +#define blockLoop() \ + LSR $5, n, nblocks \ + PCALIGN $16 \ + loop: \ + LDP.P 16(p), (x1, x2) \ + LDP.P 16(p), (x3, x4) \ + round(v1, x1) \ + round(v2, x2) \ + round(v3, x3) \ + round(v4, x4) \ + SUB $1, nblocks \ + CBNZ nblocks, loop + +// func Sum64(b []byte) uint64 +TEXT ·Sum64(SB), NOSPLIT|NOFRAME, $0-32 + LDP b_base+0(FP), (p, n) + + LDP ·primes+0(SB), (prime1, prime2) + LDP ·primes+16(SB), (prime3, prime4) + MOVD ·primes+32(SB), prime5 + + CMP $32, n + CSEL LT, prime5, ZR, h // if n < 32 { h = prime5 } else { h = 0 } + BLT afterLoop + + ADD prime1, prime2, v1 + MOVD prime2, v2 + MOVD $0, v3 + NEG prime1, v4 + + blockLoop() + + ROR $64-1, v1, x1 + ROR $64-7, v2, x2 + ADD x1, x2 + ROR $64-12, v3, x3 + ROR $64-18, v4, x4 + ADD x3, x4 + ADD x2, x4, h + + mergeRound(h, v1) + mergeRound(h, v2) + mergeRound(h, v3) + mergeRound(h, v4) + +afterLoop: + ADD n, h + + TBZ $4, n, try8 + LDP.P 16(p), (x1, x2) + + round0(x1) + + // NOTE: here and below, sequencing the EOR after the ROR (using a + // rotated register) is worth a small but measurable speedup for small + // inputs. + ROR $64-27, h + EOR x1 @> 64-27, h, h + MADD h, prime4, prime1, h + + round0(x2) + ROR $64-27, h + EOR x2 @> 64-27, h, h + MADD h, prime4, prime1, h + +try8: + TBZ $3, n, try4 + MOVD.P 8(p), x1 + + round0(x1) + ROR $64-27, h + EOR x1 @> 64-27, h, h + MADD h, prime4, prime1, h + +try4: + TBZ $2, n, try2 + MOVWU.P 4(p), x2 + + MUL prime1, x2 + ROR $64-23, h + EOR x2 @> 64-23, h, h + MADD h, prime3, prime2, h + +try2: + TBZ $1, n, try1 + MOVHU.P 2(p), x3 + AND $255, x3, x1 + LSR $8, x3, x2 + + MUL prime5, x1 + ROR $64-11, h + EOR x1 @> 64-11, h, h + MUL prime1, h + + MUL prime5, x2 + ROR $64-11, h + EOR x2 @> 64-11, h, h + MUL prime1, h + +try1: + TBZ $0, n, finalize + MOVBU (p), x4 + + MUL prime5, x4 + ROR $64-11, h + EOR x4 @> 64-11, h, h + MUL prime1, h + +finalize: + EOR h >> 33, h + MUL prime2, h + EOR h >> 29, h + MUL prime3, h + EOR h >> 32, h + + MOVD h, ret+24(FP) + RET + +// func writeBlocks(d *Digest, b []byte) int +TEXT ·writeBlocks(SB), NOSPLIT|NOFRAME, $0-40 + LDP ·primes+0(SB), (prime1, prime2) + + // Load state. Assume v[1-4] are stored contiguously. + MOVD d+0(FP), digest + LDP 0(digest), (v1, v2) + LDP 16(digest), (v3, v4) + + LDP b_base+8(FP), (p, n) + + blockLoop() + + // Store updated state. + STP (v1, v2), 0(digest) + STP (v3, v4), 16(digest) + + BIC $31, n + MOVD n, ret+32(FP) + RET diff --git a/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_asm.go b/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_asm.go new file mode 100644 index 0000000..78f95f2 --- /dev/null +++ b/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_asm.go @@ -0,0 +1,15 @@ +//go:build (amd64 || arm64) && !appengine && gc && !purego +// +build amd64 arm64 +// +build !appengine +// +build gc +// +build !purego + +package xxhash + +// Sum64 computes the 64-bit xxHash digest of b with a zero seed. +// +//go:noescape +func Sum64(b []byte) uint64 + +//go:noescape +func writeBlocks(d *Digest, b []byte) int diff --git a/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_other.go b/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_other.go new file mode 100644 index 0000000..118e49e --- /dev/null +++ b/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_other.go @@ -0,0 +1,76 @@ +//go:build (!amd64 && !arm64) || appengine || !gc || purego +// +build !amd64,!arm64 appengine !gc purego + +package xxhash + +// Sum64 computes the 64-bit xxHash digest of b with a zero seed. +func Sum64(b []byte) uint64 { + // A simpler version would be + // d := New() + // d.Write(b) + // return d.Sum64() + // but this is faster, particularly for small inputs. + + n := len(b) + var h uint64 + + if n >= 32 { + v1 := primes[0] + prime2 + v2 := prime2 + v3 := uint64(0) + v4 := -primes[0] + for len(b) >= 32 { + v1 = round(v1, u64(b[0:8:len(b)])) + v2 = round(v2, u64(b[8:16:len(b)])) + v3 = round(v3, u64(b[16:24:len(b)])) + v4 = round(v4, u64(b[24:32:len(b)])) + b = b[32:len(b):len(b)] + } + h = rol1(v1) + rol7(v2) + rol12(v3) + rol18(v4) + h = mergeRound(h, v1) + h = mergeRound(h, v2) + h = mergeRound(h, v3) + h = mergeRound(h, v4) + } else { + h = prime5 + } + + h += uint64(n) + + for ; len(b) >= 8; b = b[8:] { + k1 := round(0, u64(b[:8])) + h ^= k1 + h = rol27(h)*prime1 + prime4 + } + if len(b) >= 4 { + h ^= uint64(u32(b[:4])) * prime1 + h = rol23(h)*prime2 + prime3 + b = b[4:] + } + for ; len(b) > 0; b = b[1:] { + h ^= uint64(b[0]) * prime5 + h = rol11(h) * prime1 + } + + h ^= h >> 33 + h *= prime2 + h ^= h >> 29 + h *= prime3 + h ^= h >> 32 + + return h +} + +func writeBlocks(d *Digest, b []byte) int { + v1, v2, v3, v4 := d.v1, d.v2, d.v3, d.v4 + n := len(b) + for len(b) >= 32 { + v1 = round(v1, u64(b[0:8:len(b)])) + v2 = round(v2, u64(b[8:16:len(b)])) + v3 = round(v3, u64(b[16:24:len(b)])) + v4 = round(v4, u64(b[24:32:len(b)])) + b = b[32:len(b):len(b)] + } + d.v1, d.v2, d.v3, d.v4 = v1, v2, v3, v4 + return n - len(b) +} diff --git a/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go b/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go new file mode 100644 index 0000000..05f5e7d --- /dev/null +++ b/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go @@ -0,0 +1,16 @@ +//go:build appengine +// +build appengine + +// This file contains the safe implementations of otherwise unsafe-using code. + +package xxhash + +// Sum64String computes the 64-bit xxHash digest of s with a zero seed. +func Sum64String(s string) uint64 { + return Sum64([]byte(s)) +} + +// WriteString adds more data to d. It always returns len(s), nil. +func (d *Digest) WriteString(s string) (n int, err error) { + return d.Write([]byte(s)) +} diff --git a/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go b/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go new file mode 100644 index 0000000..cf9d42a --- /dev/null +++ b/scraper-go/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go @@ -0,0 +1,58 @@ +//go:build !appengine +// +build !appengine + +// This file encapsulates usage of unsafe. +// xxhash_safe.go contains the safe implementations. + +package xxhash + +import ( + "unsafe" +) + +// In the future it's possible that compiler optimizations will make these +// XxxString functions unnecessary by realizing that calls such as +// Sum64([]byte(s)) don't need to copy s. See https://go.dev/issue/2205. +// If that happens, even if we keep these functions they can be replaced with +// the trivial safe code. + +// NOTE: The usual way of doing an unsafe string-to-[]byte conversion is: +// +// var b []byte +// bh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) +// bh.Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data +// bh.Len = len(s) +// bh.Cap = len(s) +// +// Unfortunately, as of Go 1.15.3 the inliner's cost model assigns a high enough +// weight to this sequence of expressions that any function that uses it will +// not be inlined. Instead, the functions below use a different unsafe +// conversion designed to minimize the inliner weight and allow both to be +// inlined. There is also a test (TestInlining) which verifies that these are +// inlined. +// +// See https://github.com/golang/go/issues/42739 for discussion. + +// Sum64String computes the 64-bit xxHash digest of s with a zero seed. +// It may be faster than Sum64([]byte(s)) by avoiding a copy. +func Sum64String(s string) uint64 { + b := *(*[]byte)(unsafe.Pointer(&sliceHeader{s, len(s)})) + return Sum64(b) +} + +// WriteString adds more data to d. It always returns len(s), nil. +// It may be faster than Write([]byte(s)) by avoiding a copy. +func (d *Digest) WriteString(s string) (n int, err error) { + d.Write(*(*[]byte)(unsafe.Pointer(&sliceHeader{s, len(s)}))) + // d.Write always returns len(s), nil. + // Ignoring the return output and returning these fixed values buys a + // savings of 6 in the inliner's cost model. + return len(s), nil +} + +// sliceHeader is similar to reflect.SliceHeader, but it assumes that the layout +// of the first two words is the same as the layout of a string. +type sliceHeader struct { + s string + cap int +} diff --git a/scraper-go/vendor/github.com/joho/godotenv/.gitignore b/scraper-go/vendor/github.com/joho/godotenv/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/scraper-go/vendor/github.com/joho/godotenv/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/scraper-go/vendor/github.com/joho/godotenv/LICENCE b/scraper-go/vendor/github.com/joho/godotenv/LICENCE new file mode 100644 index 0000000..e7ddd51 --- /dev/null +++ b/scraper-go/vendor/github.com/joho/godotenv/LICENCE @@ -0,0 +1,23 @@ +Copyright (c) 2013 John Barton + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/scraper-go/vendor/github.com/joho/godotenv/README.md b/scraper-go/vendor/github.com/joho/godotenv/README.md new file mode 100644 index 0000000..bfbe66a --- /dev/null +++ b/scraper-go/vendor/github.com/joho/godotenv/README.md @@ -0,0 +1,202 @@ +# GoDotEnv ![CI](https://github.com/joho/godotenv/workflows/CI/badge.svg) [![Go Report Card](https://goreportcard.com/badge/github.com/joho/godotenv)](https://goreportcard.com/report/github.com/joho/godotenv) + +A Go (golang) port of the Ruby [dotenv](https://github.com/bkeepers/dotenv) project (which loads env vars from a .env file). + +From the original Library: + +> Storing configuration in the environment is one of the tenets of a twelve-factor app. Anything that is likely to change between deployment environments–such as resource handles for databases or credentials for external services–should be extracted from the code into environment variables. +> +> But it is not always practical to set environment variables on development machines or continuous integration servers where multiple projects are run. Dotenv load variables from a .env file into ENV when the environment is bootstrapped. + +It can be used as a library (for loading in env for your own daemons etc.) or as a bin command. + +There is test coverage and CI for both linuxish and Windows environments, but I make no guarantees about the bin version working on Windows. + +## Installation + +As a library + +```shell +go get github.com/joho/godotenv +``` + +or if you want to use it as a bin command + +go >= 1.17 +```shell +go install github.com/joho/godotenv/cmd/godotenv@latest +``` + +go < 1.17 +```shell +go get github.com/joho/godotenv/cmd/godotenv +``` + +## Usage + +Add your application configuration to your `.env` file in the root of your project: + +```shell +S3_BUCKET=YOURS3BUCKET +SECRET_KEY=YOURSECRETKEYGOESHERE +``` + +Then in your Go app you can do something like + +```go +package main + +import ( + "log" + "os" + + "github.com/joho/godotenv" +) + +func main() { + err := godotenv.Load() + if err != nil { + log.Fatal("Error loading .env file") + } + + s3Bucket := os.Getenv("S3_BUCKET") + secretKey := os.Getenv("SECRET_KEY") + + // now do something with s3 or whatever +} +``` + +If you're even lazier than that, you can just take advantage of the autoload package which will read in `.env` on import + +```go +import _ "github.com/joho/godotenv/autoload" +``` + +While `.env` in the project root is the default, you don't have to be constrained, both examples below are 100% legit + +```go +godotenv.Load("somerandomfile") +godotenv.Load("filenumberone.env", "filenumbertwo.env") +``` + +If you want to be really fancy with your env file you can do comments and exports (below is a valid env file) + +```shell +# I am a comment and that is OK +SOME_VAR=someval +FOO=BAR # comments at line end are OK too +export BAR=BAZ +``` + +Or finally you can do YAML(ish) style + +```yaml +FOO: bar +BAR: baz +``` + +as a final aside, if you don't want godotenv munging your env you can just get a map back instead + +```go +var myEnv map[string]string +myEnv, err := godotenv.Read() + +s3Bucket := myEnv["S3_BUCKET"] +``` + +... or from an `io.Reader` instead of a local file + +```go +reader := getRemoteFile() +myEnv, err := godotenv.Parse(reader) +``` + +... or from a `string` if you so desire + +```go +content := getRemoteFileContent() +myEnv, err := godotenv.Unmarshal(content) +``` + +### Precedence & Conventions + +Existing envs take precedence of envs that are loaded later. + +The [convention](https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use) +for managing multiple environments (i.e. development, test, production) +is to create an env named `{YOURAPP}_ENV` and load envs in this order: + +```go +env := os.Getenv("FOO_ENV") +if "" == env { + env = "development" +} + +godotenv.Load(".env." + env + ".local") +if "test" != env { + godotenv.Load(".env.local") +} +godotenv.Load(".env." + env) +godotenv.Load() // The Original .env +``` + +If you need to, you can also use `godotenv.Overload()` to defy this convention +and overwrite existing envs instead of only supplanting them. Use with caution. + +### Command Mode + +Assuming you've installed the command as above and you've got `$GOPATH/bin` in your `$PATH` + +``` +godotenv -f /some/path/to/.env some_command with some args +``` + +If you don't specify `-f` it will fall back on the default of loading `.env` in `PWD` + +By default, it won't override existing environment variables; you can do that with the `-o` flag. + +### Writing Env Files + +Godotenv can also write a map representing the environment to a correctly-formatted and escaped file + +```go +env, err := godotenv.Unmarshal("KEY=value") +err := godotenv.Write(env, "./.env") +``` + +... or to a string + +```go +env, err := godotenv.Unmarshal("KEY=value") +content, err := godotenv.Marshal(env) +``` + +## Contributing + +Contributions are welcome, but with some caveats. + +This library has been declared feature complete (see [#182](https://github.com/joho/godotenv/issues/182) for background) and will not be accepting issues or pull requests adding new functionality or breaking the library API. + +Contributions would be gladly accepted that: + +* bring this library's parsing into closer compatibility with the mainline dotenv implementations, in particular [Ruby's dotenv](https://github.com/bkeepers/dotenv) and [Node.js' dotenv](https://github.com/motdotla/dotenv) +* keep the library up to date with the go ecosystem (ie CI bumps, documentation changes, changes in the core libraries) +* bug fixes for use cases that pertain to the library's purpose of easing development of codebases deployed into twelve factor environments + +*code changes without tests and references to peer dotenv implementations will not be accepted* + +1. Fork it +2. Create your feature branch (`git checkout -b my-new-feature`) +3. Commit your changes (`git commit -am 'Added some feature'`) +4. Push to the branch (`git push origin my-new-feature`) +5. Create new Pull Request + +## Releases + +Releases should follow [Semver](http://semver.org/) though the first couple of releases are `v1` and `v1.1`. + +Use [annotated tags for all releases](https://github.com/joho/godotenv/issues/30). Example `git tag -a v1.2.1` + +## Who? + +The original library [dotenv](https://github.com/bkeepers/dotenv) was written by [Brandon Keepers](http://opensoul.org/), and this port was done by [John Barton](https://johnbarton.co/) based off the tests/fixtures in the original library. diff --git a/scraper-go/vendor/github.com/joho/godotenv/godotenv.go b/scraper-go/vendor/github.com/joho/godotenv/godotenv.go new file mode 100644 index 0000000..61b0ebb --- /dev/null +++ b/scraper-go/vendor/github.com/joho/godotenv/godotenv.go @@ -0,0 +1,228 @@ +// Package godotenv is a go port of the ruby dotenv library (https://github.com/bkeepers/dotenv) +// +// Examples/readme can be found on the GitHub page at https://github.com/joho/godotenv +// +// The TL;DR is that you make a .env file that looks something like +// +// SOME_ENV_VAR=somevalue +// +// and then in your go code you can call +// +// godotenv.Load() +// +// and all the env vars declared in .env will be available through os.Getenv("SOME_ENV_VAR") +package godotenv + +import ( + "bytes" + "fmt" + "io" + "os" + "os/exec" + "sort" + "strconv" + "strings" +) + +const doubleQuoteSpecialChars = "\\\n\r\"!$`" + +// Parse reads an env file from io.Reader, returning a map of keys and values. +func Parse(r io.Reader) (map[string]string, error) { + var buf bytes.Buffer + _, err := io.Copy(&buf, r) + if err != nil { + return nil, err + } + + return UnmarshalBytes(buf.Bytes()) +} + +// Load will read your env file(s) and load them into ENV for this process. +// +// Call this function as close as possible to the start of your program (ideally in main). +// +// If you call Load without any args it will default to loading .env in the current path. +// +// You can otherwise tell it which files to load (there can be more than one) like: +// +// godotenv.Load("fileone", "filetwo") +// +// It's important to note that it WILL NOT OVERRIDE an env variable that already exists - consider the .env file to set dev vars or sensible defaults. +func Load(filenames ...string) (err error) { + filenames = filenamesOrDefault(filenames) + + for _, filename := range filenames { + err = loadFile(filename, false) + if err != nil { + return // return early on a spazout + } + } + return +} + +// Overload will read your env file(s) and load them into ENV for this process. +// +// Call this function as close as possible to the start of your program (ideally in main). +// +// If you call Overload without any args it will default to loading .env in the current path. +// +// You can otherwise tell it which files to load (there can be more than one) like: +// +// godotenv.Overload("fileone", "filetwo") +// +// It's important to note this WILL OVERRIDE an env variable that already exists - consider the .env file to forcefully set all vars. +func Overload(filenames ...string) (err error) { + filenames = filenamesOrDefault(filenames) + + for _, filename := range filenames { + err = loadFile(filename, true) + if err != nil { + return // return early on a spazout + } + } + return +} + +// Read all env (with same file loading semantics as Load) but return values as +// a map rather than automatically writing values into env +func Read(filenames ...string) (envMap map[string]string, err error) { + filenames = filenamesOrDefault(filenames) + envMap = make(map[string]string) + + for _, filename := range filenames { + individualEnvMap, individualErr := readFile(filename) + + if individualErr != nil { + err = individualErr + return // return early on a spazout + } + + for key, value := range individualEnvMap { + envMap[key] = value + } + } + + return +} + +// Unmarshal reads an env file from a string, returning a map of keys and values. +func Unmarshal(str string) (envMap map[string]string, err error) { + return UnmarshalBytes([]byte(str)) +} + +// UnmarshalBytes parses env file from byte slice of chars, returning a map of keys and values. +func UnmarshalBytes(src []byte) (map[string]string, error) { + out := make(map[string]string) + err := parseBytes(src, out) + + return out, err +} + +// Exec loads env vars from the specified filenames (empty map falls back to default) +// then executes the cmd specified. +// +// Simply hooks up os.Stdin/err/out to the command and calls Run(). +// +// If you want more fine grained control over your command it's recommended +// that you use `Load()`, `Overload()` or `Read()` and the `os/exec` package yourself. +func Exec(filenames []string, cmd string, cmdArgs []string, overload bool) error { + op := Load + if overload { + op = Overload + } + if err := op(filenames...); err != nil { + return err + } + + command := exec.Command(cmd, cmdArgs...) + command.Stdin = os.Stdin + command.Stdout = os.Stdout + command.Stderr = os.Stderr + return command.Run() +} + +// Write serializes the given environment and writes it to a file. +func Write(envMap map[string]string, filename string) error { + content, err := Marshal(envMap) + if err != nil { + return err + } + file, err := os.Create(filename) + if err != nil { + return err + } + defer file.Close() + _, err = file.WriteString(content + "\n") + if err != nil { + return err + } + return file.Sync() +} + +// Marshal outputs the given environment as a dotenv-formatted environment file. +// Each line is in the format: KEY="VALUE" where VALUE is backslash-escaped. +func Marshal(envMap map[string]string) (string, error) { + lines := make([]string, 0, len(envMap)) + for k, v := range envMap { + if d, err := strconv.Atoi(v); err == nil { + lines = append(lines, fmt.Sprintf(`%s=%d`, k, d)) + } else { + lines = append(lines, fmt.Sprintf(`%s="%s"`, k, doubleQuoteEscape(v))) + } + } + sort.Strings(lines) + return strings.Join(lines, "\n"), nil +} + +func filenamesOrDefault(filenames []string) []string { + if len(filenames) == 0 { + return []string{".env"} + } + return filenames +} + +func loadFile(filename string, overload bool) error { + envMap, err := readFile(filename) + if err != nil { + return err + } + + currentEnv := map[string]bool{} + rawEnv := os.Environ() + for _, rawEnvLine := range rawEnv { + key := strings.Split(rawEnvLine, "=")[0] + currentEnv[key] = true + } + + for key, value := range envMap { + if !currentEnv[key] || overload { + _ = os.Setenv(key, value) + } + } + + return nil +} + +func readFile(filename string) (envMap map[string]string, err error) { + file, err := os.Open(filename) + if err != nil { + return + } + defer file.Close() + + return Parse(file) +} + +func doubleQuoteEscape(line string) string { + for _, c := range doubleQuoteSpecialChars { + toReplace := "\\" + string(c) + if c == '\n' { + toReplace = `\n` + } + if c == '\r' { + toReplace = `\r` + } + line = strings.Replace(line, string(c), toReplace, -1) + } + return line +} diff --git a/scraper-go/vendor/github.com/joho/godotenv/parser.go b/scraper-go/vendor/github.com/joho/godotenv/parser.go new file mode 100644 index 0000000..cc709af --- /dev/null +++ b/scraper-go/vendor/github.com/joho/godotenv/parser.go @@ -0,0 +1,271 @@ +package godotenv + +import ( + "bytes" + "errors" + "fmt" + "regexp" + "strings" + "unicode" +) + +const ( + charComment = '#' + prefixSingleQuote = '\'' + prefixDoubleQuote = '"' + + exportPrefix = "export" +) + +func parseBytes(src []byte, out map[string]string) error { + src = bytes.Replace(src, []byte("\r\n"), []byte("\n"), -1) + cutset := src + for { + cutset = getStatementStart(cutset) + if cutset == nil { + // reached end of file + break + } + + key, left, err := locateKeyName(cutset) + if err != nil { + return err + } + + value, left, err := extractVarValue(left, out) + if err != nil { + return err + } + + out[key] = value + cutset = left + } + + return nil +} + +// getStatementPosition returns position of statement begin. +// +// It skips any comment line or non-whitespace character. +func getStatementStart(src []byte) []byte { + pos := indexOfNonSpaceChar(src) + if pos == -1 { + return nil + } + + src = src[pos:] + if src[0] != charComment { + return src + } + + // skip comment section + pos = bytes.IndexFunc(src, isCharFunc('\n')) + if pos == -1 { + return nil + } + + return getStatementStart(src[pos:]) +} + +// locateKeyName locates and parses key name and returns rest of slice +func locateKeyName(src []byte) (key string, cutset []byte, err error) { + // trim "export" and space at beginning + src = bytes.TrimLeftFunc(src, isSpace) + if bytes.HasPrefix(src, []byte(exportPrefix)) { + trimmed := bytes.TrimPrefix(src, []byte(exportPrefix)) + if bytes.IndexFunc(trimmed, isSpace) == 0 { + src = bytes.TrimLeftFunc(trimmed, isSpace) + } + } + + // locate key name end and validate it in single loop + offset := 0 +loop: + for i, char := range src { + rchar := rune(char) + if isSpace(rchar) { + continue + } + + switch char { + case '=', ':': + // library also supports yaml-style value declaration + key = string(src[0:i]) + offset = i + 1 + break loop + case '_': + default: + // variable name should match [A-Za-z0-9_.] + if unicode.IsLetter(rchar) || unicode.IsNumber(rchar) || rchar == '.' { + continue + } + + return "", nil, fmt.Errorf( + `unexpected character %q in variable name near %q`, + string(char), string(src)) + } + } + + if len(src) == 0 { + return "", nil, errors.New("zero length string") + } + + // trim whitespace + key = strings.TrimRightFunc(key, unicode.IsSpace) + cutset = bytes.TrimLeftFunc(src[offset:], isSpace) + return key, cutset, nil +} + +// extractVarValue extracts variable value and returns rest of slice +func extractVarValue(src []byte, vars map[string]string) (value string, rest []byte, err error) { + quote, hasPrefix := hasQuotePrefix(src) + if !hasPrefix { + // unquoted value - read until end of line + endOfLine := bytes.IndexFunc(src, isLineEnd) + + // Hit EOF without a trailing newline + if endOfLine == -1 { + endOfLine = len(src) + + if endOfLine == 0 { + return "", nil, nil + } + } + + // Convert line to rune away to do accurate countback of runes + line := []rune(string(src[0:endOfLine])) + + // Assume end of line is end of var + endOfVar := len(line) + if endOfVar == 0 { + return "", src[endOfLine:], nil + } + + // Work backwards to check if the line ends in whitespace then + // a comment (ie asdasd # some comment) + for i := endOfVar - 1; i >= 0; i-- { + if line[i] == charComment && i > 0 { + if isSpace(line[i-1]) { + endOfVar = i + break + } + } + } + + trimmed := strings.TrimFunc(string(line[0:endOfVar]), isSpace) + + return expandVariables(trimmed, vars), src[endOfLine:], nil + } + + // lookup quoted string terminator + for i := 1; i < len(src); i++ { + if char := src[i]; char != quote { + continue + } + + // skip escaped quote symbol (\" or \', depends on quote) + if prevChar := src[i-1]; prevChar == '\\' { + continue + } + + // trim quotes + trimFunc := isCharFunc(rune(quote)) + value = string(bytes.TrimLeftFunc(bytes.TrimRightFunc(src[0:i], trimFunc), trimFunc)) + if quote == prefixDoubleQuote { + // unescape newlines for double quote (this is compat feature) + // and expand environment variables + value = expandVariables(expandEscapes(value), vars) + } + + return value, src[i+1:], nil + } + + // return formatted error if quoted string is not terminated + valEndIndex := bytes.IndexFunc(src, isCharFunc('\n')) + if valEndIndex == -1 { + valEndIndex = len(src) + } + + return "", nil, fmt.Errorf("unterminated quoted value %s", src[:valEndIndex]) +} + +func expandEscapes(str string) string { + out := escapeRegex.ReplaceAllStringFunc(str, func(match string) string { + c := strings.TrimPrefix(match, `\`) + switch c { + case "n": + return "\n" + case "r": + return "\r" + default: + return match + } + }) + return unescapeCharsRegex.ReplaceAllString(out, "$1") +} + +func indexOfNonSpaceChar(src []byte) int { + return bytes.IndexFunc(src, func(r rune) bool { + return !unicode.IsSpace(r) + }) +} + +// hasQuotePrefix reports whether charset starts with single or double quote and returns quote character +func hasQuotePrefix(src []byte) (prefix byte, isQuored bool) { + if len(src) == 0 { + return 0, false + } + + switch prefix := src[0]; prefix { + case prefixDoubleQuote, prefixSingleQuote: + return prefix, true + default: + return 0, false + } +} + +func isCharFunc(char rune) func(rune) bool { + return func(v rune) bool { + return v == char + } +} + +// isSpace reports whether the rune is a space character but not line break character +// +// this differs from unicode.IsSpace, which also applies line break as space +func isSpace(r rune) bool { + switch r { + case '\t', '\v', '\f', '\r', ' ', 0x85, 0xA0: + return true + } + return false +} + +func isLineEnd(r rune) bool { + if r == '\n' || r == '\r' { + return true + } + return false +} + +var ( + escapeRegex = regexp.MustCompile(`\\.`) + expandVarRegex = regexp.MustCompile(`(\\)?(\$)(\()?\{?([A-Z0-9_]+)?\}?`) + unescapeCharsRegex = regexp.MustCompile(`\\([^$])`) +) + +func expandVariables(v string, m map[string]string) string { + return expandVarRegex.ReplaceAllStringFunc(v, func(s string) string { + submatch := expandVarRegex.FindStringSubmatch(s) + + if submatch == nil { + return s + } + if submatch[1] == "\\" || submatch[2] == "(" { + return submatch[0][1:] + } else if submatch[4] != "" { + return m[submatch[4]] + } + return s + }) +} diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/.gitignore b/scraper-go/vendor/github.com/redis/go-redis/v9/.gitignore new file mode 100644 index 0000000..93affec --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/.gitignore @@ -0,0 +1,19 @@ +*.rdb +testdata/* +.idea/ +.DS_Store +*.tar.gz +*.dic +redis8tests.sh +coverage.txt +**/coverage.txt +.vscode +tmp/* +*.test +extra/redisotel-native/metrics-collector-app/ +# maintenanceNotifications upgrade documentation (temporary) +maintenanceNotifications/docs/ + +# Docker-generated files (TLS certificates, cluster data, etc.) +dockers/*/tls/ +dockers/osscluster-tls/ diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/.golangci.yml b/scraper-go/vendor/github.com/redis/go-redis/v9/.golangci.yml new file mode 100644 index 0000000..dd13c2c --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/.golangci.yml @@ -0,0 +1,36 @@ +version: "2" +run: + timeout: 5m + tests: false +linters: + settings: + staticcheck: + checks: + - all + # Incorrect or missing package comment. + # https://staticcheck.dev/docs/checks/#ST1000 + - -ST1000 + # Omit embedded fields from selector expression. + # https://staticcheck.dev/docs/checks/#QF1008 + - -QF1008 + - -ST1003 + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - gofmt + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/.prettierrc.yml b/scraper-go/vendor/github.com/redis/go-redis/v9/.prettierrc.yml new file mode 100644 index 0000000..8b7f044 --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/.prettierrc.yml @@ -0,0 +1,4 @@ +semi: false +singleQuote: true +proseWrap: always +printWidth: 100 diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/CONTRIBUTING.md b/scraper-go/vendor/github.com/redis/go-redis/v9/CONTRIBUTING.md new file mode 100644 index 0000000..8c68c52 --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/CONTRIBUTING.md @@ -0,0 +1,118 @@ +# Contributing + +## Introduction + +We appreciate your interest in considering contributing to go-redis. +Community contributions mean a lot to us. + +## Contributions we need + +You may already know how you'd like to contribute, whether it's a fix for a bug you +encountered, or a new feature your team wants to use. + +If you don't know where to start, consider improving +documentation, bug triaging, and writing tutorials are all examples of +helpful contributions that mean less work for you. + +## Your First Contribution + +Unsure where to begin contributing? You can start by looking through +[help-wanted +issues](https://github.com/redis/go-redis/issues?q=is%3Aopen+is%3Aissue+label%3ahelp-wanted). + +Never contributed to open source before? Here are a couple of friendly +tutorials: + +- +- + +## Getting Started + +Here's how to get started with your code contribution: + +1. Create your own fork of go-redis +2. Do the changes in your fork +3. If you need a development environment, run `make docker.start`. + +> Note: this clones and builds the docker containers specified in `docker-compose.yml`, to understand more about +> the infrastructure that will be started you can check the `docker-compose.yml`. You also have the possiblity +> to specify the redis image that will be pulled with the env variable `CLIENT_LIBS_TEST_IMAGE`. +> By default the docker image that will be pulled and started is `redislabs/client-libs-test:8.2.1-pre`. +> If you want to test with newer Redis version, using a newer version of `redislabs/client-libs-test` should work out of the box. + +4. While developing, make sure the tests pass by running `make test` (if you have the docker containers running, `make test.ci` may be sufficient). +> Note: `make test` will try to start all containers, run the tests with `make test.ci` and then stop all containers. +5. If you like the change and think the project could use it, send a + pull request + +To see what else is part of the automation, run `invoke -l` + + +## Testing + +### Setting up Docker +To run the tests, you need to have Docker installed and running. If you are using a host OS that does not support +docker host networks out of the box (e.g. Windows, OSX), you need to set up a docker desktop and enable docker host networks. + +### Running tests +Call `make test` to run all tests. + +Continuous Integration uses these same wrappers to run all of these +tests against multiple versions of redis. Feel free to test your +changes against all the go versions supported, as declared by the +[build.yml](./.github/workflows/build.yml) file. + +### Troubleshooting + +If you get any errors when running `make test`, make sure +that you are using supported versions of Docker and go. + +## How to Report a Bug + +### Security Vulnerabilities + +**NOTE**: If you find a security vulnerability, do NOT open an issue. +Email [Redis Open Source ()](mailto:oss@redis.com) instead. + +In order to determine whether you are dealing with a security issue, ask +yourself these two questions: + +- Can I access something that's not mine, or something I shouldn't + have access to? +- Can I disable something for other people? + +If the answer to either of those two questions are *yes*, then you're +probably dealing with a security issue. Note that even if you answer +*no* to both questions, you may still be dealing with a security +issue, so if you're unsure, just email [us](mailto:oss@redis.com). + +### Everything Else + +When filing an issue, make sure to answer these five questions: + +1. What version of go-redis are you using? +2. What version of redis are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? + +## Suggest a feature or enhancement + +If you'd like to contribute a new feature, make sure you check our +issue list to see if someone has already proposed it. Work may already +be underway on the feature you want or we may have rejected a +feature like it already. + +If you don't see anything, open a new issue that describes the feature +you would like and how it should work. + +## Code review process + +The core team regularly looks at pull requests. We will provide +feedback as soon as possible. After receiving our feedback, please respond +within two weeks. After that time, we may close your PR if it isn't +showing any activity. + +## Support + +Maintainers can provide limited support to contributors on discord: https://discord.gg/W4txy5AeKM diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/LICENSE b/scraper-go/vendor/github.com/redis/go-redis/v9/LICENSE new file mode 100644 index 0000000..f4967db --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2013 The github.com/redis/go-redis Authors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/Makefile b/scraper-go/vendor/github.com/redis/go-redis/v9/Makefile new file mode 100644 index 0000000..098ff3c --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/Makefile @@ -0,0 +1,122 @@ +GO_MOD_DIRS := $(shell find . -type f -name 'go.mod' -exec dirname {} \; | sort) +REDIS_VERSION ?= 8.8 +RE_CLUSTER ?= false +RCE_DOCKER ?= true +CLIENT_LIBS_TEST_IMAGE ?= redislabs/client-libs-test:8.8-m02 + +docker.start: + export RE_CLUSTER=$(RE_CLUSTER) && \ + export RCE_DOCKER=$(RCE_DOCKER) && \ + export REDIS_VERSION=$(REDIS_VERSION) && \ + export CLIENT_LIBS_TEST_IMAGE=$(CLIENT_LIBS_TEST_IMAGE) && \ + docker compose --profile all up -d --quiet-pull + +docker.stop: + docker compose --profile all down + +docker.e2e.start: + @echo "Starting Redis and cae-resp-proxy for E2E tests..." + docker compose --profile e2e up -d --quiet-pull + @echo "Waiting for services to be ready..." + @sleep 3 + @echo "Services ready!" + +docker.e2e.stop: + @echo "Stopping E2E services..." + docker compose --profile e2e down + +test: + $(MAKE) docker.start + @if [ -z "$(REDIS_VERSION)" ]; then \ + echo "REDIS_VERSION not set, running all tests"; \ + $(MAKE) test.ci; \ + else \ + MAJOR_VERSION=$$(echo "$(REDIS_VERSION)" | cut -d. -f1); \ + if [ "$$MAJOR_VERSION" -ge 8 ]; then \ + echo "REDIS_VERSION $(REDIS_VERSION) >= 8, running all tests"; \ + $(MAKE) test.ci; \ + else \ + echo "REDIS_VERSION $(REDIS_VERSION) < 8, skipping vector_sets tests"; \ + $(MAKE) test.ci.skip-vectorsets; \ + fi; \ + fi + $(MAKE) docker.stop + +test.ci: + set -e; for dir in $(GO_MOD_DIRS); do \ + echo "go test in $${dir}"; \ + (cd "$${dir}" && \ + export RE_CLUSTER=$(RE_CLUSTER) && \ + export RCE_DOCKER=$(RCE_DOCKER) && \ + export REDIS_VERSION=$(REDIS_VERSION) && \ + go mod tidy && \ + go vet && \ + go test -v -coverprofile=coverage.txt -covermode=atomic ./... -race -skip Example); \ + done + cd internal/customvet && go build . + go vet -vettool ./internal/customvet/customvet + +test.ci.skip-vectorsets: + set -e; for dir in $(GO_MOD_DIRS); do \ + echo "go test in $${dir} (skipping vector sets)"; \ + (cd "$${dir}" && \ + export RE_CLUSTER=$(RE_CLUSTER) && \ + export RCE_DOCKER=$(RCE_DOCKER) && \ + export REDIS_VERSION=$(REDIS_VERSION) && \ + go mod tidy && \ + go vet && \ + go test -v -coverprofile=coverage.txt -covermode=atomic ./... -race \ + -run '^(?!.*(?:VectorSet|vectorset|ExampleClient_vectorset)).*$$' -skip Example); \ + done + cd internal/customvet && go build . + go vet -vettool ./internal/customvet/customvet + +bench: + export RE_CLUSTER=$(RE_CLUSTER) && \ + export RCE_DOCKER=$(RCE_DOCKER) && \ + export REDIS_VERSION=$(REDIS_VERSION) && \ + go test ./... -test.run=NONE -test.bench=. -test.benchmem -skip Example + +test.e2e: + @echo "Running E2E tests with auto-start proxy..." + $(MAKE) docker.e2e.start + @echo "Running tests..." + @E2E_SCENARIO_TESTS=true go test -v ./maintnotifications/e2e/ -timeout 30m || ($(MAKE) docker.e2e.stop && exit 1) + $(MAKE) docker.e2e.stop + @echo "E2E tests completed!" + +test.e2e.docker: + @echo "Running Docker-compatible E2E tests..." + $(MAKE) docker.e2e.start + @echo "Running unified injector tests..." + @E2E_SCENARIO_TESTS=true go test -v -run "TestUnifiedInjector|TestCreateTestFaultInjectorLogic|TestFaultInjectorClientCreation" ./maintnotifications/e2e/ -timeout 10m || ($(MAKE) docker.e2e.stop && exit 1) + $(MAKE) docker.e2e.stop + @echo "Docker E2E tests completed!" + +test.e2e.logic: + @echo "Running E2E logic tests (no proxy required)..." + @E2E_SCENARIO_TESTS=true \ + REDIS_ENDPOINTS_CONFIG_PATH=/tmp/test_endpoints_verify.json \ + FAULT_INJECTION_API_URL=http://localhost:8080 \ + go test -v -run "TestCreateTestFaultInjectorLogic|TestFaultInjectorClientCreation" ./maintnotifications/e2e/ + @echo "Logic tests completed!" + +.PHONY: all test test.ci test.ci.skip-vectorsets bench fmt test.e2e test.e2e.logic docker.e2e.start docker.e2e.stop + +build: + export RE_CLUSTER=$(RE_CLUSTER) && \ + export RCE_DOCKER=$(RCE_DOCKER) && \ + export REDIS_VERSION=$(REDIS_VERSION) && \ + go build . + +fmt: + gofumpt -w ./ + goimports -w -local github.com/redis/go-redis ./ + +go_mod_tidy: + set -e; for dir in $(GO_MOD_DIRS); do \ + echo "go mod tidy in $${dir}"; \ + (cd "$${dir}" && \ + go get -u ./... && \ + go mod tidy); \ + done diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/README.md b/scraper-go/vendor/github.com/redis/go-redis/v9/README.md new file mode 100644 index 0000000..3ac008f --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/README.md @@ -0,0 +1,618 @@ +# Redis client for Go + +[![build workflow](https://github.com/redis/go-redis/actions/workflows/build.yml/badge.svg)](https://github.com/redis/go-redis/actions) +[![PkgGoDev](https://pkg.go.dev/badge/github.com/redis/go-redis/v9)](https://pkg.go.dev/github.com/redis/go-redis/v9?tab=doc) +[![Documentation](https://img.shields.io/badge/redis-documentation-informational)](https://redis.io/docs/latest/develop/clients/go/) +[![Go Report Card](https://goreportcard.com/badge/github.com/redis/go-redis/v9)](https://goreportcard.com/report/github.com/redis/go-redis/v9) +[![codecov](https://codecov.io/github/redis/go-redis/graph/badge.svg?token=tsrCZKuSSw)](https://codecov.io/github/redis/go-redis) + +[![Discord](https://img.shields.io/discord/697882427875393627.svg?style=social&logo=discord)](https://discord.gg/W4txy5AeKM) +[![Twitch](https://img.shields.io/twitch/status/redisinc?style=social)](https://www.twitch.tv/redisinc) +[![YouTube](https://img.shields.io/youtube/channel/views/UCD78lHSwYqMlyetR0_P4Vig?style=social)](https://www.youtube.com/redisinc) +[![Twitter](https://img.shields.io/twitter/follow/redisinc?style=social)](https://twitter.com/redisinc) +[![Stack Exchange questions](https://img.shields.io/stackexchange/stackoverflow/t/go-redis?style=social&logo=stackoverflow&label=Stackoverflow)](https://stackoverflow.com/questions/tagged/go-redis) + +> go-redis is the official Redis client library for the Go programming language. It offers a straightforward interface for interacting with Redis servers. + +## Supported versions + +In `go-redis` we are aiming to support the last three releases of Redis. Currently, this means we do support: +- [Redis 8.0](https://raw.githubusercontent.com/redis/redis/8.0/00-RELEASENOTES) - using Redis CE 8.0 +- [Redis 8.2](https://raw.githubusercontent.com/redis/redis/8.2/00-RELEASENOTES) - using Redis CE 8.2 +- [Redis 8.4](https://raw.githubusercontent.com/redis/redis/8.4/00-RELEASENOTES) - using Redis CE 8.4 + +Although the `go.mod` states it requires at minimum `go 1.24`, our CI is configured to run the tests against all three +versions of Redis and multiple versions of Go ([1.24](https://go.dev/doc/devel/release#go1.24.0), oldstable, and stable). We observe that some modules related test may not pass with +Redis Stack 7.2 and some commands are changed with Redis CE 8.0. +Although it is not officially supported, `go-redis/v9` should be able to work with any Redis 7.0+. +Please do refer to the documentation and the tests if you experience any issues. + +## How do I Redis? + +[Learn for free at Redis University](https://university.redis.com/) + +[Build faster with the Redis Launchpad](https://launchpad.redis.com/) + +[Try the Redis Cloud](https://redis.com/try-free/) + +[Dive in developer tutorials](https://developer.redis.com/) + +[Join the Redis community](https://redis.com/community/) + +[Work at Redis](https://redis.com/company/careers/jobs/) + + +## Resources + +- [Discussions](https://github.com/redis/go-redis/discussions) +- [Chat](https://discord.gg/W4txy5AeKM) +- [Reference](https://pkg.go.dev/github.com/redis/go-redis/v9) +- [Examples](https://pkg.go.dev/github.com/redis/go-redis/v9#pkg-examples) + +## old documentation + +- [English](https://redis.uptrace.dev) +- [简体中文](https://redis.uptrace.dev/zh/) + +## Ecosystem + +- [Entra ID (Azure AD)](https://github.com/redis/go-redis-entraid) +- [Distributed Locks](https://github.com/bsm/redislock) +- [Redis Cache](https://github.com/go-redis/cache) +- [Rate limiting](https://github.com/go-redis/redis_rate) + +## Features + +- Redis commands except QUIT and SYNC. +- Automatic connection pooling. +- [StreamingCredentialsProvider (e.g. entra id, oauth)](#1-streaming-credentials-provider-highest-priority) (experimental) +- [Pub/Sub](https://redis.uptrace.dev/guide/go-redis-pubsub.html). +- [Pipelines and transactions](https://redis.uptrace.dev/guide/go-redis-pipelines.html). +- [Scripting](https://redis.uptrace.dev/guide/lua-scripting.html). +- [Redis Sentinel](https://redis.uptrace.dev/guide/go-redis-sentinel.html). +- [Redis Cluster](https://redis.uptrace.dev/guide/go-redis-cluster.html). +- [Redis Performance Monitoring](https://redis.uptrace.dev/guide/redis-performance-monitoring.html). +- [Redis Probabilistic [RedisStack]](https://redis.io/docs/data-types/probabilistic/) +- [Customizable read and write buffers size.](#custom-buffer-sizes) + +## Installation + +go-redis supports 2 last Go versions and requires a Go version with +[modules](https://github.com/golang/go/wiki/Modules) support. So make sure to initialize a Go +module: + +```shell +go mod init github.com/my/repo +``` + +Then install go-redis/**v9**: + +```shell +go get github.com/redis/go-redis/v9 +``` + +## Quickstart + +```go +import ( + "context" + "fmt" + + "github.com/redis/go-redis/v9" +) + +var ctx = context.Background() + +func ExampleClient() { + rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + Password: "", // no password set + DB: 0, // use default DB + }) + defer rdb.Close() + + err := rdb.Set(ctx, "key", "value", 0).Err() + if err != nil { + panic(err) + } + + val, err := rdb.Get(ctx, "key").Result() + if err != nil { + panic(err) + } + fmt.Println("key", val) + + val2, err := rdb.Get(ctx, "key2").Result() + if err == redis.Nil { + fmt.Println("key2 does not exist") + } else if err != nil { + panic(err) + } else { + fmt.Println("key2", val2) + } + // Output: key value + // key2 does not exist +} +``` + +### Dial retries and backoff + +Connection establishment can be retried by the connection pool when dialing fails. + +- **`DialerRetries`**: maximum number of dial attempts (default: 5). +- **`DialerRetryTimeout`**: default delay between attempts when no custom backoff is provided (default: 100ms). +- **`DialerRetryBackoff`**: optional function hook to control the delay between attempts. + +Example: + +```go +rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + + DialerRetries: 5, + DialerRetryTimeout: 100 * time.Millisecond, // used when DialerRetryBackoff is nil + + // Optional: exponential backoff with jitter and a cap. + DialerRetryBackoff: redis.DialRetryBackoffExponential(100*time.Millisecond, 2*time.Second), +}) +defer rdb.Close() +``` + +### Authentication + +The Redis client supports multiple ways to provide authentication credentials, with a clear priority order. Here are the available options: + +#### 1. Streaming Credentials Provider (Highest Priority) - Experimental feature + +The streaming credentials provider allows for dynamic credential updates during the connection lifetime. This is particularly useful for managed identity services and token-based authentication. + +```go +type StreamingCredentialsProvider interface { + Subscribe(listener CredentialsListener) (Credentials, UnsubscribeFunc, error) +} + +type CredentialsListener interface { + OnNext(credentials Credentials) // Called when credentials are updated + OnError(err error) // Called when an error occurs +} + +type Credentials interface { + BasicAuth() (username string, password string) + RawCredentials() string +} +``` + +Example usage: +```go +rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + StreamingCredentialsProvider: &MyCredentialsProvider{}, +}) +``` + +**Note:** The streaming credentials provider can be used with [go-redis-entraid](https://github.com/redis/go-redis-entraid) to enable Entra ID (formerly Azure AD) authentication. This allows for seamless integration with Azure's managed identity services and token-based authentication. + +Example with Entra ID: +```go +import ( + "github.com/redis/go-redis/v9" + "github.com/redis/go-redis-entraid" +) + +// Create an Entra ID credentials provider +provider := entraid.NewDefaultAzureIdentityProvider() + +// Configure Redis client with Entra ID authentication +rdb := redis.NewClient(&redis.Options{ + Addr: "your-redis-server.redis.cache.windows.net:6380", + StreamingCredentialsProvider: provider, + TLSConfig: &tls.Config{ + MinVersion: tls.VersionTLS12, + }, +}) +``` + +#### 2. Context-based Credentials Provider + +The context-based provider allows credentials to be determined at the time of each operation, using the context. + +```go +rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + CredentialsProviderContext: func(ctx context.Context) (string, string, error) { + // Return username, password, and any error + return "user", "pass", nil + }, +}) +``` + +#### 3. Regular Credentials Provider + +A simple function-based provider that returns static credentials. + +```go +rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + CredentialsProvider: func() (string, string) { + // Return username and password + return "user", "pass" + }, +}) +``` + +#### 4. Username/Password Fields (Lowest Priority) + +The most basic way to provide credentials is through the `Username` and `Password` fields in the options. + +```go +rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + Username: "user", + Password: "pass", +}) +``` + +#### Priority Order + +The client will use credentials in the following priority order: +1. Streaming Credentials Provider (if set) +2. Context-based Credentials Provider (if set) +3. Regular Credentials Provider (if set) +4. Username/Password fields (if set) + +If none of these are set, the client will attempt to connect without authentication. + +### Protocol Version + +The client supports both RESP2 and RESP3 protocols. You can specify the protocol version in the options: + +```go +rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + Password: "", // no password set + DB: 0, // use default DB + Protocol: 3, // specify 2 for RESP 2 or 3 for RESP 3 +}) +``` + +### Connecting via a redis url + +go-redis also supports connecting via the +[redis uri specification](https://github.com/redis/redis-specifications/tree/master/uri/redis.txt). +The example below demonstrates how the connection can easily be configured using a string, adhering +to this specification. + +```go +import ( + "github.com/redis/go-redis/v9" +) + +func ExampleClient() *redis.Client { + url := "redis://user:password@localhost:6379/0?protocol=3" + opts, err := redis.ParseURL(url) + if err != nil { + panic(err) + } + + return redis.NewClient(opts) +} + +``` + +### Instrument with OpenTelemetry + +```go +import ( + "github.com/redis/go-redis/v9" + "github.com/redis/go-redis/extra/redisotel/v9" + "errors" +) + +func main() { + ... + rdb := redis.NewClient(&redis.Options{...}) + + if err := errors.Join(redisotel.InstrumentTracing(rdb), redisotel.InstrumentMetrics(rdb)); err != nil { + log.Fatal(err) + } +``` + + +### Buffer Size Configuration + +go-redis uses 32KiB read and write buffers by default for optimal performance. For high-throughput applications or large pipelines, you can customize buffer sizes: + +```go +rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + ReadBufferSize: 1024 * 1024, // 1MiB read buffer + WriteBufferSize: 1024 * 1024, // 1MiB write buffer +}) +``` + +### Advanced Configuration + +go-redis supports extending the client identification phase to allow projects to send their own custom client identification. + +#### Default Client Identification + +By default, go-redis automatically sends the client library name and version during the connection process. This feature is available in redis-server as of version 7.2. As a result, the command is "fire and forget", meaning it should fail silently, in the case that the redis server does not support this feature. + +#### Disabling Identity Verification + +When connection identity verification is not required or needs to be explicitly disabled, a `DisableIdentity` configuration option exists. +Initially there was a typo and the option was named `DisableIndentity` instead of `DisableIdentity`. The misspelled option is marked as Deprecated and will be removed in V10 of this library. +Although both options will work at the moment, the correct option is `DisableIdentity`. The deprecated option will be removed in V10 of this library, so please use the correct option name to avoid any issues. + +To disable verification, set the `DisableIdentity` option to `true` in the Redis client options: + +```go +rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + Password: "", + DB: 0, + DisableIdentity: true, // Disable set-info on connect +}) +``` + +#### Unstable RESP3 Structures for RediSearch Commands +When integrating Redis with application functionalities using RESP3, it's important to note that some response structures aren't final yet. This is especially true for more complex structures like search and query results. We recommend using RESP2 when using the search and query capabilities, but we plan to stabilize the RESP3-based API-s in the coming versions. You can find more guidance in the upcoming release notes. + +To enable unstable RESP3, set the option in your client configuration: + +```go +redis.NewClient(&redis.Options{ + UnstableResp3: true, + }) +``` +**Note:** When UnstableResp3 mode is enabled, it's necessary to use RawResult() and RawVal() to retrieve a raw data. + Since, raw response is the only option for unstable search commands Val() and Result() calls wouldn't have any affect on them: + +```go +res1, err := client.FTSearchWithArgs(ctx, "txt", "foo bar", &redis.FTSearchOptions{}).RawResult() +val1 := client.FTSearchWithArgs(ctx, "txt", "foo bar", &redis.FTSearchOptions{}).RawVal() +``` + +#### Redis-Search Default Dialect + +In the Redis-Search module, **the default dialect is 2**. If needed, you can explicitly specify a different dialect using the appropriate configuration in your queries. + +**Important**: Be aware that the query dialect may impact the results returned. If needed, you can revert to a different dialect version by passing the desired dialect in the arguments of the command you want to execute. +For example: +``` + res2, err := rdb.FTSearchWithArgs(ctx, + "idx:bicycle", + "@pickup_zone:[CONTAINS $bike]", + &redis.FTSearchOptions{ + Params: map[string]interface{}{ + "bike": "POINT(-0.1278 51.5074)", + }, + DialectVersion: 3, + }, + ).Result() +``` +You can find further details in the [query dialect documentation](https://redis.io/docs/latest/develop/interact/search-and-query/advanced-concepts/dialects/). + +#### Custom buffer sizes +Prior to v9.12, the buffer size was the default go value of 4096 bytes. Starting from v9.12, +go-redis uses 32KiB read and write buffers by default for optimal performance. +For high-throughput applications or large pipelines, you can customize buffer sizes: + +```go +rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + ReadBufferSize: 1024 * 1024, // 1MiB read buffer + WriteBufferSize: 1024 * 1024, // 1MiB write buffer +}) +``` + +**Important**: If you experience any issues with the default buffer sizes, please try setting them to the go default of 4096 bytes. + +## Contributing +We welcome contributions to the go-redis library! If you have a bug fix, feature request, or improvement, please open an issue or pull request on GitHub. +We appreciate your help in making go-redis better for everyone. +If you are interested in contributing to the go-redis library, please check out our [contributing guidelines](CONTRIBUTING.md) for more information on how to get started. + +## Look and feel + +Some corner cases: + +```go +// SET key value EX 10 NX +set, err := rdb.SetNX(ctx, "key", "value", 10*time.Second).Result() + +// SET key value keepttl NX +set, err := rdb.SetNX(ctx, "key", "value", redis.KeepTTL).Result() + +// SORT list LIMIT 0 2 ASC +vals, err := rdb.Sort(ctx, "list", &redis.Sort{Offset: 0, Count: 2, Order: "ASC"}).Result() + +// ZRANGEBYSCORE zset -inf +inf WITHSCORES LIMIT 0 2 +vals, err := rdb.ZRangeByScoreWithScores(ctx, "zset", &redis.ZRangeBy{ + Min: "-inf", + Max: "+inf", + Offset: 0, + Count: 2, +}).Result() + +// ZINTERSTORE out 2 zset1 zset2 WEIGHTS 2 3 AGGREGATE SUM +vals, err := rdb.ZInterStore(ctx, "out", &redis.ZStore{ + Keys: []string{"zset1", "zset2"}, + Weights: []int64{2, 3} +}).Result() + +// EVAL "return {KEYS[1],ARGV[1]}" 1 "key" "hello" +vals, err := rdb.Eval(ctx, "return {KEYS[1],ARGV[1]}", []string{"key"}, "hello").Result() + +// custom command +res, err := rdb.Do(ctx, "set", "key", "value").Result() +``` + +## Typed Errors + +go-redis provides typed error checking functions for common Redis errors: + +```go +// Cluster and replication errors +redis.IsLoadingError(err) // Redis is loading the dataset +redis.IsReadOnlyError(err) // Write to read-only replica +redis.IsClusterDownError(err) // Cluster is down +redis.IsTryAgainError(err) // Command should be retried +redis.IsMasterDownError(err) // Master is down +redis.IsMovedError(err) // Returns (address, true) if key moved +redis.IsAskError(err) // Returns (address, true) if key being migrated + +// Connection and resource errors +redis.IsMaxClientsError(err) // Maximum clients reached +redis.IsAuthError(err) // Authentication failed (NOAUTH, WRONGPASS, unauthenticated) +redis.IsPermissionError(err) // Permission denied (NOPERM) +redis.IsOOMError(err) // Out of memory (OOM) + +// Transaction errors +redis.IsExecAbortError(err) // Transaction aborted (EXECABORT) +``` + +### Error Wrapping in Hooks + +When wrapping errors in hooks, use custom error types with `Unwrap()` method (preferred) or `fmt.Errorf` with `%w`. Always call `cmd.SetErr()` to preserve error type information: + +```go +// Custom error type (preferred) +type AppError struct { + Code string + RequestID string + Err error +} + +func (e *AppError) Error() string { + return fmt.Sprintf("[%s] request_id=%s: %v", e.Code, e.RequestID, e.Err) +} + +func (e *AppError) Unwrap() error { + return e.Err +} + +// Hook implementation +func (h MyHook) ProcessHook(next redis.ProcessHook) redis.ProcessHook { + return func(ctx context.Context, cmd redis.Cmder) error { + err := next(ctx, cmd) + if err != nil { + // Wrap with custom error type + wrappedErr := &AppError{ + Code: "REDIS_ERROR", + RequestID: getRequestID(ctx), + Err: err, + } + cmd.SetErr(wrappedErr) + return wrappedErr // Return wrapped error to preserve it + } + return nil + } +} + +// Typed error detection works through wrappers +if redis.IsLoadingError(err) { + // Retry logic +} + +// Extract custom error if needed +var appErr *AppError +if errors.As(err, &appErr) { + log.Printf("Request: %s", appErr.RequestID) +} +``` + +Alternatively, use `fmt.Errorf` with `%w`: +```go +wrappedErr := fmt.Errorf("context: %w", err) +cmd.SetErr(wrappedErr) +``` + +### Pipeline Hook Example + +For pipeline operations, use `ProcessPipelineHook`: + +```go +type PipelineLoggingHook struct{} + +func (h PipelineLoggingHook) DialHook(next redis.DialHook) redis.DialHook { + return next +} + +func (h PipelineLoggingHook) ProcessHook(next redis.ProcessHook) redis.ProcessHook { + return next +} + +func (h PipelineLoggingHook) ProcessPipelineHook(next redis.ProcessPipelineHook) redis.ProcessPipelineHook { + return func(ctx context.Context, cmds []redis.Cmder) error { + start := time.Now() + + // Execute the pipeline + err := next(ctx, cmds) + + duration := time.Since(start) + log.Printf("Pipeline executed %d commands in %v", len(cmds), duration) + + // Process individual command errors + // Note: Individual command errors are already set on each cmd by the pipeline execution + for _, cmd := range cmds { + if cmdErr := cmd.Err(); cmdErr != nil { + // Check for specific error types using typed error functions + if redis.IsAuthError(cmdErr) { + log.Printf("Auth error in pipeline command %s: %v", cmd.Name(), cmdErr) + } else if redis.IsPermissionError(cmdErr) { + log.Printf("Permission error in pipeline command %s: %v", cmd.Name(), cmdErr) + } + + // Optionally wrap individual command errors to add context + // The wrapped error preserves type information through errors.As() + wrappedErr := fmt.Errorf("pipeline cmd %s failed: %w", cmd.Name(), cmdErr) + cmd.SetErr(wrappedErr) + } + } + + // Return the pipeline-level error (connection errors, etc.) + // You can wrap it if needed, or return it as-is + return err + } +} + +// Register the hook +rdb.AddHook(PipelineLoggingHook{}) + +// Use pipeline - errors are still properly typed +pipe := rdb.Pipeline() +pipe.Set(ctx, "key1", "value1", 0) +pipe.Get(ctx, "key2") +_, err := pipe.Exec(ctx) +``` + +## Run the test + +Recommended to use Docker, just need to run: +```shell +make test +``` + +## See also + +- [Golang ORM](https://bun.uptrace.dev) for PostgreSQL, MySQL, MSSQL, and SQLite +- [Golang PostgreSQL](https://bun.uptrace.dev/postgres/) +- [Golang HTTP router](https://bunrouter.uptrace.dev/) +- [Golang ClickHouse ORM](https://github.com/uptrace/go-clickhouse) + +## Contributors + +> The go-redis project was originally initiated by :star: [**uptrace/uptrace**](https://github.com/uptrace/uptrace). +> Uptrace is an open-source APM tool that supports distributed tracing, metrics, and logs. You can +> use it to monitor applications and set up automatic alerts to receive notifications via email, +> Slack, Telegram, and others. +> +> See [OpenTelemetry](https://github.com/redis/go-redis/tree/master/example/otel) example which +> demonstrates how you can use Uptrace to monitor go-redis. + +Thanks to all the people who already contributed! + + + + diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/RELEASE-NOTES.md b/scraper-go/vendor/github.com/redis/go-redis/v9/RELEASE-NOTES.md new file mode 100644 index 0000000..927d045 --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/RELEASE-NOTES.md @@ -0,0 +1,950 @@ +# Release Notes + +# 9.19.0 (2026-04-27) + +## 🚀 Highlights + +### FIPS-Compatible Script Helper + +`Script` now supports a FIPS-safe execution mode that avoids client-side SHA-1 computation, which is blocked in strict FIPS environments. A new `NewScriptServerSHA` constructor uses `SCRIPT LOAD` to obtain and cache the digest from the server, then runs commands via `EVALSHA`/`EVALSHA_RO`. Falls back to `EVAL`/`EVALRO` if loading fails, and transparently retries once on `NOSCRIPT`. The default behavior is unchanged for existing users. + +([#3700](https://github.com/redis/go-redis/pull/3700)) by [@chaitanyabodlapati](https://github.com/chaitanyabodlapati) + +### FT.AGGREGATE Step-Based Pipeline Builder + +Added a new step-based `FT.AGGREGATE` pipeline API via `FTAggregateOptions.Steps`, allowing `LOAD`, `APPLY`, `GROUPBY`, and `SORTBY` (with per-step `MAX`) to be repeated and interleaved in arbitrary order — matching Redis's native multi-stage aggregation semantics. The legacy `Load`/`Apply`/`GroupBy`/`SortBy`/`SortByMax` fields are now deprecated. + +([#3782](https://github.com/redis/go-redis/pull/3782)) by [@ndyakov](https://github.com/ndyakov) + +### Raw RESP Protocol Access + +Added `DoRaw` and `DoRawWriteTo` methods for executing arbitrary commands and reading the raw RESP response. Useful for proxying, custom protocol inspection, and working with commands not yet wrapped by go-redis. + +([#3713](https://github.com/redis/go-redis/pull/3713)) by [@ofekshenawa](https://github.com/ofekshenawa) + +### Configurable Dial Retry Backoff + +Added `DialerRetryBackoff` option (plumbed through `Options`, `ClusterOptions`, `RingOptions`, `FailoverOptions`) to let callers customize the delay between failed dial attempts. Helpers `DialRetryBackoffConstant` and `DialRetryBackoffExponential` (with jitter and cap) are provided out of the box. Dial timeout is now also applied **per attempt** rather than across all retries. + +([#3706](https://github.com/redis/go-redis/pull/3706), [#3705](https://github.com/redis/go-redis/pull/3705)) by [@mwhooker](https://github.com/mwhooker) + +## ✨ New Features + +- **FT.AGGREGATE Steps**: Step-based pipeline builder for `FT.AGGREGATE` with support for repeated/interleaved `LOAD`, `APPLY`, `GROUPBY`, and `SORTBY` stages ([#3782](https://github.com/redis/go-redis/pull/3782)) by [@ndyakov](https://github.com/ndyakov) +- **VectorSet commands**: Added `VISMEMBER` and `WITHATTRIBS` support ([#3753](https://github.com/redis/go-redis/pull/3753)) by [@romanpovol](https://github.com/romanpovol) +- **FIPS-safe Script**: `NewScriptServerSHA` uses `SCRIPT LOAD` to obtain the digest from the server, avoiding client-side SHA-1 ([#3700](https://github.com/redis/go-redis/pull/3700)) by [@chaitanyabodlapati](https://github.com/chaitanyabodlapati) +- **Raw RESP access**: `DoRaw` and `DoRawWriteTo` for raw RESP protocol access ([#3713](https://github.com/redis/go-redis/pull/3713)) by [@ofekshenawa](https://github.com/ofekshenawa) +- **Dial retry backoff**: `DialerRetryBackoff` function option with constant and exponential helpers ([#3706](https://github.com/redis/go-redis/pull/3706)) by [@mwhooker](https://github.com/mwhooker) +- **Typed NOSCRIPT error**: Redis `NOSCRIPT` replies are now surfaced as a typed error for easier handling ([#3738](https://github.com/redis/go-redis/pull/3738)) by [@LINKIWI](https://github.com/LINKIWI) +- **PubSub ClientSetName**: Added `ClientSetName` method to `PubSub` ([#3727](https://github.com/redis/go-redis/pull/3727)) by [@Flack74](https://github.com/Flack74) +- **ReplicaOf**: New `ReplicaOf` method replaces the deprecated `SlaveOf` ([#3720](https://github.com/redis/go-redis/pull/3720)) by [@Copilot](https://github.com/apps/copilot-swe-agent) +- **HSCAN BinaryUnmarshaler**: `HScan` now supports types implementing `encoding.BinaryUnmarshaler` ([#3768](https://github.com/redis/go-redis/pull/3768)) by [@Aaditya-dubey1](https://github.com/Aaditya-dubey1) + +## 🐛 Bug Fixes + +- **Auto hostname type detection**: Improved endpoint type detection for maintenance notifications using DNS-based classification; handles empty hosts and expanded private-IP ranges ([#3789](https://github.com/redis/go-redis/pull/3789)) by [@ndyakov](https://github.com/ndyakov) +- **HELLO fallback**: Don't send `CLIENT MAINT_NOTIFICATIONS` handshake when `HELLO` fails and connection falls back to RESP2; fail fast when explicitly enabled with RESP3 ([#3788](https://github.com/redis/go-redis/pull/3788)) by [@ndyakov](https://github.com/ndyakov) +- **Dial TCP retry**: `ShouldRetry` now treats `net.OpError` with `Op == "dial"` timeout errors as safe to retry since no command was sent ([#3787](https://github.com/redis/go-redis/pull/3787)) by [@vladisa88](https://github.com/vladisa88) +- **wrappedOnClose leak**: Fixed resource leak caused by repeatedly wrapping `baseClient` close logic; replaced with a bounded, concurrency-safe named-hook registry ([#3785](https://github.com/redis/go-redis/pull/3785)) by [@ndyakov](https://github.com/ndyakov) +- **Pool Close() on stale connections**: Suppress close errors (e.g., TLS `closeNotify` timeouts) for connections already dropped by the server due to idle timeout ([#3778](https://github.com/redis/go-redis/pull/3778)) by [@ofekshenawa](https://github.com/ofekshenawa) +- **FIFO waiter ordering**: Fixed race in `ConnStateMachine.notifyWaiters` that could wake multiple waiters under a single mutex hold and violate FIFO ordering ([#3777](https://github.com/redis/go-redis/pull/3777)) by [@0x48core](https://github.com/0x48core) +- **Lua READONLY detection**: Detect `READONLY` errors embedded in Lua script error messages on read-only replicas so commands are correctly retried ([#3769](https://github.com/redis/go-redis/pull/3769)) by [@zhengjilei](https://github.com/zhengjilei) +- **VectorScoreSliceCmd RESP2**: Fixed `VSimWithScores`, `VSimWithArgsWithScores`, and `VLinksWithScores` which were broken on RESP2 connections returning flat arrays instead of maps ([#3767](https://github.com/redis/go-redis/pull/3767)) by [@Copilot](https://github.com/apps/copilot-swe-agent) +- **Closed connection handling**: Two fixes for closed connection handling in the pool ([#3764](https://github.com/redis/go-redis/pull/3764)) by [@cxljs](https://github.com/cxljs) +- **ZRangeArgs Rev**: Fixed `ZRangeArgs` with `Rev` + `ByScore`/`ByLex` incorrectly swapping `Start`/`Stop`, breaking `ZRANGESTORE` ([#3751](https://github.com/redis/go-redis/pull/3751)) by [@Copilot](https://github.com/apps/copilot-swe-agent) +- **OTel metric instrument types**: Fixed metric instrument types in `redisotel-native` ([#3743](https://github.com/redis/go-redis/pull/3743)) by [@ofekshenawa](https://github.com/ofekshenawa) +- **Options.clone() data race**: Fixed data race when cloning `Options` ([#3739](https://github.com/redis/go-redis/pull/3739)) by [@rubensayshi](https://github.com/rubensayshi) +- **Connection closure metrics**: Fixed connection closure metrics and enabled all metric groups by default in `redisotel-native` ([#3735](https://github.com/redis/go-redis/pull/3735)) by [@ofekshenawa](https://github.com/ofekshenawa) +- **OTel semconv v1.38.0**: Use metric definition from `otel/semconv/v1.38.0` in `redisotel-native` ([#3731](https://github.com/redis/go-redis/pull/3731)) by [@wzy9607](https://github.com/wzy9607) +- **SETNX semantics**: Use `SET ... NX` instead of the deprecated `SETNX` command ([#3723](https://github.com/redis/go-redis/pull/3723)) by [@ndyakov](https://github.com/ndyakov) +- **TIME keyless routing**: Mark `TIME` as a keyless command for correct cluster routing ([#3722](https://github.com/redis/go-redis/pull/3722)) by [@fatal10110](https://github.com/fatal10110) +- **Dial timeout per retry**: Dial timeout now applies per attempt instead of across all retry attempts combined ([#3705](https://github.com/redis/go-redis/pull/3705)) by [@mwhooker](https://github.com/mwhooker) +- **Cluster metrics attributes**: Fixed `pool.name` being appended per node, which corrupted and dropped user-provided custom attributes ([#3699](https://github.com/redis/go-redis/pull/3699)) by [@Jesse-Bonfire](https://github.com/Jesse-Bonfire) +- **initConn nil dereference**: Fixed nil pointer dereference and potential deadlock in `*baseClient.initConn()`; added explicit nil option guards to client constructors ([#3676](https://github.com/redis/go-redis/pull/3676)) by [@olde-ducke](https://github.com/olde-ducke) + +## ⚡ Performance + +- **RESP reader**: Optimized RESP reader by eliminating intermediate string allocations ([#3774](https://github.com/redis/go-redis/pull/3774)) by [@Aaditya-dubey1](https://github.com/Aaditya-dubey1) +- **Inline rendezvous hashing**: Replaced `github.com/dgryski/go-rendezvous` dependency with an in-repo implementation in `internal/hashtag`, reducing the dependency graph while preserving algorithm parity ([#3762](https://github.com/redis/go-redis/pull/3762)) by [@bigsk05](https://github.com/bigsk05) + +## 🧪 Testing & Infrastructure + +- **Release automation**: Added `repository`, `ref`, and `client-libs-test-image-tag` inputs to the `run-tests` composite action; `redis-version` is now optional so unstable builds use `REDIS_VERSION` from the Makefile ([#3749](https://github.com/redis/go-redis/pull/3749)) by [@dariaguy](https://github.com/dariaguy) +- **Go 1.24**: Updated minimum Go version to 1.24 and use `-compat=1.24` in release scripts ([#3714](https://github.com/redis/go-redis/pull/3714), [#3754](https://github.com/redis/go-redis/pull/3754)) by [@ndyakov](https://github.com/ndyakov), [@cxljs](https://github.com/cxljs) + +## 🧰 Maintenance + +- **Pool state machine**: Removed redundant `Conn.closed` atomic field in favor of the state machine's `StateClosed` ([#3783](https://github.com/redis/go-redis/pull/3783)) by [@cxljs](https://github.com/cxljs) +- **OTel SDK**: Updated OpenTelemetry SDK dependencies in `redisotel`/`redisotel-native` ([#3770](https://github.com/redis/go-redis/pull/3770)) by [@ndyakov](https://github.com/ndyakov) +- **Go 1.21+ built-ins**: Use `maps.Keys`, `slices.Collect`, `slices.Contains`, `clear()`, and `slices.SortFunc` instead of custom helpers ([#3758](https://github.com/redis/go-redis/pull/3758), [#3746](https://github.com/redis/go-redis/pull/3746)) by [@cxljs](https://github.com/cxljs) +- **HGetAll docs**: Added Go doc comment to `HGetAll` describing behavior and complexity ([#3776](https://github.com/redis/go-redis/pull/3776)) by [@0x48core](https://github.com/0x48core) +- **Docs links**: Fixed irrelevant docs links ([#3724](https://github.com/redis/go-redis/pull/3724)) by [@olzhas-sabiyev](https://github.com/olzhas-sabiyev) +- **Examples cleanup**: Removed throughput binary from examples ([#3733](https://github.com/redis/go-redis/pull/3733)) by [@ndyakov](https://github.com/ndyakov) + +## 👥 Contributors + +We'd like to thank all the contributors who worked on this release! + +[@0x48core](https://github.com/0x48core), [@Aaditya-dubey1](https://github.com/Aaditya-dubey1), [@Copilot](https://github.com/apps/copilot-swe-agent), [@Flack74](https://github.com/Flack74), [@Jesse-Bonfire](https://github.com/Jesse-Bonfire), [@LINKIWI](https://github.com/LINKIWI), [@bigsk05](https://github.com/bigsk05), [@chaitanyabodlapati](https://github.com/chaitanyabodlapati), [@cxljs](https://github.com/cxljs), [@dariaguy](https://github.com/dariaguy), [@fatal10110](https://github.com/fatal10110), [@mwhooker](https://github.com/mwhooker), [@ndyakov](https://github.com/ndyakov), [@ofekshenawa](https://github.com/ofekshenawa), [@olde-ducke](https://github.com/olde-ducke), [@olzhas-sabiyev](https://github.com/olzhas-sabiyev), [@romanpovol](https://github.com/romanpovol), [@rubensayshi](https://github.com/rubensayshi), [@vladisa88](https://github.com/vladisa88), [@wzy9607](https://github.com/wzy9607), [@zhengjilei](https://github.com/zhengjilei) + +--- + +**Full Changelog**: https://github.com/redis/go-redis/compare/v9.18.0...v9.19.0 + +# 9.18.0 (2026-02-16) + +## 🚀 Highlights + +### Redis 8.6 Support + +Added support for Redis 8.6, including new commands and features for streams idempotent production and HOTKEYS. + +### Smart Client Handoff (Maintenance Notifications) for Cluster + +This release introduces comprehensive support for Redis Cluster maintenance notifications via SMIGRATING/SMIGRATED push notifications. The client now automatically handles slot migrations by: +- **Relaxing timeouts during migration** (SMIGRATING) to prevent false failures +- **Triggering lazy cluster state reloads** upon completion (SMIGRATED) +- Enabling seamless operations during Redis Enterprise maintenance windows + +([#3643](https://github.com/redis/go-redis/pull/3643)) by [@ndyakov](https://github.com/ndyakov) + +### OpenTelemetry Native Metrics Support + +Added comprehensive OpenTelemetry metrics support following the [OpenTelemetry Database Client Semantic Conventions](https://opentelemetry.io/docs/specs/semconv/database/database-metrics/). The implementation uses a Bridge Pattern to keep the core library dependency-free while providing optional metrics instrumentation through the new `extra/redisotel-native` package. + +**Metric groups include:** +- Command metrics: Operation duration with retry tracking +- Connection basic: Connection count and creation time +- Resiliency: Errors, handoffs, timeout relaxation +- Connection advanced: Wait time and use time +- Pubsub metrics: Published and received messages +- Stream metrics: Processing duration and maintenance notifications + +([#3637](https://github.com/redis/go-redis/pull/3637)) by [@ofekshenawa](https://github.com/ofekshenawa) + +## ✨ New Features + +- **HOTKEYS Commands**: Added support for Redis HOTKEYS feature for identifying hot keys based on CPU consumption and network utilization ([#3695](https://github.com/redis/go-redis/pull/3695)) by [@ofekshenawa](https://github.com/ofekshenawa) +- **Streams Idempotent Production**: Added support for Redis 8.6+ Streams Idempotent Production with `ProducerID`, `IdempotentID`, `IdempotentAuto` in `XAddArgs` and new `XCFGSET` command ([#3693](https://github.com/redis/go-redis/pull/3693)) by [@ofekshenawa](https://github.com/ofekshenawa) +- **NaN Values for TimeSeries**: Added support for NaN (Not a Number) values in Redis time series commands ([#3687](https://github.com/redis/go-redis/pull/3687)) by [@ofekshenawa](https://github.com/ofekshenawa) +- **DialerRetries Options**: Added `DialerRetries` and `DialerRetryTimeout` to `ClusterOptions`, `RingOptions`, and `FailoverOptions` ([#3686](https://github.com/redis/go-redis/pull/3686)) by [@naveenchander30](https://github.com/naveenchander30) +- **ConnMaxLifetimeJitter**: Added jitter configuration to distribute connection expiration times and prevent thundering herd ([#3666](https://github.com/redis/go-redis/pull/3666)) by [@cyningsun](https://github.com/cyningsun) +- **Digest Helper Functions**: Added `DigestString` and `DigestBytes` helper functions for client-side xxh3 hashing compatible with Redis DIGEST command ([#3679](https://github.com/redis/go-redis/pull/3679)) by [@ofekshenawa](https://github.com/ofekshenawa) +- **SMIGRATED New Format**: Updated SMIGRATED parser to support new format and remember original host:port ([#3697](https://github.com/redis/go-redis/pull/3697)) by [@ndyakov](https://github.com/ndyakov) +- **Cluster State Reload Interval**: Added cluster state reload interval option for maintenance notifications ([#3663](https://github.com/redis/go-redis/pull/3663)) by [@ndyakov](https://github.com/ndyakov) + +## 🐛 Bug Fixes + +- **PubSub nil pointer dereference**: Fixed nil pointer dereference in PubSub after `WithTimeout()` - `pubSubPool` is now properly cloned ([#3710](https://github.com/redis/go-redis/pull/3710)) by [@Copilot](https://github.com/apps/copilot-swe-agent) +- **MaintNotificationsConfig nil check**: Guard against nil `MaintNotificationsConfig` in `initConn` ([#3707](https://github.com/redis/go-redis/pull/3707)) by [@veeceey](https://github.com/veeceey) +- **wantConnQueue zombie elements**: Fixed zombie `wantConn` elements accumulation in `wantConnQueue` ([#3680](https://github.com/redis/go-redis/pull/3680)) by [@cyningsun](https://github.com/cyningsun) +- **XADD/XTRIM approx flag**: Fixed XADD and XTRIM to use `=` when approx is false ([#3684](https://github.com/redis/go-redis/pull/3684)) by [@ndyakov](https://github.com/ndyakov) +- **Sentinel timeout retry**: When connection to a sentinel times out, attempt to connect to other sentinels ([#3654](https://github.com/redis/go-redis/pull/3654)) by [@cxljs](https://github.com/cxljs) + +## ⚡ Performance + +- **Fuzz test optimization**: Eliminated repeated string conversions, used functional approach for cleaner operation selection ([#3692](https://github.com/redis/go-redis/pull/3692)) by [@feiguoL](https://github.com/feiguoL) +- **Pre-allocate capacity**: Pre-allocate slice capacity to prevent multiple capacity expansions ([#3689](https://github.com/redis/go-redis/pull/3689)) by [@feelshu](https://github.com/feelshu) + +## 🧪 Testing + +- **Comprehensive TLS tests**: Added comprehensive TLS tests and example for standalone, cluster, and certificate authentication ([#3681](https://github.com/redis/go-redis/pull/3681)) by [@ndyakov](https://github.com/ndyakov) +- **Redis 8.6**: Updated CI to use Redis 8.6-pre ([#3685](https://github.com/redis/go-redis/pull/3685)) by [@ndyakov](https://github.com/ndyakov) + +## 🧰 Maintenance + +- **Deprecation warnings**: Added deprecation warnings for commands based on Redis documentation ([#3673](https://github.com/redis/go-redis/pull/3673)) by [@ndyakov](https://github.com/ndyakov) +- **Use errors.Join()**: Replaced custom error join function with standard library `errors.Join()` ([#3653](https://github.com/redis/go-redis/pull/3653)) by [@cxljs](https://github.com/cxljs) +- **Use Go 1.21 min/max**: Use Go 1.21's built-in min/max functions ([#3656](https://github.com/redis/go-redis/pull/3656)) by [@cxljs](https://github.com/cxljs) +- **Proper formatting**: Code formatting improvements ([#3670](https://github.com/redis/go-redis/pull/3670)) by [@12ya](https://github.com/12ya) +- **Set commands documentation**: Added comprehensive documentation to all set command methods ([#3642](https://github.com/redis/go-redis/pull/3642)) by [@iamamirsalehi](https://github.com/iamamirsalehi) +- **MaxActiveConns docs**: Added default value documentation for `MaxActiveConns` ([#3674](https://github.com/redis/go-redis/pull/3674)) by [@codykaup](https://github.com/codykaup) +- **README example update**: Updated README example ([#3657](https://github.com/redis/go-redis/pull/3657)) by [@cxljs](https://github.com/cxljs) +- **Cluster maintnotif example**: Added example application for cluster maintenance notifications ([#3651](https://github.com/redis/go-redis/pull/3651)) by [@ndyakov](https://github.com/ndyakov) + +## 👥 Contributors + +We'd like to thank all the contributors who worked on this release! + +[@12ya](https://github.com/12ya), [@Copilot](https://github.com/apps/copilot-swe-agent), [@codykaup](https://github.com/codykaup), [@cxljs](https://github.com/cxljs), [@cyningsun](https://github.com/cyningsun), [@feelshu](https://github.com/feelshu), [@feiguoL](https://github.com/feiguoL), [@iamamirsalehi](https://github.com/iamamirsalehi), [@naveenchander30](https://github.com/naveenchander30), [@ndyakov](https://github.com/ndyakov), [@ofekshenawa](https://github.com/ofekshenawa), [@veeceey](https://github.com/veeceey) + +--- + +**Full Changelog**: https://github.com/redis/go-redis/compare/v9.17.0...v9.18.0 + +# 9.18.0-beta.2 (2025-12-09) + +## 🚀 Highlights + +### Go Version Update + +This release updates the minimum required Go version to 1.21. This is part of a gradual migration strategy where the minimum supported Go version will be three versions behind the latest release. With each new Go version release, we will bump the minimum version by one, ensuring compatibility while staying current with the Go ecosystem. + +### Stability Improvements + +This release includes several important stability fixes: +- Fixed a critical panic in the handoff worker manager that could occur when handling nil errors +- Improved test reliability for Smart Client Handoff functionality +- Fixed logging format issues that could cause runtime errors + +## ✨ New Features + +- OpenTelemetry metrics improvements for nil response handling ([#3638](https://github.com/redis/go-redis/pull/3638)) by [@fengve](https://github.com/fengve) + +## 🐛 Bug Fixes + +- Fixed panic on nil error in handoffWorkerManager closeConnFromRequest ([#3633](https://github.com/redis/go-redis/pull/3633)) by [@ccoVeille](https://github.com/ccoVeille) +- Fixed bad sprintf syntax in logging ([#3632](https://github.com/redis/go-redis/pull/3632)) by [@ccoVeille](https://github.com/ccoVeille) + +## 🧰 Maintenance + +- Updated minimum Go version to 1.21 ([#3640](https://github.com/redis/go-redis/pull/3640)) by [@ndyakov](https://github.com/ndyakov) +- Use Go 1.20 idiomatic string<->byte conversion ([#3435](https://github.com/redis/go-redis/pull/3435)) by [@justinhwang](https://github.com/justinhwang) +- Reduce flakiness of Smart Client Handoff test ([#3641](https://github.com/redis/go-redis/pull/3641)) by [@kiryazovi-redis](https://github.com/kiryazovi-redis) +- Revert PR #3634 (Observability metrics phase1) ([#3635](https://github.com/redis/go-redis/pull/3635)) by [@ofekshenawa](https://github.com/ofekshenawa) + +## 👥 Contributors + +We'd like to thank all the contributors who worked on this release! + +[@justinhwang](https://github.com/justinhwang), [@ndyakov](https://github.com/ndyakov), [@kiryazovi-redis](https://github.com/kiryazovi-redis), [@fengve](https://github.com/fengve), [@ccoVeille](https://github.com/ccoVeille), [@ofekshenawa](https://github.com/ofekshenawa) + +--- + +**Full Changelog**: https://github.com/redis/go-redis/compare/v9.18.0-beta.1...v9.18.0-beta.2 + +# 9.18.0-beta.1 (2025-12-01) + +## 🚀 Highlights + +### Request and Response Policy Based Routing in Cluster Mode + +This beta release introduces comprehensive support for Redis COMMAND-based request and response policy routing for cluster clients. This feature enables intelligent command routing and response aggregation based on Redis command metadata. + +**Key Features:** +- **Command Policy Loader**: Automatically parses and caches COMMAND metadata with routing/aggregation hints +- **Enhanced Routing Engine**: Supports all request policies including: + - `default(keyless)` - Commands without keys + - `default(hashslot)` - Commands with hash slot routing + - `all_shards` - Commands that need to run on all shards + - `all_nodes` - Commands that need to run on all nodes + - `multi_shard` - Commands that span multiple shards + - `special` - Commands with custom routing logic +- **Response Aggregator**: Intelligently combines multi-shard replies based on response policies: + - `all_succeeded` - All shards must succeed + - `one_succeeded` - At least one shard must succeed + - `agg_sum` - Aggregate numeric responses + - `special` - Custom aggregation logic (e.g., FT.CURSOR) +- **Raw Command Support**: Policies are enforced on `Client.Do(ctx, args...)` + +This feature is particularly useful for Redis Stack commands like RediSearch that need to operate across multiple shards in a cluster. + +### Connection Pool Improvements + +Fixed a critical defect in the connection pool's turn management mechanism that could lead to connection leaks under certain conditions. The fix ensures proper 1:1 correspondence between turns and connections. + +## ✨ New Features + +- Request and Response Policy Based Routing in Cluster Mode ([#3422](https://github.com/redis/go-redis/pull/3422)) by [@ofekshenawa](https://github.com/ofekshenawa) + +## 🐛 Bug Fixes + +- Fixed connection pool turn management to prevent connection leaks ([#3626](https://github.com/redis/go-redis/pull/3626)) by [@cyningsun](https://github.com/cyningsun) + +## 🧰 Maintenance + +- chore(deps): bump rojopolis/spellcheck-github-actions from 0.54.0 to 0.55.0 ([#3627](https://github.com/redis/go-redis/pull/3627)) + +## 👥 Contributors + +We'd like to thank all the contributors who worked on this release! + +[@cyningsun](https://github.com/cyningsun), [@ofekshenawa](https://github.com/ofekshenawa), [@ndyakov](https://github.com/ndyakov) + +--- + +**Full Changelog**: https://github.com/redis/go-redis/compare/v9.17.1...v9.18.0-beta.1 + +# 9.17.1 (2025-11-25) + +## 🐛 Bug Fixes + +- add wait to keyless commands list ([#3615](https://github.com/redis/go-redis/pull/3615)) by [@marcoferrer](https://github.com/marcoferrer) +- fix(time): remove cached time optimization ([#3611](https://github.com/redis/go-redis/pull/3611)) by [@ndyakov](https://github.com/ndyakov) + +## 🧰 Maintenance + +- chore(deps): bump golangci/golangci-lint-action from 9.0.0 to 9.1.0 ([#3609](https://github.com/redis/go-redis/pull/3609)) +- chore(deps): bump actions/checkout from 5 to 6 ([#3610](https://github.com/redis/go-redis/pull/3610)) +- chore(script): fix help call in tag.sh ([#3606](https://github.com/redis/go-redis/pull/3606)) by [@ndyakov](https://github.com/ndyakov) + +## Contributors +We'd like to thank all the contributors who worked on this release! + +[@marcoferrer](https://github.com/marcoferrer) and [@ndyakov](https://github.com/ndyakov) + +--- + +**Full Changelog**: https://github.com/redis/go-redis/compare/v9.17.0...v9.17.1 + +# 9.17.0 (2025-11-19) + +## 🚀 Highlights + +### Redis 8.4 Support +Added support for Redis 8.4, including new commands and features ([#3572](https://github.com/redis/go-redis/pull/3572)) + +### Typed Errors +Introduced typed errors for better error handling using `errors.As` instead of string checks. Errors can now be wrapped and set to commands in hooks without breaking library functionality ([#3602](https://github.com/redis/go-redis/pull/3602)) + +### New Commands +- **CAS/CAD Commands**: Added support for Compare-And-Set/Compare-And-Delete operations with conditional matching (`IFEQ`, `IFNE`, `IFDEQ`, `IFDNE`) ([#3583](https://github.com/redis/go-redis/pull/3583), [#3595](https://github.com/redis/go-redis/pull/3595)) +- **MSETEX**: Atomically set multiple key-value pairs with expiration options and conditional modes ([#3580](https://github.com/redis/go-redis/pull/3580)) +- **XReadGroup CLAIM**: Consume both incoming and idle pending entries from streams in a single call ([#3578](https://github.com/redis/go-redis/pull/3578)) +- **ACL Commands**: Added `ACLGenPass`, `ACLUsers`, and `ACLWhoAmI` ([#3576](https://github.com/redis/go-redis/pull/3576)) +- **SLOWLOG Commands**: Added `SLOWLOG LEN` and `SLOWLOG RESET` ([#3585](https://github.com/redis/go-redis/pull/3585)) +- **LATENCY Commands**: Added `LATENCY LATEST` and `LATENCY RESET` ([#3584](https://github.com/redis/go-redis/pull/3584)) + +### Search & Vector Improvements +- **Hybrid Search**: Added **EXPERIMENTAL** support for the new `FT.HYBRID` command ([#3573](https://github.com/redis/go-redis/pull/3573)) +- **Vector Range**: Added `VRANGE` command for vector sets ([#3543](https://github.com/redis/go-redis/pull/3543)) +- **FT.INFO Enhancements**: Added vector-specific attributes in FT.INFO response ([#3596](https://github.com/redis/go-redis/pull/3596)) + +### Connection Pool Improvements +- **Improved Connection Success Rate**: Implemented FIFO queue-based fairness and context pattern for connection creation to prevent premature cancellation under high concurrency ([#3518](https://github.com/redis/go-redis/pull/3518)) +- **Connection State Machine**: Resolved race conditions and improved pool performance with proper state tracking ([#3559](https://github.com/redis/go-redis/pull/3559)) +- **Pool Performance**: Significant performance improvements with faster semaphores, lockless hook manager, and reduced allocations (47-67% faster Get/Put operations) ([#3565](https://github.com/redis/go-redis/pull/3565)) + +### Metrics & Observability +- **Canceled Metric Attribute**: Added 'canceled' metrics attribute to distinguish context cancellation errors from other errors ([#3566](https://github.com/redis/go-redis/pull/3566)) + +## ✨ New Features + +- Typed errors with wrapping support ([#3602](https://github.com/redis/go-redis/pull/3602)) by [@ndyakov](https://github.com/ndyakov) +- CAS/CAD commands (marked as experimental) ([#3583](https://github.com/redis/go-redis/pull/3583), [#3595](https://github.com/redis/go-redis/pull/3595)) by [@ndyakov](https://github.com/ndyakov), [@htemelski-redis](https://github.com/htemelski-redis) +- MSETEX command support ([#3580](https://github.com/redis/go-redis/pull/3580)) by [@ofekshenawa](https://github.com/ofekshenawa) +- XReadGroup CLAIM argument ([#3578](https://github.com/redis/go-redis/pull/3578)) by [@ofekshenawa](https://github.com/ofekshenawa) +- ACL commands: GenPass, Users, WhoAmI ([#3576](https://github.com/redis/go-redis/pull/3576)) by [@destinyoooo](https://github.com/destinyoooo) +- SLOWLOG commands: LEN, RESET ([#3585](https://github.com/redis/go-redis/pull/3585)) by [@destinyoooo](https://github.com/destinyoooo) +- LATENCY commands: LATEST, RESET ([#3584](https://github.com/redis/go-redis/pull/3584)) by [@destinyoooo](https://github.com/destinyoooo) +- Hybrid search command (FT.HYBRID) ([#3573](https://github.com/redis/go-redis/pull/3573)) by [@htemelski-redis](https://github.com/htemelski-redis) +- Vector range command (VRANGE) ([#3543](https://github.com/redis/go-redis/pull/3543)) by [@cxljs](https://github.com/cxljs) +- Vector-specific attributes in FT.INFO ([#3596](https://github.com/redis/go-redis/pull/3596)) by [@ndyakov](https://github.com/ndyakov) +- Improved connection pool success rate with FIFO queue ([#3518](https://github.com/redis/go-redis/pull/3518)) by [@cyningsun](https://github.com/cyningsun) +- Canceled metrics attribute for context errors ([#3566](https://github.com/redis/go-redis/pull/3566)) by [@pvragov](https://github.com/pvragov) + +## 🐛 Bug Fixes + +- Fixed Failover Client MaintNotificationsConfig ([#3600](https://github.com/redis/go-redis/pull/3600)) by [@ajax16384](https://github.com/ajax16384) +- Fixed ACLGenPass function to use the bit parameter ([#3597](https://github.com/redis/go-redis/pull/3597)) by [@destinyoooo](https://github.com/destinyoooo) +- Return error instead of panic from commands ([#3568](https://github.com/redis/go-redis/pull/3568)) by [@dragneelfps](https://github.com/dragneelfps) +- Safety harness in `joinErrors` to prevent panic ([#3577](https://github.com/redis/go-redis/pull/3577)) by [@manisharma](https://github.com/manisharma) + +## ⚡ Performance + +- Connection state machine with race condition fixes ([#3559](https://github.com/redis/go-redis/pull/3559)) by [@ndyakov](https://github.com/ndyakov) +- Pool performance improvements: 47-67% faster Get/Put, 33% less memory, 50% fewer allocations ([#3565](https://github.com/redis/go-redis/pull/3565)) by [@ndyakov](https://github.com/ndyakov) + +## 🧪 Testing & Infrastructure + +- Updated to Redis 8.4.0 image ([#3603](https://github.com/redis/go-redis/pull/3603)) by [@ndyakov](https://github.com/ndyakov) +- Added Redis 8.4-RC1-pre to CI ([#3572](https://github.com/redis/go-redis/pull/3572)) by [@ndyakov](https://github.com/ndyakov) +- Refactored tests for idiomatic Go ([#3561](https://github.com/redis/go-redis/pull/3561), [#3562](https://github.com/redis/go-redis/pull/3562), [#3563](https://github.com/redis/go-redis/pull/3563)) by [@12ya](https://github.com/12ya) + +## 👥 Contributors + +We'd like to thank all the contributors who worked on this release! + +[@12ya](https://github.com/12ya), [@ajax16384](https://github.com/ajax16384), [@cxljs](https://github.com/cxljs), [@cyningsun](https://github.com/cyningsun), [@destinyoooo](https://github.com/destinyoooo), [@dragneelfps](https://github.com/dragneelfps), [@htemelski-redis](https://github.com/htemelski-redis), [@manisharma](https://github.com/manisharma), [@ndyakov](https://github.com/ndyakov), [@ofekshenawa](https://github.com/ofekshenawa), [@pvragov](https://github.com/pvragov) + +--- + +**Full Changelog**: https://github.com/redis/go-redis/compare/v9.16.0...v9.17.0 + +# 9.16.0 (2025-10-23) + +## 🚀 Highlights + +### Maintenance Notifications Support + +This release introduces comprehensive support for Redis maintenance notifications, enabling applications to handle server maintenance events gracefully. The new `maintnotifications` package provides: + +- **RESP3 Push Notifications**: Full support for Redis RESP3 protocol push notifications +- **Connection Handoff**: Automatic connection migration during server maintenance with configurable retry policies and circuit breakers +- **Graceful Degradation**: Configurable timeout relaxation during maintenance windows to prevent false failures +- **Event-Driven Architecture**: Background workers with on-demand scaling for efficient handoff processing +- **Production-Ready**: Comprehensive E2E testing framework and monitoring capabilities + +For detailed usage examples and configuration options, see the [maintenance notifications documentation](maintnotifications/README.md). + +## ✨ New Features + +- **Trace Filtering**: Add support for filtering traces for specific commands, including pipeline operations and dial operations ([#3519](https://github.com/redis/go-redis/pull/3519), [#3550](https://github.com/redis/go-redis/pull/3550)) + - New `TraceCmdFilter` option to selectively trace commands + - Reduces overhead by excluding high-frequency or low-value commands from traces + +## 🐛 Bug Fixes + +- **Pipeline Error Handling**: Fix issue where pipeline repeatedly sets the same error ([#3525](https://github.com/redis/go-redis/pull/3525)) +- **Connection Pool**: Ensure re-authentication does not interfere with connection handoff operations ([#3547](https://github.com/redis/go-redis/pull/3547)) + +## 🔧 Improvements + +- **Hash Commands**: Update hash command implementations ([#3523](https://github.com/redis/go-redis/pull/3523)) +- **OpenTelemetry**: Use `metric.WithAttributeSet` to avoid unnecessary attribute copying in redisotel ([#3552](https://github.com/redis/go-redis/pull/3552)) + +## 📚 Documentation + +- **Cluster Client**: Add explanation for why `MaxRetries` is disabled for `ClusterClient` ([#3551](https://github.com/redis/go-redis/pull/3551)) + +## 🧪 Testing & Infrastructure + +- **E2E Testing**: Upgrade E2E testing framework with improved reliability and coverage ([#3541](https://github.com/redis/go-redis/pull/3541)) +- **Release Process**: Improved resiliency of the release process ([#3530](https://github.com/redis/go-redis/pull/3530)) + +## 📦 Dependencies + +- Bump `rojopolis/spellcheck-github-actions` from 0.51.0 to 0.52.0 ([#3520](https://github.com/redis/go-redis/pull/3520)) +- Bump `github/codeql-action` from 3 to 4 ([#3544](https://github.com/redis/go-redis/pull/3544)) + +## 👥 Contributors + +We'd like to thank all the contributors who worked on this release! + +[@ndyakov](https://github.com/ndyakov), [@htemelski-redis](https://github.com/htemelski-redis), [@Sovietaced](https://github.com/Sovietaced), [@Udhayarajan](https://github.com/Udhayarajan), [@boekkooi-impossiblecloud](https://github.com/boekkooi-impossiblecloud), [@Pika-Gopher](https://github.com/Pika-Gopher), [@cxljs](https://github.com/cxljs), [@huiyifyj](https://github.com/huiyifyj), [@omid-h70](https://github.com/omid-h70) + +--- + +**Full Changelog**: https://github.com/redis/go-redis/compare/v9.14.0...v9.16.0 + + +# 9.15.0 was accidentally released. Please use version 9.16.0 instead. + +# 9.15.0-beta.3 (2025-09-26) + +## Highlights +This beta release includes a pre-production version of processing push notifications and hitless upgrades. + +# Changes + +- chore: Update hash_commands.go ([#3523](https://github.com/redis/go-redis/pull/3523)) + +## 🚀 New Features + +- feat: RESP3 notifications support & Hitless notifications handling ([#3418](https://github.com/redis/go-redis/pull/3418)) + +## 🐛 Bug Fixes + +- fix: pipeline repeatedly sets the error ([#3525](https://github.com/redis/go-redis/pull/3525)) + +## 🧰 Maintenance + +- chore(deps): bump rojopolis/spellcheck-github-actions from 0.51.0 to 0.52.0 ([#3520](https://github.com/redis/go-redis/pull/3520)) +- feat(e2e-testing): maintnotifications e2e and refactor ([#3526](https://github.com/redis/go-redis/pull/3526)) +- feat(tag.sh): Improved resiliency of the release process ([#3530](https://github.com/redis/go-redis/pull/3530)) + +## Contributors +We'd like to thank all the contributors who worked on this release! + +[@cxljs](https://github.com/cxljs), [@ndyakov](https://github.com/ndyakov), [@htemelski-redis](https://github.com/htemelski-redis), and [@omid-h70](https://github.com/omid-h70) + + +# 9.15.0-beta.1 (2025-09-10) + +## Highlights +This beta release includes a pre-production version of processing push notifications and hitless upgrades. + +### Hitless Upgrades +Hitless upgrades is a major new feature that allows for zero-downtime upgrades in Redis clusters. +You can find more information in the [Hitless Upgrades documentation](https://github.com/redis/go-redis/tree/master/hitless). + +# Changes + +## 🚀 New Features +- [CAE-1088] & [CAE-1072] feat: RESP3 notifications support & Hitless notifications handling ([#3418](https://github.com/redis/go-redis/pull/3418)) + +## Contributors +We'd like to thank all the contributors who worked on this release! + +[@ndyakov](https://github.com/ndyakov), [@htemelski-redis](https://github.com/htemelski-redis), [@ofekshenawa](https://github.com/ofekshenawa) + + +# 9.14.0 (2025-09-10) + +## Highlights +- Added batch process method to the pipeline ([#3510](https://github.com/redis/go-redis/pull/3510)) + +# Changes + +## 🚀 New Features + +- Added batch process method to the pipeline ([#3510](https://github.com/redis/go-redis/pull/3510)) + +## 🐛 Bug Fixes + +- fix: SetErr on Cmd if the command cannot be queued correctly in multi/exec ([#3509](https://github.com/redis/go-redis/pull/3509)) + +## 🧰 Maintenance + +- Updates release drafter config to exclude dependabot ([#3511](https://github.com/redis/go-redis/pull/3511)) +- chore(deps): bump actions/setup-go from 5 to 6 ([#3504](https://github.com/redis/go-redis/pull/3504)) + +## Contributors +We'd like to thank all the contributors who worked on this release! + +[@elena-kolevska](https://github.com/elena-kolevksa), [@htemelski-redis](https://github.com/htemelski-redis) and [@ndyakov](https://github.com/ndyakov) + + +# 9.13.0 (2025-09-03) + +## Highlights +- Pipeliner expose queued commands ([#3496](https://github.com/redis/go-redis/pull/3496)) +- Ensure that JSON.GET returns Nil response ([#3470](https://github.com/redis/go-redis/pull/3470)) +- Fixes on Read and Write buffer sizes and UniversalOptions + +## Changes +- Pipeliner expose queued commands ([#3496](https://github.com/redis/go-redis/pull/3496)) +- fix(test): fix a timing issue in pubsub test ([#3498](https://github.com/redis/go-redis/pull/3498)) +- Allow users to enable read-write splitting in failover mode. ([#3482](https://github.com/redis/go-redis/pull/3482)) +- Set the read/write buffer size of the sentinel client to 4KiB ([#3476](https://github.com/redis/go-redis/pull/3476)) + +## 🚀 New Features + +- fix(otel): register wait metrics ([#3499](https://github.com/redis/go-redis/pull/3499)) +- Support subscriptions against cluster slave nodes ([#3480](https://github.com/redis/go-redis/pull/3480)) +- Add wait metrics to otel ([#3493](https://github.com/redis/go-redis/pull/3493)) +- Clean failing timeout implementation ([#3472](https://github.com/redis/go-redis/pull/3472)) + +## 🐛 Bug Fixes + +- Do not assume that all non-IP hosts are loopbacks ([#3085](https://github.com/redis/go-redis/pull/3085)) +- Ensure that JSON.GET returns Nil response ([#3470](https://github.com/redis/go-redis/pull/3470)) + +## 🧰 Maintenance + +- fix(otel): register wait metrics ([#3499](https://github.com/redis/go-redis/pull/3499)) +- fix(make test): Add default env in makefile ([#3491](https://github.com/redis/go-redis/pull/3491)) +- Update the introduction to running tests in README.md ([#3495](https://github.com/redis/go-redis/pull/3495)) +- test: Add comprehensive edge case tests for IncrByFloat command ([#3477](https://github.com/redis/go-redis/pull/3477)) +- Set the default read/write buffer size of Redis connection to 32KiB ([#3483](https://github.com/redis/go-redis/pull/3483)) +- Bumps test image to 8.2.1-pre ([#3478](https://github.com/redis/go-redis/pull/3478)) +- fix UniversalOptions miss ReadBufferSize and WriteBufferSize options ([#3485](https://github.com/redis/go-redis/pull/3485)) +- chore(deps): bump actions/checkout from 4 to 5 ([#3484](https://github.com/redis/go-redis/pull/3484)) +- Removes dry run for stale issues policy ([#3471](https://github.com/redis/go-redis/pull/3471)) +- Update otel metrics URL ([#3474](https://github.com/redis/go-redis/pull/3474)) + +## Contributors +We'd like to thank all the contributors who worked on this release! + +[@LINKIWI](https://github.com/LINKIWI), [@cxljs](https://github.com/cxljs), [@cybersmeashish](https://github.com/cybersmeashish), [@elena-kolevska](https://github.com/elena-kolevska), [@htemelski-redis](https://github.com/htemelski-redis), [@mwhooker](https://github.com/mwhooker), [@ndyakov](https://github.com/ndyakov), [@ofekshenawa](https://github.com/ofekshenawa), [@suever](https://github.com/suever) + + +# 9.12.1 (2025-08-11) +## 🚀 Highlights +In the last version (9.12.0) the client introduced bigger write and read buffer sized. The default value we set was 512KiB. +However, users reported that this is too big for most use cases and can lead to high memory usage. +In this version the default value is changed to 256KiB. The `README.md` was updated to reflect the +correct default value and include a note that the default value can be changed. + +## 🐛 Bug Fixes + +- fix(options): Add buffer sizes to failover. Update README ([#3468](https://github.com/redis/go-redis/pull/3468)) + +## 🧰 Maintenance + +- fix(options): Add buffer sizes to failover. Update README ([#3468](https://github.com/redis/go-redis/pull/3468)) +- chore: update & fix otel example ([#3466](https://github.com/redis/go-redis/pull/3466)) + +## Contributors +We'd like to thank all the contributors who worked on this release! + +[@ndyakov](https://github.com/ndyakov) and [@vmihailenco](https://github.com/vmihailenco) + +# 9.12.0 (2025-08-05) + +## 🚀 Highlights + +- This release includes support for [Redis 8.2](https://redis.io/docs/latest/operate/oss_and_stack/stack-with-enterprise/release-notes/redisce/redisos-8.2-release-notes/). +- Introduces an experimental Query Builders for `FTSearch`, `FTAggregate` and other search commands. +- Adds support for `EPSILON` option in `FT.VSIM`. +- Includes bug fixes and improvements contributed by the community related to ring and [redisotel](https://github.com/redis/go-redis/tree/master/extra/redisotel). + +## Changes +- Improve stale issue workflow ([#3458](https://github.com/redis/go-redis/pull/3458)) +- chore(ci): Add 8.2 rc2 pre build for CI ([#3459](https://github.com/redis/go-redis/pull/3459)) +- Added new stream commands ([#3450](https://github.com/redis/go-redis/pull/3450)) +- feat: Add "skip_verify" to Sentinel ([#3428](https://github.com/redis/go-redis/pull/3428)) +- fix: `errors.Join` requires Go 1.20 or later ([#3442](https://github.com/redis/go-redis/pull/3442)) +- DOC-4344 document quickstart examples ([#3426](https://github.com/redis/go-redis/pull/3426)) +- feat(bitop): add support for the new bitop operations ([#3409](https://github.com/redis/go-redis/pull/3409)) + +## 🚀 New Features + +- feat: recover addIdleConn may occur panic ([#2445](https://github.com/redis/go-redis/pull/2445)) +- feat(ring): specify custom health check func via HeartbeatFn option ([#2940](https://github.com/redis/go-redis/pull/2940)) +- Add Query Builder for RediSearch commands ([#3436](https://github.com/redis/go-redis/pull/3436)) +- add configurable buffer sizes for Redis connections ([#3453](https://github.com/redis/go-redis/pull/3453)) +- Add VAMANA vector type to RediSearch ([#3449](https://github.com/redis/go-redis/pull/3449)) +- VSIM add `EPSILON` option ([#3454](https://github.com/redis/go-redis/pull/3454)) +- Add closing support to otel metrics instrumentation ([#3444](https://github.com/redis/go-redis/pull/3444)) + +## 🐛 Bug Fixes + +- fix(redisotel): fix buggy append in reportPoolStats ([#3122](https://github.com/redis/go-redis/pull/3122)) +- fix(search): return results even if doc is empty ([#3457](https://github.com/redis/go-redis/pull/3457)) +- [ISSUE-3402]: Ring.Pipelined return dial timeout error ([#3403](https://github.com/redis/go-redis/pull/3403)) + +## 🧰 Maintenance + +- Merges stale issues jobs into one job with two steps ([#3463](https://github.com/redis/go-redis/pull/3463)) +- improve code readability ([#3446](https://github.com/redis/go-redis/pull/3446)) +- chore(release): 9.12.0-beta.1 ([#3460](https://github.com/redis/go-redis/pull/3460)) +- DOC-5472 time series doc examples ([#3443](https://github.com/redis/go-redis/pull/3443)) +- Add VAMANA compression algorithm tests ([#3461](https://github.com/redis/go-redis/pull/3461)) +- bumped redis 8.2 version used in the CI/CD ([#3451](https://github.com/redis/go-redis/pull/3451)) + +## Contributors +We'd like to thank all the contributors who worked on this release! + +[@andy-stark-redis](https://github.com/andy-stark-redis), [@cxljs](https://github.com/cxljs), [@elena-kolevska](https://github.com/elena-kolevska), [@htemelski-redis](https://github.com/htemelski-redis), [@jouir](https://github.com/jouir), [@monkey92t](https://github.com/monkey92t), [@ndyakov](https://github.com/ndyakov), [@ofekshenawa](https://github.com/ofekshenawa), [@rokn](https://github.com/rokn), [@smnvdev](https://github.com/smnvdev), [@strobil](https://github.com/strobil) and [@wzy9607](https://github.com/wzy9607) + +## New Contributors +* [@htemelski-redis](https://github.com/htemelski-redis) made their first contribution in [#3409](https://github.com/redis/go-redis/pull/3409) +* [@smnvdev](https://github.com/smnvdev) made their first contribution in [#3403](https://github.com/redis/go-redis/pull/3403) +* [@rokn](https://github.com/rokn) made their first contribution in [#3444](https://github.com/redis/go-redis/pull/3444) + +# 9.11.0 (2025-06-24) + +## 🚀 Highlights + +Fixes TxPipeline to work correctly in cluster scenarios, allowing execution of commands +only in the same slot. + +# Changes + +## 🚀 New Features + +- Set cluster slot for `scan` commands, rather than random ([#2623](https://github.com/redis/go-redis/pull/2623)) +- Add CredentialsProvider field to UniversalOptions ([#2927](https://github.com/redis/go-redis/pull/2927)) +- feat(redisotel): add WithCallerEnabled option ([#3415](https://github.com/redis/go-redis/pull/3415)) + +## 🐛 Bug Fixes + +- fix(txpipeline): keyless commands should take the slot of the keyed ([#3411](https://github.com/redis/go-redis/pull/3411)) +- fix(loading): cache the loaded flag for slave nodes ([#3410](https://github.com/redis/go-redis/pull/3410)) +- fix(txpipeline): should return error on multi/exec on multiple slots ([#3408](https://github.com/redis/go-redis/pull/3408)) +- fix: check if the shard exists to avoid returning nil ([#3396](https://github.com/redis/go-redis/pull/3396)) + +## 🧰 Maintenance + +- feat: optimize connection pool waitTurn ([#3412](https://github.com/redis/go-redis/pull/3412)) +- chore(ci): update CI redis builds ([#3407](https://github.com/redis/go-redis/pull/3407)) +- chore: remove a redundant method from `Ring`, `Client` and `ClusterClient` ([#3401](https://github.com/redis/go-redis/pull/3401)) +- test: refactor TestBasicCredentials using table-driven tests ([#3406](https://github.com/redis/go-redis/pull/3406)) +- perf: reduce unnecessary memory allocation operations ([#3399](https://github.com/redis/go-redis/pull/3399)) +- fix: insert entry during iterating over a map ([#3398](https://github.com/redis/go-redis/pull/3398)) +- DOC-5229 probabilistic data type examples ([#3413](https://github.com/redis/go-redis/pull/3413)) +- chore(deps): bump rojopolis/spellcheck-github-actions from 0.49.0 to 0.51.0 ([#3414](https://github.com/redis/go-redis/pull/3414)) + +## Contributors +We'd like to thank all the contributors who worked on this release! + +[@andy-stark-redis](https://github.com/andy-stark-redis), [@boekkooi-impossiblecloud](https://github.com/boekkooi-impossiblecloud), [@cxljs](https://github.com/cxljs), [@dcherubini](https://github.com/dcherubini), [@dependabot[bot]](https://github.com/apps/dependabot), [@iamamirsalehi](https://github.com/iamamirsalehi), [@ndyakov](https://github.com/ndyakov), [@pete-woods](https://github.com/pete-woods), [@twz915](https://github.com/twz915) and [dependabot[bot]](https://github.com/apps/dependabot) + +# 9.10.0 (2025-06-06) + +## 🚀 Highlights + +`go-redis` now supports [vector sets](https://redis.io/docs/latest/develop/data-types/vector-sets/). This data type is marked +as "in preview" in Redis and its support in `go-redis` is marked as experimental. You can find examples in the documentation and +in the `doctests` folder. + +# Changes + +## 🚀 New Features + +- feat: support vectorset ([#3375](https://github.com/redis/go-redis/pull/3375)) + +## 🧰 Maintenance + +- Add the missing NewFloatSliceResult for testing ([#3393](https://github.com/redis/go-redis/pull/3393)) +- DOC-5078 vector set examples ([#3394](https://github.com/redis/go-redis/pull/3394)) + +## Contributors +We'd like to thank all the contributors who worked on this release! + +[@AndBobsYourUncle](https://github.com/AndBobsYourUncle), [@andy-stark-redis](https://github.com/andy-stark-redis), [@fukua95](https://github.com/fukua95) and [@ndyakov](https://github.com/ndyakov) + + + +# 9.9.0 (2025-05-27) + +## 🚀 Highlights +- **Token-based Authentication**: Added `StreamingCredentialsProvider` for dynamic credential updates (experimental) + - Can be used with [go-redis-entraid](https://github.com/redis/go-redis-entraid) for Azure AD authentication +- **Connection Statistics**: Added connection waiting statistics for better monitoring +- **Failover Improvements**: Added `ParseFailoverURL` for easier failover configuration +- **Ring Client Enhancements**: Added shard access methods for better Pub/Sub management + +## ✨ New Features +- Added `StreamingCredentialsProvider` for token-based authentication ([#3320](https://github.com/redis/go-redis/pull/3320)) + - Supports dynamic credential updates + - Includes connection close hooks + - Note: Currently marked as experimental +- Added `ParseFailoverURL` for parsing failover URLs ([#3362](https://github.com/redis/go-redis/pull/3362)) +- Added connection waiting statistics ([#2804](https://github.com/redis/go-redis/pull/2804)) +- Added new utility functions: + - `ParseFloat` and `MustParseFloat` in public utils package ([#3371](https://github.com/redis/go-redis/pull/3371)) + - Unit tests for `Atoi`, `ParseInt`, `ParseUint`, and `ParseFloat` ([#3377](https://github.com/redis/go-redis/pull/3377)) +- Added Ring client shard access methods: + - `GetShardClients()` to retrieve all active shard clients + - `GetShardClientForKey(key string)` to get the shard client for a specific key ([#3388](https://github.com/redis/go-redis/pull/3388)) + +## 🐛 Bug Fixes +- Fixed routing reads to loading slave nodes ([#3370](https://github.com/redis/go-redis/pull/3370)) +- Added support for nil lag in XINFO GROUPS ([#3369](https://github.com/redis/go-redis/pull/3369)) +- Fixed pool acquisition timeout issues ([#3381](https://github.com/redis/go-redis/pull/3381)) +- Optimized unnecessary copy operations ([#3376](https://github.com/redis/go-redis/pull/3376)) + +## 📚 Documentation +- Updated documentation for XINFO GROUPS with nil lag support ([#3369](https://github.com/redis/go-redis/pull/3369)) +- Added package-level comments for new features + +## ⚡ Performance and Reliability +- Optimized `ReplaceSpaces` function ([#3383](https://github.com/redis/go-redis/pull/3383)) +- Set default value for `Options.Protocol` in `init()` ([#3387](https://github.com/redis/go-redis/pull/3387)) +- Exported pool errors for public consumption ([#3380](https://github.com/redis/go-redis/pull/3380)) + +## 🔧 Dependencies and Infrastructure +- Updated Redis CI to version 8.0.1 ([#3372](https://github.com/redis/go-redis/pull/3372)) +- Updated spellcheck GitHub Actions ([#3389](https://github.com/redis/go-redis/pull/3389)) +- Removed unused parameters ([#3382](https://github.com/redis/go-redis/pull/3382), [#3384](https://github.com/redis/go-redis/pull/3384)) + +## 🧪 Testing +- Added unit tests for pool acquisition timeout ([#3381](https://github.com/redis/go-redis/pull/3381)) +- Added unit tests for utility functions ([#3377](https://github.com/redis/go-redis/pull/3377)) + +## 👥 Contributors + +We would like to thank all the contributors who made this release possible: + +[@ndyakov](https://github.com/ndyakov), [@ofekshenawa](https://github.com/ofekshenawa), [@LINKIWI](https://github.com/LINKIWI), [@iamamirsalehi](https://github.com/iamamirsalehi), [@fukua95](https://github.com/fukua95), [@lzakharov](https://github.com/lzakharov), [@DengY11](https://github.com/DengY11) + +## 📝 Changelog + +For a complete list of changes, see the [full changelog](https://github.com/redis/go-redis/compare/v9.8.0...v9.9.0). + +# 9.8.0 (2025-04-30) + +## 🚀 Highlights +- **Redis 8 Support**: Full compatibility with Redis 8.0, including testing and CI integration +- **Enhanced Hash Operations**: Added support for new hash commands (`HGETDEL`, `HGETEX`, `HSETEX`) and `HSTRLEN` command +- **Search Improvements**: Enabled Search DIALECT 2 by default and added `CountOnly` argument for `FT.Search` + +## ✨ New Features +- Added support for new hash commands: `HGETDEL`, `HGETEX`, `HSETEX` ([#3305](https://github.com/redis/go-redis/pull/3305)) +- Added `HSTRLEN` command for hash operations ([#2843](https://github.com/redis/go-redis/pull/2843)) +- Added `Do` method for raw query by single connection from `pool.Conn()` ([#3182](https://github.com/redis/go-redis/pull/3182)) +- Prevent false-positive marshaling by treating zero time.Time as empty in isEmptyValue ([#3273](https://github.com/redis/go-redis/pull/3273)) +- Added FailoverClusterClient support for Universal client ([#2794](https://github.com/redis/go-redis/pull/2794)) +- Added support for cluster mode with `IsClusterMode` config parameter ([#3255](https://github.com/redis/go-redis/pull/3255)) +- Added client name support in `HELLO` RESP handshake ([#3294](https://github.com/redis/go-redis/pull/3294)) +- **Enabled Search DIALECT 2 by default** ([#3213](https://github.com/redis/go-redis/pull/3213)) +- Added read-only option for failover configurations ([#3281](https://github.com/redis/go-redis/pull/3281)) +- Added `CountOnly` argument for `FT.Search` to use `LIMIT 0 0` ([#3338](https://github.com/redis/go-redis/pull/3338)) +- Added `DB` option support in `NewFailoverClusterClient` ([#3342](https://github.com/redis/go-redis/pull/3342)) +- Added `nil` check for the options when creating a client ([#3363](https://github.com/redis/go-redis/pull/3363)) + +## 🐛 Bug Fixes +- Fixed `PubSub` concurrency safety issues ([#3360](https://github.com/redis/go-redis/pull/3360)) +- Fixed panic caused when argument is `nil` ([#3353](https://github.com/redis/go-redis/pull/3353)) +- Improved error handling when fetching master node from sentinels ([#3349](https://github.com/redis/go-redis/pull/3349)) +- Fixed connection pool timeout issues and increased retries ([#3298](https://github.com/redis/go-redis/pull/3298)) +- Fixed context cancellation error leading to connection spikes on Primary instances ([#3190](https://github.com/redis/go-redis/pull/3190)) +- Fixed RedisCluster client to consider `MASTERDOWN` a retriable error ([#3164](https://github.com/redis/go-redis/pull/3164)) +- Fixed tracing to show complete commands instead of truncated versions ([#3290](https://github.com/redis/go-redis/pull/3290)) +- Fixed OpenTelemetry instrumentation to prevent multiple span reporting ([#3168](https://github.com/redis/go-redis/pull/3168)) +- Fixed `FT.Search` Limit argument and added `CountOnly` argument for limit 0 0 ([#3338](https://github.com/redis/go-redis/pull/3338)) +- Fixed missing command in interface ([#3344](https://github.com/redis/go-redis/pull/3344)) +- Fixed slot calculation for `COUNTKEYSINSLOT` command ([#3327](https://github.com/redis/go-redis/pull/3327)) +- Updated PubSub implementation with correct context ([#3329](https://github.com/redis/go-redis/pull/3329)) + +## 📚 Documentation +- Added hash search examples ([#3357](https://github.com/redis/go-redis/pull/3357)) +- Fixed documentation comments ([#3351](https://github.com/redis/go-redis/pull/3351)) +- Added `CountOnly` search example ([#3345](https://github.com/redis/go-redis/pull/3345)) +- Added examples for list commands: `LLEN`, `LPOP`, `LPUSH`, `LRANGE`, `RPOP`, `RPUSH` ([#3234](https://github.com/redis/go-redis/pull/3234)) +- Added `SADD` and `SMEMBERS` command examples ([#3242](https://github.com/redis/go-redis/pull/3242)) +- Updated `README.md` to use Redis Discord guild ([#3331](https://github.com/redis/go-redis/pull/3331)) +- Updated `HExpire` command documentation ([#3355](https://github.com/redis/go-redis/pull/3355)) +- Featured OpenTelemetry instrumentation more prominently ([#3316](https://github.com/redis/go-redis/pull/3316)) +- Updated `README.md` with additional information ([#310ce55](https://github.com/redis/go-redis/commit/310ce55)) + +## ⚡ Performance and Reliability +- Bound connection pool background dials to configured dial timeout ([#3089](https://github.com/redis/go-redis/pull/3089)) +- Ensured context isn't exhausted via concurrent query ([#3334](https://github.com/redis/go-redis/pull/3334)) + +## 🔧 Dependencies and Infrastructure +- Updated testing image to Redis 8.0-RC2 ([#3361](https://github.com/redis/go-redis/pull/3361)) +- Enabled CI for Redis CE 8.0 ([#3274](https://github.com/redis/go-redis/pull/3274)) +- Updated various dependencies: + - Bumped golangci/golangci-lint-action from 6.5.0 to 7.0.0 ([#3354](https://github.com/redis/go-redis/pull/3354)) + - Bumped rojopolis/spellcheck-github-actions ([#3336](https://github.com/redis/go-redis/pull/3336)) + - Bumped golang.org/x/net in example/otel ([#3308](https://github.com/redis/go-redis/pull/3308)) +- Migrated golangci-lint configuration to v2 format ([#3354](https://github.com/redis/go-redis/pull/3354)) + +## ⚠️ Breaking Changes +- **Enabled Search DIALECT 2 by default** ([#3213](https://github.com/redis/go-redis/pull/3213)) +- Dropped RedisGears (Triggers and Functions) support ([#3321](https://github.com/redis/go-redis/pull/3321)) +- Dropped FT.PROFILE command that was never enabled ([#3323](https://github.com/redis/go-redis/pull/3323)) + +## 🔒 Security +- Fixed network error handling on SETINFO (CVE-2025-29923) ([#3295](https://github.com/redis/go-redis/pull/3295)) + +## 🧪 Testing +- Added integration tests for Redis 8 behavior changes in Redis Search ([#3337](https://github.com/redis/go-redis/pull/3337)) +- Added vector types INT8 and UINT8 tests ([#3299](https://github.com/redis/go-redis/pull/3299)) +- Added test codes for search_commands.go ([#3285](https://github.com/redis/go-redis/pull/3285)) +- Fixed example test sorting ([#3292](https://github.com/redis/go-redis/pull/3292)) + +## 👥 Contributors + +We would like to thank all the contributors who made this release possible: + +[@alexander-menshchikov](https://github.com/alexander-menshchikov), [@EXPEbdodla](https://github.com/EXPEbdodla), [@afti](https://github.com/afti), [@dmaier-redislabs](https://github.com/dmaier-redislabs), [@four_leaf_clover](https://github.com/four_leaf_clover), [@alohaglenn](https://github.com/alohaglenn), [@gh73962](https://github.com/gh73962), [@justinmir](https://github.com/justinmir), [@LINKIWI](https://github.com/LINKIWI), [@liushuangbill](https://github.com/liushuangbill), [@golang88](https://github.com/golang88), [@gnpaone](https://github.com/gnpaone), [@ndyakov](https://github.com/ndyakov), [@nikolaydubina](https://github.com/nikolaydubina), [@oleglacto](https://github.com/oleglacto), [@andy-stark-redis](https://github.com/andy-stark-redis), [@rodneyosodo](https://github.com/rodneyosodo), [@dependabot](https://github.com/dependabot), [@rfyiamcool](https://github.com/rfyiamcool), [@frankxjkuang](https://github.com/frankxjkuang), [@fukua95](https://github.com/fukua95), [@soleymani-milad](https://github.com/soleymani-milad), [@ofekshenawa](https://github.com/ofekshenawa), [@khasanovbi](https://github.com/khasanovbi) + + +# Old Changelog +## Unreleased + +### Changed + +* `go-redis` won't skip span creation if the parent spans is not recording. ([#2980](https://github.com/redis/go-redis/issues/2980)) + Users can use the OpenTelemetry sampler to control the sampling behavior. + For instance, you can use the `ParentBased(NeverSample())` sampler from `go.opentelemetry.io/otel/sdk/trace` to keep + a similar behavior (drop orphan spans) of `go-redis` as before. + +## [9.0.5](https://github.com/redis/go-redis/compare/v9.0.4...v9.0.5) (2023-05-29) + + +### Features + +* Add ACL LOG ([#2536](https://github.com/redis/go-redis/issues/2536)) ([31ba855](https://github.com/redis/go-redis/commit/31ba855ddebc38fbcc69a75d9d4fb769417cf602)) +* add field protocol to setupClusterQueryParams ([#2600](https://github.com/redis/go-redis/issues/2600)) ([840c25c](https://github.com/redis/go-redis/commit/840c25cb6f320501886a82a5e75f47b491e46fbe)) +* add protocol option ([#2598](https://github.com/redis/go-redis/issues/2598)) ([3917988](https://github.com/redis/go-redis/commit/391798880cfb915c4660f6c3ba63e0c1a459e2af)) + + + +## [9.0.4](https://github.com/redis/go-redis/compare/v9.0.3...v9.0.4) (2023-05-01) + + +### Bug Fixes + +* reader float parser ([#2513](https://github.com/redis/go-redis/issues/2513)) ([46f2450](https://github.com/redis/go-redis/commit/46f245075e6e3a8bd8471f9ca67ea95fd675e241)) + + +### Features + +* add client info command ([#2483](https://github.com/redis/go-redis/issues/2483)) ([b8c7317](https://github.com/redis/go-redis/commit/b8c7317cc6af444603731f7017c602347c0ba61e)) +* no longer verify HELLO error messages ([#2515](https://github.com/redis/go-redis/issues/2515)) ([7b4f217](https://github.com/redis/go-redis/commit/7b4f2179cb5dba3d3c6b0c6f10db52b837c912c8)) +* read the structure to increase the judgment of the omitempty op… ([#2529](https://github.com/redis/go-redis/issues/2529)) ([37c057b](https://github.com/redis/go-redis/commit/37c057b8e597c5e8a0e372337f6a8ad27f6030af)) + + + +## [9.0.3](https://github.com/redis/go-redis/compare/v9.0.2...v9.0.3) (2023-04-02) + +### New Features + +- feat(scan): scan time.Time sets the default decoding (#2413) +- Add support for CLUSTER LINKS command (#2504) +- Add support for acl dryrun command (#2502) +- Add support for COMMAND GETKEYS & COMMAND GETKEYSANDFLAGS (#2500) +- Add support for LCS Command (#2480) +- Add support for BZMPOP (#2456) +- Adding support for ZMPOP command (#2408) +- Add support for LMPOP (#2440) +- feat: remove pool unused fields (#2438) +- Expiretime and PExpireTime (#2426) +- Implement `FUNCTION` group of commands (#2475) +- feat(zadd): add ZAddLT and ZAddGT (#2429) +- Add: Support for COMMAND LIST command (#2491) +- Add support for BLMPOP (#2442) +- feat: check pipeline.Do to prevent confusion with Exec (#2517) +- Function stats, function kill, fcall and fcall_ro (#2486) +- feat: Add support for CLUSTER SHARDS command (#2507) +- feat(cmd): support for adding byte,bit parameters to the bitpos command (#2498) + +### Fixed + +- fix: eval api cmd.SetFirstKeyPos (#2501) +- fix: limit the number of connections created (#2441) +- fixed #2462 v9 continue support dragonfly, it's Hello command return "NOAUTH Authentication required" error (#2479) +- Fix for internal/hscan/structmap.go:89:23: undefined: reflect.Pointer (#2458) +- fix: group lag can be null (#2448) + +### Maintenance + +- Updating to the latest version of redis (#2508) +- Allowing for running tests on a port other than the fixed 6380 (#2466) +- redis 7.0.8 in tests (#2450) +- docs: Update redisotel example for v9 (#2425) +- chore: update go mod, Upgrade golang.org/x/net version to 0.7.0 (#2476) +- chore: add Chinese translation (#2436) +- chore(deps): bump github.com/bsm/gomega from 1.20.0 to 1.26.0 (#2421) +- chore(deps): bump github.com/bsm/ginkgo/v2 from 2.5.0 to 2.7.0 (#2420) +- chore(deps): bump actions/setup-go from 3 to 4 (#2495) +- docs: add instructions for the HSet api (#2503) +- docs: add reading lag field comment (#2451) +- test: update go mod before testing(go mod tidy) (#2423) +- docs: fix comment typo (#2505) +- test: remove testify (#2463) +- refactor: change ListElementCmd to KeyValuesCmd. (#2443) +- fix(appendArg): appendArg case special type (#2489) + +## [9.0.2](https://github.com/redis/go-redis/compare/v9.0.1...v9.0.2) (2023-02-01) + +### Features + +* upgrade OpenTelemetry, use the new metrics API. ([#2410](https://github.com/redis/go-redis/issues/2410)) ([e29e42c](https://github.com/redis/go-redis/commit/e29e42cde2755ab910d04185025dc43ce6f59c65)) + +## v9 2023-01-30 + +### Breaking + +- Changed Pipelines to not be thread-safe any more. + +### Added + +- Added support for [RESP3](https://github.com/antirez/RESP3/blob/master/spec.md) protocol. It was + contributed by @monkey92t who has done the majority of work in this release. +- Added `ContextTimeoutEnabled` option that controls whether the client respects context timeouts + and deadlines. See + [Redis Timeouts](https://redis.uptrace.dev/guide/go-redis-debugging.html#timeouts) for details. +- Added `ParseClusterURL` to parse URLs into `ClusterOptions`, for example, + `redis://user:password@localhost:6789?dial_timeout=3&read_timeout=6s&addr=localhost:6790&addr=localhost:6791`. +- Added metrics instrumentation using `redisotel.IstrumentMetrics`. See + [documentation](https://redis.uptrace.dev/guide/go-redis-monitoring.html) +- Added `redis.HasErrorPrefix` to help working with errors. + +### Changed + +- Removed asynchronous cancellation based on the context timeout. It was racy in v8 and is + completely gone in v9. +- Reworked hook interface and added `DialHook`. +- Replaced `redisotel.NewTracingHook` with `redisotel.InstrumentTracing`. See + [example](example/otel) and + [documentation](https://redis.uptrace.dev/guide/go-redis-monitoring.html). +- Replaced `*redis.Z` with `redis.Z` since it is small enough to be passed as value without making + an allocation. +- Renamed the option `MaxConnAge` to `ConnMaxLifetime`. +- Renamed the option `IdleTimeout` to `ConnMaxIdleTime`. +- Removed connection reaper in favor of `MaxIdleConns`. +- Removed `WithContext` since `context.Context` can be passed directly as an arg. +- Removed `Pipeline.Close` since there is no real need to explicitly manage pipeline resources and + it can be safely reused via `sync.Pool` etc. `Pipeline.Discard` is still available if you want to + reset commands for some reason. + +### Fixed + +- Improved and fixed pipeline retries. +- As usually, added support for more commands and fixed some bugs. diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/RELEASING.md b/scraper-go/vendor/github.com/redis/go-redis/v9/RELEASING.md new file mode 100644 index 0000000..033ec10 --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/RELEASING.md @@ -0,0 +1,146 @@ +# Releasing + +This document is the runbook for cutting a go-redis release. It is intended +for maintainers with write/tag access to the repository. + +For the format and style of the release notes themselves, see +[.github/RELEASE_NOTES_TEMPLATE.md](./.github/RELEASE_NOTES_TEMPLATE.md). + +## Versioning + +go-redis follows [Semantic Versioning](https://semver.org/): + +- **Patch** (`vX.Y.Z+1`) — bug fixes, no API changes. +- **Minor** (`vX.Y+1.0`) — backwards-compatible new features, deprecations. +- **Major** (`vX+1.0.0`) — breaking changes. Coordinate with the team first. + +Pre-releases use `vX.Y.Z-beta.N` / `vX.Y.Z-rc.N`. + +## Pre-release checklist + +- [ ] Target branch is `master` and CI is green on the latest commit. +- [ ] All PRs intended for this release are merged. +- [ ] There are no open issues in the release milestone (if used). +- [ ] `CHANGELOG` / release notes have been considered; dependabot-only + and doc-only changes are excluded per the template. +- [ ] Confirm the next version number and decide if it's a patch / minor / major. + +## 1. Draft the release notes + +1. Open the draft release auto-generated by + [release-drafter](.github/release-drafter-config.yml) on GitHub. +2. Prepend a new section to [`RELEASE-NOTES.md`](./RELEASE-NOTES.md) using + [`.github/RELEASE_NOTES_TEMPLATE.md`](./.github/RELEASE_NOTES_TEMPLATE.md) + as the format. Keep the file in chronological order (newest first). +3. Pick 3–5 **Highlights** — the most user-facing, impactful changes. +4. Remove dependabot bumps and doc-only typo fixes from the lists. +5. Verify every PR has a contributor attribution and link. +6. Open a PR with just the release-notes change if you want review before + bumping versions, otherwise include it in the release PR below. + +## 2. Bump versions and open the release PR + +Create a release branch from `master`: + +```shell +git checkout master && git pull --ff-only +git checkout -b release/vX.Y.Z +``` + +Run the release script on that branch: + +```shell +TAG=vX.Y.Z ./scripts/release.sh +``` + +What the script does (and explicitly does **not** do): + +- ✅ Validates `TAG` matches the semver regex and isn't already a git tag. +- ✅ Rewrites every `redis/go-redis*` line in every sub-module `go.mod` to + point at the new `TAG`. Trailing `// indirect` markers are preserved. +- ✅ Runs `go mod tidy -compat=1.24` in each sub-module. +- ✅ Updates the return value in [`version.go`](./version.go). +- ❌ Does **not** switch branches (runs in your current branch). +- ❌ Does **not** require a clean working tree (so you can mix it with + release-notes edits in the same branch). +- ❌ Does **not** commit, tag, or push anything. + +Review and commit the changes yourself: + +```shell +git diff # sanity-check the bumps +git add -u +git commit -m "chore: release vX.Y.Z" +git push origin release/vX.Y.Z +``` + +Then on GitHub: + +- [ ] Open a PR from `release/vX.Y.Z` into `master`. +- [ ] Wait for all required CI checks (build, golangci-lint, spellcheck, + doctests, e2e where applicable) to pass. +- [ ] Get at least one maintainer approval. +- [ ] Merge the PR (use a merge commit — the tag will point at the merge SHA). + +## 3. Tag the release + +After the release PR is merged, pull the latest `master` and dry-run the +tagger: + +```shell +git checkout master && git pull --ff-only +TAG=vX.Y.Z ./scripts/tag.sh vX.Y.Z +``` + +The script defaults to **dry-run** and prints the commands it would run. +Verify the output, then apply for real with `-t`: + +```shell +./scripts/tag.sh vX.Y.Z -t +``` + +This creates and pushes: +- The top-level tag `vX.Y.Z`. +- A per-module tag `/vX.Y.Z` for each public sub-module + (skipping `example/*` and `internal/*`). + +## 4. Publish the GitHub release + +1. On GitHub, open the draft release created by release-drafter. +2. Set the tag to `vX.Y.Z` and the target to `master`. +3. Replace the auto-generated body with the curated notes from + `RELEASE-NOTES.md` for this version. +4. For pre-releases, check **"Set as a pre-release"**. +5. Publish. + +## 5. Post-release + +- [ ] Verify the release appears on + [pkg.go.dev](https://pkg.go.dev/github.com/redis/go-redis/v9) within + a few minutes (trigger a fetch by visiting the version URL if needed). +- [ ] Announce on Discord (see the link in `CONTRIBUTING.md`). +- [ ] Close the release milestone if one was used. +- [ ] Open follow-up issues for anything deferred from this release. + +## Hotfix / patch release + +For an urgent fix on top of the latest release: + +1. Branch from the latest release tag: `git checkout -b hotfix/vX.Y.Z+1 vX.Y.Z`. +2. Cherry-pick (or re-apply) only the required fix commits. +3. Follow the normal release flow above with `TAG=vX.Y.Z+1`. +4. Make sure the fix is also present on `master` (forward-port if necessary). + +## Troubleshooting + +- **`release.sh` fails with "tag already exists"** — the tag has already + been created. Pick the next version, or delete the local tag first if + it was created by mistake. +- **`tag.sh` reports version mismatch in a `go.mod`** — a sub-module was + not updated by `release.sh`. Fix the `go.mod` manually (or re-run + `release.sh`), amend the release PR, and re-run the tagger. +- **`version.go` does not contain the tag** — `release.sh` did not run or + the bump was reverted. Re-run `release.sh` on the release branch. +- **pkg.go.dev does not show the new version** — visit + `https://pkg.go.dev/github.com/redis/go-redis/v9@vX.Y.Z` once to trigger + a fetch from the module proxy. diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/acl_commands.go b/scraper-go/vendor/github.com/redis/go-redis/v9/acl_commands.go new file mode 100644 index 0000000..0a8a195 --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/acl_commands.go @@ -0,0 +1,116 @@ +package redis + +import "context" + +type ACLCmdable interface { + ACLDryRun(ctx context.Context, username string, command ...interface{}) *StringCmd + + ACLLog(ctx context.Context, count int64) *ACLLogCmd + ACLLogReset(ctx context.Context) *StatusCmd + + ACLGenPass(ctx context.Context, bit int) *StringCmd + + ACLSetUser(ctx context.Context, username string, rules ...string) *StatusCmd + ACLDelUser(ctx context.Context, username string) *IntCmd + ACLUsers(ctx context.Context) *StringSliceCmd + ACLWhoAmI(ctx context.Context) *StringCmd + ACLList(ctx context.Context) *StringSliceCmd + + ACLCat(ctx context.Context) *StringSliceCmd + ACLCatArgs(ctx context.Context, options *ACLCatArgs) *StringSliceCmd +} + +type ACLCatArgs struct { + Category string +} + +func (c cmdable) ACLDryRun(ctx context.Context, username string, command ...interface{}) *StringCmd { + args := make([]interface{}, 0, 3+len(command)) + args = append(args, "acl", "dryrun", username) + args = append(args, command...) + cmd := NewStringCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ACLLog(ctx context.Context, count int64) *ACLLogCmd { + args := make([]interface{}, 0, 3) + args = append(args, "acl", "log") + if count > 0 { + args = append(args, count) + } + cmd := NewACLLogCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ACLLogReset(ctx context.Context) *StatusCmd { + cmd := NewStatusCmd(ctx, "acl", "log", "reset") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ACLDelUser(ctx context.Context, username string) *IntCmd { + cmd := NewIntCmd(ctx, "acl", "deluser", username) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ACLSetUser(ctx context.Context, username string, rules ...string) *StatusCmd { + args := make([]interface{}, 3+len(rules)) + args[0] = "acl" + args[1] = "setuser" + args[2] = username + for i, rule := range rules { + args[i+3] = rule + } + cmd := NewStatusCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ACLGenPass(ctx context.Context, bit int) *StringCmd { + args := make([]interface{}, 0, 3) + args = append(args, "acl", "genpass") + if bit > 0 { + args = append(args, bit) + } + cmd := NewStringCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ACLUsers(ctx context.Context) *StringSliceCmd { + cmd := NewStringSliceCmd(ctx, "acl", "users") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ACLWhoAmI(ctx context.Context) *StringCmd { + cmd := NewStringCmd(ctx, "acl", "whoami") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ACLList(ctx context.Context) *StringSliceCmd { + cmd := NewStringSliceCmd(ctx, "acl", "list") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ACLCat(ctx context.Context) *StringSliceCmd { + cmd := NewStringSliceCmd(ctx, "acl", "cat") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ACLCatArgs(ctx context.Context, options *ACLCatArgs) *StringSliceCmd { + // if there is a category passed, build new cmd, if there isn't - use the ACLCat method + if options != nil && options.Category != "" { + cmd := NewStringSliceCmd(ctx, "acl", "cat", options.Category) + _ = c(ctx, cmd) + return cmd + } + + return c.ACLCat(ctx) +} diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/adapters.go b/scraper-go/vendor/github.com/redis/go-redis/v9/adapters.go new file mode 100644 index 0000000..952a4c2 --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/adapters.go @@ -0,0 +1,118 @@ +package redis + +import ( + "context" + "errors" + "net" + "time" + + "github.com/redis/go-redis/v9/internal/interfaces" + "github.com/redis/go-redis/v9/push" +) + +// ErrInvalidCommand is returned when an invalid command is passed to ExecuteCommand. +var ErrInvalidCommand = errors.New("invalid command type") + +// ErrInvalidPool is returned when the pool type is not supported. +var ErrInvalidPool = errors.New("invalid pool type") + +// newClientAdapter creates a new client adapter for regular Redis clients. +func newClientAdapter(client *baseClient) interfaces.ClientInterface { + return &clientAdapter{client: client} +} + +// clientAdapter adapts a Redis client to implement interfaces.ClientInterface. +type clientAdapter struct { + client *baseClient +} + +// GetOptions returns the client options. +func (ca *clientAdapter) GetOptions() interfaces.OptionsInterface { + return &optionsAdapter{options: ca.client.opt} +} + +// GetPushProcessor returns the client's push notification processor. +func (ca *clientAdapter) GetPushProcessor() interfaces.NotificationProcessor { + return &pushProcessorAdapter{processor: ca.client.pushProcessor} +} + +// optionsAdapter adapts Redis options to implement interfaces.OptionsInterface. +type optionsAdapter struct { + options *Options +} + +// GetReadTimeout returns the read timeout. +func (oa *optionsAdapter) GetReadTimeout() time.Duration { + return oa.options.ReadTimeout +} + +// GetWriteTimeout returns the write timeout. +func (oa *optionsAdapter) GetWriteTimeout() time.Duration { + return oa.options.WriteTimeout +} + +// GetNetwork returns the network type. +func (oa *optionsAdapter) GetNetwork() string { + return oa.options.Network +} + +// GetAddr returns the connection address. +func (oa *optionsAdapter) GetAddr() string { + return oa.options.Addr +} + +// GetNodeAddress returns the address of the Redis node as reported by the server. +// For cluster clients, this is the endpoint from CLUSTER SLOTS before any transformation. +// For standalone clients, this defaults to Addr. +func (oa *optionsAdapter) GetNodeAddress() string { + return oa.options.NodeAddress +} + +// IsTLSEnabled returns true if TLS is enabled. +func (oa *optionsAdapter) IsTLSEnabled() bool { + return oa.options.TLSConfig != nil +} + +// GetProtocol returns the protocol version. +func (oa *optionsAdapter) GetProtocol() int { + return oa.options.Protocol +} + +// GetPoolSize returns the connection pool size. +func (oa *optionsAdapter) GetPoolSize() int { + return oa.options.PoolSize +} + +// NewDialer returns a new dialer function for the connection. +func (oa *optionsAdapter) NewDialer() func(context.Context) (net.Conn, error) { + baseDialer := oa.options.NewDialer() + return func(ctx context.Context) (net.Conn, error) { + // Extract network and address from the options + network := oa.options.Network + addr := oa.options.Addr + return baseDialer(ctx, network, addr) + } +} + +// pushProcessorAdapter adapts a push.NotificationProcessor to implement interfaces.NotificationProcessor. +type pushProcessorAdapter struct { + processor push.NotificationProcessor +} + +// RegisterHandler registers a handler for a specific push notification name. +func (ppa *pushProcessorAdapter) RegisterHandler(pushNotificationName string, handler interface{}, protected bool) error { + if pushHandler, ok := handler.(push.NotificationHandler); ok { + return ppa.processor.RegisterHandler(pushNotificationName, pushHandler, protected) + } + return errors.New("handler must implement push.NotificationHandler") +} + +// UnregisterHandler removes a handler for a specific push notification name. +func (ppa *pushProcessorAdapter) UnregisterHandler(pushNotificationName string) error { + return ppa.processor.UnregisterHandler(pushNotificationName) +} + +// GetHandler returns the handler for a specific push notification name. +func (ppa *pushProcessorAdapter) GetHandler(pushNotificationName string) interface{} { + return ppa.processor.GetHandler(pushNotificationName) +} diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/auth/auth.go b/scraper-go/vendor/github.com/redis/go-redis/v9/auth/auth.go new file mode 100644 index 0000000..21667a1 --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/auth/auth.go @@ -0,0 +1,79 @@ +// Package auth package provides authentication-related interfaces and types. +// It also includes a basic implementation of credentials using username and password. +package auth + +// StreamingCredentialsProvider is an interface that defines the methods for a streaming credentials provider. +// It is used to provide credentials for authentication. +// The CredentialsListener is used to receive updates when the credentials change. +type StreamingCredentialsProvider interface { + // Subscribe subscribes to the credentials provider for updates. + // It returns the current credentials, a cancel function to unsubscribe from the provider, + // and an error if any. + // + // Implementations MUST be idempotent with respect to listener identity: + // subscribing the same listener value more than once must not produce + // duplicate notifications and must not create multiple independent + // subscriptions that each need to be cancelled separately. Every + // UnsubscribeFunc returned for a given listener must cancel that + // listener's subscription; calling any one of them must be sufficient to + // stop updates to that listener, and calling subsequent ones must be a + // safe no-op. Callers (including go-redis internals) may retain only + // the most recently returned UnsubscribeFunc and rely on it to fully + // unsubscribe the listener. + // + // TODO(ndyakov): Should we add context to the Subscribe method? + Subscribe(listener CredentialsListener) (Credentials, UnsubscribeFunc, error) +} + +// UnsubscribeFunc is a function that is used to cancel the subscription to the credentials provider. +// It is used to unsubscribe from the provider when the credentials are no longer needed. +// +// Per the StreamingCredentialsProvider.Subscribe contract, if the same +// listener is subscribed multiple times, every UnsubscribeFunc returned for +// that listener must fully unsubscribe it on first invocation, and +// subsequent invocations (from any of the equivalent UnsubscribeFuncs) must +// be a safe no-op. +type UnsubscribeFunc func() error + +// CredentialsListener is an interface that defines the methods for a credentials listener. +// It is used to receive updates when the credentials change. +// The OnNext method is called when the credentials change. +// The OnError method is called when an error occurs while requesting the credentials. +type CredentialsListener interface { + OnNext(credentials Credentials) + OnError(err error) +} + +// Credentials is an interface that defines the methods for credentials. +// It is used to provide the credentials for authentication. +type Credentials interface { + // BasicAuth returns the username and password for basic authentication. + BasicAuth() (username string, password string) + // RawCredentials returns the raw credentials as a string. + // This can be used to extract the username and password from the raw credentials or + // additional information if present in the token. + RawCredentials() string +} + +type basicAuth struct { + username string + password string +} + +// RawCredentials returns the raw credentials as a string. +func (b *basicAuth) RawCredentials() string { + return b.username + ":" + b.password +} + +// BasicAuth returns the username and password for basic authentication. +func (b *basicAuth) BasicAuth() (username string, password string) { + return b.username, b.password +} + +// NewBasicCredentials creates a new Credentials object from the given username and password. +func NewBasicCredentials(username, password string) Credentials { + return &basicAuth{ + username: username, + password: password, + } +} diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/auth/reauth_credentials_listener.go b/scraper-go/vendor/github.com/redis/go-redis/v9/auth/reauth_credentials_listener.go new file mode 100644 index 0000000..40076a0 --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/auth/reauth_credentials_listener.go @@ -0,0 +1,47 @@ +package auth + +// ReAuthCredentialsListener is a struct that implements the CredentialsListener interface. +// It is used to re-authenticate the credentials when they are updated. +// It contains: +// - reAuth: a function that takes the new credentials and returns an error if any. +// - onErr: a function that takes an error and handles it. +type ReAuthCredentialsListener struct { + reAuth func(credentials Credentials) error + onErr func(err error) +} + +// OnNext is called when the credentials are updated. +// It calls the reAuth function with the new credentials. +// If the reAuth function returns an error, it calls the onErr function with the error. +func (c *ReAuthCredentialsListener) OnNext(credentials Credentials) { + if c.reAuth == nil { + return + } + + err := c.reAuth(credentials) + if err != nil { + c.OnError(err) + } +} + +// OnError is called when an error occurs. +// It can be called from both the credentials provider and the reAuth function. +func (c *ReAuthCredentialsListener) OnError(err error) { + if c.onErr == nil { + return + } + + c.onErr(err) +} + +// NewReAuthCredentialsListener creates a new ReAuthCredentialsListener. +// Implements the auth.CredentialsListener interface. +func NewReAuthCredentialsListener(reAuth func(credentials Credentials) error, onErr func(err error)) *ReAuthCredentialsListener { + return &ReAuthCredentialsListener{ + reAuth: reAuth, + onErr: onErr, + } +} + +// Ensure ReAuthCredentialsListener implements the CredentialsListener interface. +var _ CredentialsListener = (*ReAuthCredentialsListener)(nil) diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/bitmap_commands.go b/scraper-go/vendor/github.com/redis/go-redis/v9/bitmap_commands.go new file mode 100644 index 0000000..86aa9b7 --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/bitmap_commands.go @@ -0,0 +1,197 @@ +package redis + +import ( + "context" + "errors" +) + +type BitMapCmdable interface { + GetBit(ctx context.Context, key string, offset int64) *IntCmd + SetBit(ctx context.Context, key string, offset int64, value int) *IntCmd + BitCount(ctx context.Context, key string, bitCount *BitCount) *IntCmd + BitOpAnd(ctx context.Context, destKey string, keys ...string) *IntCmd + BitOpOr(ctx context.Context, destKey string, keys ...string) *IntCmd + BitOpXor(ctx context.Context, destKey string, keys ...string) *IntCmd + BitOpDiff(ctx context.Context, destKey string, keys ...string) *IntCmd + BitOpDiff1(ctx context.Context, destKey string, keys ...string) *IntCmd + BitOpAndOr(ctx context.Context, destKey string, keys ...string) *IntCmd + BitOpOne(ctx context.Context, destKey string, keys ...string) *IntCmd + BitOpNot(ctx context.Context, destKey string, key string) *IntCmd + BitPos(ctx context.Context, key string, bit int64, pos ...int64) *IntCmd + BitPosSpan(ctx context.Context, key string, bit int8, start, end int64, span string) *IntCmd + BitField(ctx context.Context, key string, values ...interface{}) *IntSliceCmd + BitFieldRO(ctx context.Context, key string, values ...interface{}) *IntSliceCmd +} + +func (c cmdable) GetBit(ctx context.Context, key string, offset int64) *IntCmd { + cmd := NewIntCmd(ctx, "getbit", key, offset) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) SetBit(ctx context.Context, key string, offset int64, value int) *IntCmd { + cmd := NewIntCmd( + ctx, + "setbit", + key, + offset, + value, + ) + _ = c(ctx, cmd) + return cmd +} + +type BitCount struct { + Start, End int64 + Unit string // BYTE(default) | BIT +} + +const BitCountIndexByte string = "BYTE" +const BitCountIndexBit string = "BIT" + +func (c cmdable) BitCount(ctx context.Context, key string, bitCount *BitCount) *IntCmd { + args := make([]any, 2, 5) + args[0] = "bitcount" + args[1] = key + if bitCount != nil { + args = append(args, bitCount.Start, bitCount.End) + if bitCount.Unit != "" { + if bitCount.Unit != BitCountIndexByte && bitCount.Unit != BitCountIndexBit { + cmd := NewIntCmd(ctx) + cmd.SetErr(errors.New("redis: invalid bitcount index")) + return cmd + } + args = append(args, bitCount.Unit) + } + } + cmd := NewIntCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) bitOp(ctx context.Context, op, destKey string, keys ...string) *IntCmd { + args := make([]interface{}, 3+len(keys)) + args[0] = "bitop" + args[1] = op + args[2] = destKey + for i, key := range keys { + args[3+i] = key + } + cmd := NewIntCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +// BitOpAnd creates a new bitmap in which users are members of all given bitmaps +func (c cmdable) BitOpAnd(ctx context.Context, destKey string, keys ...string) *IntCmd { + return c.bitOp(ctx, "and", destKey, keys...) +} + +// BitOpOr creates a new bitmap in which users are member of at least one given bitmap +func (c cmdable) BitOpOr(ctx context.Context, destKey string, keys ...string) *IntCmd { + return c.bitOp(ctx, "or", destKey, keys...) +} + +// BitOpXor creates a new bitmap in which users are the result of XORing all given bitmaps +func (c cmdable) BitOpXor(ctx context.Context, destKey string, keys ...string) *IntCmd { + return c.bitOp(ctx, "xor", destKey, keys...) +} + +// BitOpNot creates a new bitmap in which users are not members of a given bitmap +func (c cmdable) BitOpNot(ctx context.Context, destKey string, key string) *IntCmd { + return c.bitOp(ctx, "not", destKey, key) +} + +// BitOpDiff creates a new bitmap in which users are members of bitmap X but not of any of bitmaps Y1, Y2, … +// Introduced with Redis 8.2 +func (c cmdable) BitOpDiff(ctx context.Context, destKey string, keys ...string) *IntCmd { + return c.bitOp(ctx, "diff", destKey, keys...) +} + +// BitOpDiff1 creates a new bitmap in which users are members of one or more of bitmaps Y1, Y2, … but not members of bitmap X +// Introduced with Redis 8.2 +func (c cmdable) BitOpDiff1(ctx context.Context, destKey string, keys ...string) *IntCmd { + return c.bitOp(ctx, "diff1", destKey, keys...) +} + +// BitOpAndOr creates a new bitmap in which users are members of bitmap X and also members of one or more of bitmaps Y1, Y2, … +// Introduced with Redis 8.2 +func (c cmdable) BitOpAndOr(ctx context.Context, destKey string, keys ...string) *IntCmd { + return c.bitOp(ctx, "andor", destKey, keys...) +} + +// BitOpOne creates a new bitmap in which users are members of exactly one of the given bitmaps +// Introduced with Redis 8.2 +func (c cmdable) BitOpOne(ctx context.Context, destKey string, keys ...string) *IntCmd { + return c.bitOp(ctx, "one", destKey, keys...) +} + +// BitPos is an API before Redis version 7.0, cmd: bitpos key bit start end +// if you need the `byte | bit` parameter, please use `BitPosSpan`. +func (c cmdable) BitPos(ctx context.Context, key string, bit int64, pos ...int64) *IntCmd { + args := make([]interface{}, 3+len(pos)) + args[0] = "bitpos" + args[1] = key + args[2] = bit + switch len(pos) { + case 0: + case 1: + args[3] = pos[0] + case 2: + args[3] = pos[0] + args[4] = pos[1] + default: + cmd := NewIntCmd(ctx) + cmd.SetErr(errors.New("too many arguments")) + return cmd + } + cmd := NewIntCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +// BitPosSpan supports the `byte | bit` parameters in redis version 7.0, +// the bitpos command defaults to using byte type for the `start-end` range, +// which means it counts in bytes from start to end. you can set the value +// of "span" to determine the type of `start-end`. +// span = "bit", cmd: bitpos key bit start end bit +// span = "byte", cmd: bitpos key bit start end byte +func (c cmdable) BitPosSpan(ctx context.Context, key string, bit int8, start, end int64, span string) *IntCmd { + cmd := NewIntCmd(ctx, "bitpos", key, bit, start, end, span) + _ = c(ctx, cmd) + return cmd +} + +// BitField accepts multiple values: +// - BitField("set", "i1", "offset1", "value1","cmd2", "type2", "offset2", "value2") +// - BitField([]string{"cmd1", "type1", "offset1", "value1","cmd2", "type2", "offset2", "value2"}) +// - BitField([]interface{}{"cmd1", "type1", "offset1", "value1","cmd2", "type2", "offset2", "value2"}) +func (c cmdable) BitField(ctx context.Context, key string, values ...interface{}) *IntSliceCmd { + args := make([]interface{}, 2, 2+len(values)) + args[0] = "bitfield" + args[1] = key + args = appendArgs(args, values) + cmd := NewIntSliceCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +// BitFieldRO - Read-only variant of the BITFIELD command. +// It is like the original BITFIELD but only accepts GET subcommand and can safely be used in read-only replicas. +// - BitFieldRO(ctx, key, "", "", "","") +func (c cmdable) BitFieldRO(ctx context.Context, key string, values ...interface{}) *IntSliceCmd { + args := make([]interface{}, 2, 2+len(values)) + args[0] = "BITFIELD_RO" + args[1] = key + if len(values)%2 != 0 { + c := NewIntSliceCmd(ctx) + c.SetErr(errors.New("BitFieldRO: invalid number of arguments, must be even")) + return c + } + for i := 0; i < len(values); i += 2 { + args = append(args, "GET", values[i], values[i+1]) + } + cmd := NewIntSliceCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/cluster_commands.go b/scraper-go/vendor/github.com/redis/go-redis/v9/cluster_commands.go new file mode 100644 index 0000000..a02683f --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/cluster_commands.go @@ -0,0 +1,205 @@ +package redis + +import "context" + +type ClusterCmdable interface { + ClusterMyShardID(ctx context.Context) *StringCmd + ClusterMyID(ctx context.Context) *StringCmd + ClusterSlots(ctx context.Context) *ClusterSlotsCmd + ClusterShards(ctx context.Context) *ClusterShardsCmd + ClusterLinks(ctx context.Context) *ClusterLinksCmd + ClusterNodes(ctx context.Context) *StringCmd + ClusterMeet(ctx context.Context, host, port string) *StatusCmd + ClusterForget(ctx context.Context, nodeID string) *StatusCmd + ClusterReplicate(ctx context.Context, nodeID string) *StatusCmd + ClusterResetSoft(ctx context.Context) *StatusCmd + ClusterResetHard(ctx context.Context) *StatusCmd + ClusterInfo(ctx context.Context) *StringCmd + ClusterKeySlot(ctx context.Context, key string) *IntCmd + ClusterGetKeysInSlot(ctx context.Context, slot int, count int) *StringSliceCmd + ClusterCountFailureReports(ctx context.Context, nodeID string) *IntCmd + ClusterCountKeysInSlot(ctx context.Context, slot int) *IntCmd + ClusterDelSlots(ctx context.Context, slots ...int) *StatusCmd + ClusterDelSlotsRange(ctx context.Context, min, max int) *StatusCmd + ClusterSaveConfig(ctx context.Context) *StatusCmd + ClusterSlaves(ctx context.Context, nodeID string) *StringSliceCmd + ClusterFailover(ctx context.Context) *StatusCmd + ClusterAddSlots(ctx context.Context, slots ...int) *StatusCmd + ClusterAddSlotsRange(ctx context.Context, min, max int) *StatusCmd + ReadOnly(ctx context.Context) *StatusCmd + ReadWrite(ctx context.Context) *StatusCmd +} + +func (c cmdable) ClusterMyShardID(ctx context.Context) *StringCmd { + cmd := NewStringCmd(ctx, "cluster", "myshardid") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterMyID(ctx context.Context) *StringCmd { + cmd := NewStringCmd(ctx, "cluster", "myid") + _ = c(ctx, cmd) + return cmd +} + +// ClusterSlots returns the mapping of cluster slots to nodes. +// +// Deprecated: Use ClusterShards instead as of Redis 7.0.0. +func (c cmdable) ClusterSlots(ctx context.Context) *ClusterSlotsCmd { + cmd := NewClusterSlotsCmd(ctx, "cluster", "slots") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterShards(ctx context.Context) *ClusterShardsCmd { + cmd := NewClusterShardsCmd(ctx, "cluster", "shards") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterLinks(ctx context.Context) *ClusterLinksCmd { + cmd := NewClusterLinksCmd(ctx, "cluster", "links") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterNodes(ctx context.Context) *StringCmd { + cmd := NewStringCmd(ctx, "cluster", "nodes") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterMeet(ctx context.Context, host, port string) *StatusCmd { + cmd := NewStatusCmd(ctx, "cluster", "meet", host, port) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterForget(ctx context.Context, nodeID string) *StatusCmd { + cmd := NewStatusCmd(ctx, "cluster", "forget", nodeID) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterReplicate(ctx context.Context, nodeID string) *StatusCmd { + cmd := NewStatusCmd(ctx, "cluster", "replicate", nodeID) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterResetSoft(ctx context.Context) *StatusCmd { + cmd := NewStatusCmd(ctx, "cluster", "reset", "soft") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterResetHard(ctx context.Context) *StatusCmd { + cmd := NewStatusCmd(ctx, "cluster", "reset", "hard") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterInfo(ctx context.Context) *StringCmd { + cmd := NewStringCmd(ctx, "cluster", "info") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterKeySlot(ctx context.Context, key string) *IntCmd { + cmd := NewIntCmd(ctx, "cluster", "keyslot", key) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterGetKeysInSlot(ctx context.Context, slot int, count int) *StringSliceCmd { + cmd := NewStringSliceCmd(ctx, "cluster", "getkeysinslot", slot, count) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterCountFailureReports(ctx context.Context, nodeID string) *IntCmd { + cmd := NewIntCmd(ctx, "cluster", "count-failure-reports", nodeID) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterCountKeysInSlot(ctx context.Context, slot int) *IntCmd { + cmd := NewIntCmd(ctx, "cluster", "countkeysinslot", slot) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterDelSlots(ctx context.Context, slots ...int) *StatusCmd { + args := make([]interface{}, 2+len(slots)) + args[0] = "cluster" + args[1] = "delslots" + for i, slot := range slots { + args[2+i] = slot + } + cmd := NewStatusCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterDelSlotsRange(ctx context.Context, min, max int) *StatusCmd { + size := max - min + 1 + slots := make([]int, size) + for i := 0; i < size; i++ { + slots[i] = min + i + } + return c.ClusterDelSlots(ctx, slots...) +} + +func (c cmdable) ClusterSaveConfig(ctx context.Context) *StatusCmd { + cmd := NewStatusCmd(ctx, "cluster", "saveconfig") + _ = c(ctx, cmd) + return cmd +} + +// ClusterSlaves lists the replica nodes of a master node. +// +// Deprecated: Use ClusterReplicas instead as of Redis 5.0.0. +func (c cmdable) ClusterSlaves(ctx context.Context, nodeID string) *StringSliceCmd { + cmd := NewStringSliceCmd(ctx, "cluster", "slaves", nodeID) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterFailover(ctx context.Context) *StatusCmd { + cmd := NewStatusCmd(ctx, "cluster", "failover") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterAddSlots(ctx context.Context, slots ...int) *StatusCmd { + args := make([]interface{}, 2+len(slots)) + args[0] = "cluster" + args[1] = "addslots" + for i, num := range slots { + args[2+i] = num + } + cmd := NewStatusCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClusterAddSlotsRange(ctx context.Context, min, max int) *StatusCmd { + size := max - min + 1 + slots := make([]int, size) + for i := 0; i < size; i++ { + slots[i] = min + i + } + return c.ClusterAddSlots(ctx, slots...) +} + +func (c cmdable) ReadOnly(ctx context.Context) *StatusCmd { + cmd := NewStatusCmd(ctx, "readonly") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ReadWrite(ctx context.Context) *StatusCmd { + cmd := NewStatusCmd(ctx, "readwrite") + _ = c(ctx, cmd) + return cmd +} diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/command.go b/scraper-go/vendor/github.com/redis/go-redis/v9/command.go new file mode 100644 index 0000000..8931f81 --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/command.go @@ -0,0 +1,8433 @@ +package redis + +import ( + "bufio" + "context" + "fmt" + "io" + "maps" + "net" + "regexp" + "strconv" + "strings" + "sync" + "time" + + "github.com/redis/go-redis/v9/internal" + "github.com/redis/go-redis/v9/internal/hscan" + "github.com/redis/go-redis/v9/internal/proto" + "github.com/redis/go-redis/v9/internal/routing" + "github.com/redis/go-redis/v9/internal/util" +) + +// keylessCommands contains Redis commands that have empty key specifications (9th slot empty) +// Only includes core Redis commands, excludes FT.*, ts.*, timeseries.*, search.* and subcommands +var keylessCommands = map[string]struct{}{ + "acl": {}, + "asking": {}, + "auth": {}, + "bgrewriteaof": {}, + "bgsave": {}, + "client": {}, + "cluster": {}, + "config": {}, + "debug": {}, + "discard": {}, + "echo": {}, + "exec": {}, + "failover": {}, + "function": {}, + "hello": {}, + "hotkeys": {}, + "latency": {}, + "lolwut": {}, + "module": {}, + "monitor": {}, + "multi": {}, + "pfselftest": {}, + "ping": {}, + "psubscribe": {}, + "psync": {}, + "publish": {}, + "pubsub": {}, + "punsubscribe": {}, + "quit": {}, + "readonly": {}, + "readwrite": {}, + "replconf": {}, + "replicaof": {}, + "role": {}, + "save": {}, + "script": {}, + "select": {}, + "shutdown": {}, + "slaveof": {}, + "slowlog": {}, + "subscribe": {}, + "swapdb": {}, + "sync": {}, + "time": {}, + "unsubscribe": {}, + "unwatch": {}, + "wait": {}, +} + +// CmdTyper interface for getting command type +type CmdTyper interface { + GetCmdType() CmdType +} + +// CmdTypeGetter interface for getting command type without circular imports +type CmdTypeGetter interface { + GetCmdType() CmdType +} + +type CmdType uint8 + +const ( + CmdTypeGeneric CmdType = iota + CmdTypeString + CmdTypeInt + CmdTypeBool + CmdTypeFloat + CmdTypeStringSlice + CmdTypeIntSlice + CmdTypeFloatSlice + CmdTypeBoolSlice + CmdTypeMapStringString + CmdTypeMapStringInt + CmdTypeMapStringInterface + CmdTypeMapStringInterfaceSlice + CmdTypeSlice + CmdTypeStatus + CmdTypeDuration + CmdTypeTime + CmdTypeKeyValueSlice + CmdTypeStringStructMap + CmdTypeXMessageSlice + CmdTypeXStreamSlice + CmdTypeXPending + CmdTypeXPendingExt + CmdTypeXAutoClaim + CmdTypeXAutoClaimJustID + CmdTypeXInfoConsumers + CmdTypeXInfoGroups + CmdTypeXInfoStream + CmdTypeXInfoStreamFull + CmdTypeZSlice + CmdTypeZWithKey + CmdTypeScan + CmdTypeClusterSlots + CmdTypeGeoLocation + CmdTypeGeoSearchLocation + CmdTypeGeoPos + CmdTypeCommandsInfo + CmdTypeSlowLog + CmdTypeMapStringStringSlice + CmdTypeMapMapStringInterface + CmdTypeKeyValues + CmdTypeZSliceWithKey + CmdTypeFunctionList + CmdTypeFunctionStats + CmdTypeLCS + CmdTypeKeyFlags + CmdTypeClusterLinks + CmdTypeClusterShards + CmdTypeRankWithScore + CmdTypeClientInfo + CmdTypeACLLog + CmdTypeInfo + CmdTypeMonitor + CmdTypeJSON + CmdTypeJSONSlice + CmdTypeIntPointerSlice + CmdTypeScanDump + CmdTypeBFInfo + CmdTypeCFInfo + CmdTypeCMSInfo + CmdTypeTopKInfo + CmdTypeTDigestInfo + CmdTypeFTSynDump + CmdTypeAggregate + CmdTypeFTInfo + CmdTypeFTSpellCheck + CmdTypeFTSearch + CmdTypeTSTimestampValue + CmdTypeTSTimestampValueSlice + CmdTypeHotKeys +) + +type ( + CmdTypeXAutoClaimValue struct { + messages []XMessage + start string + } + + CmdTypeXAutoClaimJustIDValue struct { + ids []string + start string + } + + CmdTypeScanValue struct { + keys []string + cursor uint64 + } + + CmdTypeKeyValuesValue struct { + key string + values []string + } + + CmdTypeZSliceWithKeyValue struct { + key string + zSlice []Z + } +) + +type Cmder interface { + // command name. + // e.g. "set k v ex 10" -> "set", "cluster info" -> "cluster". + Name() string + + // full command name. + // e.g. "set k v ex 10" -> "set", "cluster info" -> "cluster info". + FullName() string + + // all args of the command. + // e.g. "set k v ex 10" -> "[set k v ex 10]". + Args() []interface{} + + // format request and response string. + // e.g. "set k v ex 10" -> "set k v ex 10: OK", "get k" -> "get k: v". + String() string + + // Clone creates a copy of the command. + Clone() Cmder + + stringArg(int) string + firstKeyPos() int8 + SetFirstKeyPos(int8) + stepCount() int8 + SetStepCount(int8) + + readTimeout() *time.Duration + readReply(rd *proto.Reader) error + readRawReply(rd *proto.Reader) error + SetErr(error) + Err() error + + // NoRetry returns true if the command should not be retried on failure. + // Commands that write directly to an io.Writer should return true since + // partial writes cannot be undone on retry. + NoRetry() bool + + // GetCmdType returns the command type for fast value extraction + GetCmdType() CmdType +} + +func setCmdsErr(cmds []Cmder, e error) { + for _, cmd := range cmds { + if cmd.Err() == nil { + cmd.SetErr(e) + } + } +} + +func cmdsFirstErr(cmds []Cmder) error { + for _, cmd := range cmds { + if err := cmd.Err(); err != nil { + return err + } + } + return nil +} + +// cmdsContainNoRetry returns true if any command in the slice has NoRetry() == true. +// If a pipeline contains a non-retryable command (e.g., RawWriteToCmd), the entire +// pipeline must not be retried to prevent data corruption from partial writes. +func cmdsContainNoRetry(cmds []Cmder) bool { + for _, cmd := range cmds { + if cmd.NoRetry() { + return true + } + } + return false +} + +func writeCmds(wr *proto.Writer, cmds []Cmder) error { + for _, cmd := range cmds { + if err := writeCmd(wr, cmd); err != nil { + return err + } + } + return nil +} + +func writeCmd(wr *proto.Writer, cmd Cmder) error { + return wr.WriteArgs(cmd.Args()) +} + +// cmdFirstKeyPos returns the position of the first key in the command's arguments. +// If the command does not have a key, it returns 0. +// TODO: Use the data in CommandInfo to determine the first key position. +func cmdFirstKeyPos(cmd Cmder) int { + if pos := cmd.firstKeyPos(); pos != 0 { + return int(pos) + } + + name := cmd.Name() + + // first check if the command is keyless + if _, ok := keylessCommands[name]; ok { + return 0 + } + + switch name { + case "eval", "evalsha", "eval_ro", "evalsha_ro": + if cmd.stringArg(2) != "0" { + return 3 + } + + return 0 + case "publish": + return 1 + case "memory": + // https://github.com/redis/redis/issues/7493 + if cmd.stringArg(1) == "usage" { + return 2 + } + } + return 1 +} + +func cmdString(cmd Cmder, val interface{}) string { + b := make([]byte, 0, 64) + + for i, arg := range cmd.Args() { + if i > 0 { + b = append(b, ' ') + } + b = internal.AppendArg(b, arg) + } + + if err := cmd.Err(); err != nil { + b = append(b, ": "...) + b = append(b, err.Error()...) + } else if val != nil { + b = append(b, ": "...) + b = internal.AppendArg(b, val) + } + + return util.BytesToString(b) +} + +//------------------------------------------------------------------------------ + +type baseCmd struct { + ctx context.Context + args []interface{} + err error + keyPos int8 + _stepCount int8 + rawVal interface{} + _readTimeout *time.Duration + cmdType CmdType +} + +var _ Cmder = (*Cmd)(nil) + +func (cmd *baseCmd) Name() string { + if len(cmd.args) == 0 { + return "" + } + // Cmd name must be lower cased. + return internal.ToLower(cmd.stringArg(0)) +} + +func (cmd *baseCmd) FullName() string { + switch name := cmd.Name(); name { + case "cluster", "command": + if len(cmd.args) == 1 { + return name + } + if s2, ok := cmd.args[1].(string); ok { + return name + " " + s2 + } + return name + default: + return name + } +} + +func (cmd *baseCmd) Args() []interface{} { + return cmd.args +} + +func (cmd *baseCmd) stringArg(pos int) string { + if pos < 0 || pos >= len(cmd.args) { + return "" + } + arg := cmd.args[pos] + switch v := arg.(type) { + case string: + return v + case []byte: + return string(v) + default: + // TODO: consider using appendArg + return fmt.Sprint(v) + } +} + +func (cmd *baseCmd) firstKeyPos() int8 { + return cmd.keyPos +} + +func (cmd *baseCmd) SetFirstKeyPos(keyPos int8) { + cmd.keyPos = keyPos +} + +func (cmd *baseCmd) stepCount() int8 { + return cmd._stepCount +} + +func (cmd *baseCmd) SetStepCount(stepCount int8) { + cmd._stepCount = stepCount +} + +func (cmd *baseCmd) SetErr(e error) { + cmd.err = e +} + +func (cmd *baseCmd) Err() error { + return cmd.err +} + +func (cmd *baseCmd) readTimeout() *time.Duration { + return cmd._readTimeout +} + +func (cmd *baseCmd) setReadTimeout(d time.Duration) { + cmd._readTimeout = &d +} + +func (cmd *baseCmd) readRawReply(rd *proto.Reader) (err error) { + cmd.rawVal, err = rd.ReadReply() + return err +} + +// NoRetry returns true if the command should not be retried on failure. +// By default, commands can be retried. Commands that write directly to an +// io.Writer (like RawWriteToCmd) should override this to return true since +// partial writes cannot be undone on retry. +func (cmd *baseCmd) NoRetry() bool { + return false +} + +func (cmd *baseCmd) GetCmdType() CmdType { + return cmd.cmdType +} + +func (cmd *baseCmd) cloneBaseCmd() baseCmd { + var readTimeout *time.Duration + if cmd._readTimeout != nil { + timeout := *cmd._readTimeout + readTimeout = &timeout + } + + // Create a copy of args slice + args := make([]interface{}, len(cmd.args)) + copy(args, cmd.args) + + return baseCmd{ + ctx: cmd.ctx, + args: args, + err: cmd.err, + keyPos: cmd.keyPos, + _stepCount: cmd._stepCount, + rawVal: cmd.rawVal, + _readTimeout: readTimeout, + cmdType: cmd.cmdType, + } +} + +//------------------------------------------------------------------------------ + +type Cmd struct { + baseCmd + + val interface{} +} + +func NewCmd(ctx context.Context, args ...interface{}) *Cmd { + return &Cmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeGeneric, + }, + } +} + +func (cmd *Cmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *Cmd) SetVal(val interface{}) { + cmd.val = val +} + +func (cmd *Cmd) Val() interface{} { + return cmd.val +} + +func (cmd *Cmd) Result() (interface{}, error) { + return cmd.val, cmd.err +} + +func (cmd *Cmd) Text() (string, error) { + if cmd.err != nil { + return "", cmd.err + } + return toString(cmd.val) +} + +func toString(val interface{}) (string, error) { + switch val := val.(type) { + case string: + return val, nil + default: + err := fmt.Errorf("redis: unexpected type=%T for String", val) + return "", err + } +} + +func (cmd *Cmd) Int() (int, error) { + if cmd.err != nil { + return 0, cmd.err + } + switch val := cmd.val.(type) { + case int64: + return int(val), nil + case string: + return strconv.Atoi(val) + default: + err := fmt.Errorf("redis: unexpected type=%T for Int", val) + return 0, err + } +} + +func (cmd *Cmd) Int64() (int64, error) { + if cmd.err != nil { + return 0, cmd.err + } + return toInt64(cmd.val) +} + +func toInt64(val interface{}) (int64, error) { + switch val := val.(type) { + case int64: + return val, nil + case string: + return strconv.ParseInt(val, 10, 64) + default: + err := fmt.Errorf("redis: unexpected type=%T for Int64", val) + return 0, err + } +} + +func (cmd *Cmd) Uint64() (uint64, error) { + if cmd.err != nil { + return 0, cmd.err + } + return toUint64(cmd.val) +} + +func toUint64(val interface{}) (uint64, error) { + switch val := val.(type) { + case int64: + return uint64(val), nil + case string: + return strconv.ParseUint(val, 10, 64) + default: + err := fmt.Errorf("redis: unexpected type=%T for Uint64", val) + return 0, err + } +} + +func (cmd *Cmd) Float32() (float32, error) { + if cmd.err != nil { + return 0, cmd.err + } + return toFloat32(cmd.val) +} + +func toFloat32(val interface{}) (float32, error) { + switch val := val.(type) { + case int64: + return float32(val), nil + case string: + f, err := strconv.ParseFloat(val, 32) + if err != nil { + return 0, err + } + return float32(f), nil + default: + err := fmt.Errorf("redis: unexpected type=%T for Float32", val) + return 0, err + } +} + +func (cmd *Cmd) Float64() (float64, error) { + if cmd.err != nil { + return 0, cmd.err + } + return toFloat64(cmd.val) +} + +func toFloat64(val interface{}) (float64, error) { + switch val := val.(type) { + case int64: + return float64(val), nil + case string: + return strconv.ParseFloat(val, 64) + default: + err := fmt.Errorf("redis: unexpected type=%T for Float64", val) + return 0, err + } +} + +func (cmd *Cmd) Bool() (bool, error) { + if cmd.err != nil { + return false, cmd.err + } + return toBool(cmd.val) +} + +func toBool(val interface{}) (bool, error) { + switch val := val.(type) { + case bool: + return val, nil + case int64: + return val != 0, nil + case string: + return strconv.ParseBool(val) + default: + err := fmt.Errorf("redis: unexpected type=%T for Bool", val) + return false, err + } +} + +func (cmd *Cmd) Slice() ([]interface{}, error) { + if cmd.err != nil { + return nil, cmd.err + } + switch val := cmd.val.(type) { + case []interface{}: + return val, nil + default: + return nil, fmt.Errorf("redis: unexpected type=%T for Slice", val) + } +} + +func (cmd *Cmd) StringSlice() ([]string, error) { + slice, err := cmd.Slice() + if err != nil { + return nil, err + } + + ss := make([]string, len(slice)) + for i, iface := range slice { + val, err := toString(iface) + if err != nil { + return nil, err + } + ss[i] = val + } + return ss, nil +} + +func (cmd *Cmd) Int64Slice() ([]int64, error) { + slice, err := cmd.Slice() + if err != nil { + return nil, err + } + + nums := make([]int64, len(slice)) + for i, iface := range slice { + val, err := toInt64(iface) + if err != nil { + return nil, err + } + nums[i] = val + } + return nums, nil +} + +func (cmd *Cmd) Uint64Slice() ([]uint64, error) { + slice, err := cmd.Slice() + if err != nil { + return nil, err + } + + nums := make([]uint64, len(slice)) + for i, iface := range slice { + val, err := toUint64(iface) + if err != nil { + return nil, err + } + nums[i] = val + } + return nums, nil +} + +func (cmd *Cmd) Float32Slice() ([]float32, error) { + slice, err := cmd.Slice() + if err != nil { + return nil, err + } + + floats := make([]float32, len(slice)) + for i, iface := range slice { + val, err := toFloat32(iface) + if err != nil { + return nil, err + } + floats[i] = val + } + return floats, nil +} + +func (cmd *Cmd) Float64Slice() ([]float64, error) { + slice, err := cmd.Slice() + if err != nil { + return nil, err + } + + floats := make([]float64, len(slice)) + for i, iface := range slice { + val, err := toFloat64(iface) + if err != nil { + return nil, err + } + floats[i] = val + } + return floats, nil +} + +func (cmd *Cmd) BoolSlice() ([]bool, error) { + slice, err := cmd.Slice() + if err != nil { + return nil, err + } + + bools := make([]bool, len(slice)) + for i, iface := range slice { + val, err := toBool(iface) + if err != nil { + return nil, err + } + bools[i] = val + } + return bools, nil +} + +func (cmd *Cmd) readReply(rd *proto.Reader) (err error) { + cmd.val, err = rd.ReadReply() + return err +} + +func (cmd *Cmd) Clone() Cmder { + return &Cmd{ + baseCmd: cmd.cloneBaseCmd(), + val: cmd.val, + } +} + +//------------------------------------------------------------------------------ + +// RawCmd returns raw RESP protocol bytes without parsing. +type RawCmd struct { + baseCmd + val []byte +} + +var _ Cmder = (*RawCmd)(nil) + +func NewRawCmd(ctx context.Context, args ...interface{}) *RawCmd { + return &RawCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeGeneric, + }, + } +} + +func (cmd *RawCmd) SetVal(val []byte) { + cmd.val = val +} + +func (cmd *RawCmd) Val() []byte { + return cmd.val +} + +func (cmd *RawCmd) Result() ([]byte, error) { + return cmd.val, cmd.err +} + +func (cmd *RawCmd) Bytes() ([]byte, error) { + return cmd.val, cmd.err +} + +func (cmd *RawCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *RawCmd) readReply(rd *proto.Reader) (err error) { + cmd.val, err = rd.ReadRawReply() + return err +} + +func (cmd *RawCmd) Clone() Cmder { + var val []byte + if cmd.val != nil { + val = make([]byte, len(cmd.val)) + copy(val, cmd.val) + } + return &RawCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +// RawWriteToCmd streams raw RESP protocol bytes directly to an io.Writer without intermediate allocations. +type RawWriteToCmd struct { + baseCmd + w io.Writer + written int64 +} + +var _ Cmder = (*RawWriteToCmd)(nil) + +func NewRawWriteToCmd(ctx context.Context, w io.Writer, args ...interface{}) *RawWriteToCmd { + return &RawWriteToCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeGeneric, + }, + w: w, + } +} + +func (cmd *RawWriteToCmd) SetVal(written int64) { + cmd.written = written +} + +func (cmd *RawWriteToCmd) Val() int64 { + return cmd.written +} + +func (cmd *RawWriteToCmd) Result() (int64, error) { + return cmd.written, cmd.err +} + +func (cmd *RawWriteToCmd) String() string { + return cmdString(cmd, cmd.written) +} + +func (cmd *RawWriteToCmd) readReply(rd *proto.Reader) (err error) { + cmd.written, err = rd.ReadRawReplyWriteTo(cmd.w) + return err +} + +// NoRetry returns true because RawWriteToCmd writes directly to an io.Writer. +// If a retry occurs, partial data from failed attempts would be appended to +// the writer, causing data corruption. The caller must handle retries manually +// if needed, using a fresh writer for each attempt. +func (cmd *RawWriteToCmd) NoRetry() bool { + return true +} + +func (cmd *RawWriteToCmd) Clone() Cmder { + return &RawWriteToCmd{ + baseCmd: cmd.cloneBaseCmd(), + w: cmd.w, + written: cmd.written, + } +} + +//------------------------------------------------------------------------------ + +type SliceCmd struct { + baseCmd + + val []interface{} +} + +var _ Cmder = (*SliceCmd)(nil) + +func NewSliceCmd(ctx context.Context, args ...interface{}) *SliceCmd { + return &SliceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeSlice, + }, + } +} + +func (cmd *SliceCmd) SetVal(val []interface{}) { + cmd.val = val +} + +func (cmd *SliceCmd) Val() []interface{} { + return cmd.val +} + +func (cmd *SliceCmd) Result() ([]interface{}, error) { + return cmd.val, cmd.err +} + +func (cmd *SliceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +// Scan scans the results from the map into a destination struct. The map keys +// are matched in the Redis struct fields by the `redis:"field"` tag. +func (cmd *SliceCmd) Scan(dst interface{}) error { + if cmd.err != nil { + return cmd.err + } + + // Pass the list of keys and values. + // Skip the first two args for: HMGET key + var args []interface{} + if cmd.args[0] == "hmget" { + args = cmd.args[2:] + } else { + // Otherwise, it's: MGET field field ... + args = cmd.args[1:] + } + + return hscan.Scan(dst, args, cmd.val) +} + +func (cmd *SliceCmd) readReply(rd *proto.Reader) (err error) { + cmd.val, err = rd.ReadSlice() + return err +} + +func (cmd *SliceCmd) Clone() Cmder { + var val []interface{} + if cmd.val != nil { + val = make([]interface{}, len(cmd.val)) + copy(val, cmd.val) + } + return &SliceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type StatusCmd struct { + baseCmd + + val string +} + +var _ Cmder = (*StatusCmd)(nil) + +func NewStatusCmd(ctx context.Context, args ...interface{}) *StatusCmd { + return &StatusCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeStatus, + }, + } +} + +func (cmd *StatusCmd) SetVal(val string) { + cmd.val = val +} + +func (cmd *StatusCmd) Val() string { + return cmd.val +} + +func (cmd *StatusCmd) Result() (string, error) { + return cmd.val, cmd.err +} + +func (cmd *StatusCmd) Bytes() ([]byte, error) { + return util.StringToBytes(cmd.val), cmd.err +} + +func (cmd *StatusCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *StatusCmd) readReply(rd *proto.Reader) (err error) { + cmd.val, err = rd.ReadString() + return err +} + +func (cmd *StatusCmd) Clone() Cmder { + return &StatusCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: cmd.val, + } +} + +//------------------------------------------------------------------------------ + +type IntCmd struct { + baseCmd + + val int64 +} + +var _ Cmder = (*IntCmd)(nil) + +func NewIntCmd(ctx context.Context, args ...interface{}) *IntCmd { + return &IntCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeInt, + }, + } +} + +func (cmd *IntCmd) SetVal(val int64) { + cmd.val = val +} + +func (cmd *IntCmd) Val() int64 { + return cmd.val +} + +func (cmd *IntCmd) Result() (int64, error) { + return cmd.val, cmd.err +} + +func (cmd *IntCmd) Uint64() (uint64, error) { + return uint64(cmd.val), cmd.err +} + +func (cmd *IntCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *IntCmd) readReply(rd *proto.Reader) (err error) { + cmd.val, err = rd.ReadInt() + return err +} + +func (cmd *IntCmd) Clone() Cmder { + return &IntCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: cmd.val, + } +} + +//------------------------------------------------------------------------------ + +// DigestCmd is a command that returns a uint64 xxh3 hash digest. +// +// This command is specifically designed for the Redis DIGEST command, +// which returns the xxh3 hash of a key's value as a hex string. +// The hex string is automatically parsed to a uint64 value. +// +// The digest can be used for optimistic locking with SetIFDEQ, SetIFDNE, +// and DelExArgs commands. +// +// For examples of client-side digest generation and usage patterns, see: +// example/digest-optimistic-locking/ +// +// Redis 8.4+. See https://redis.io/commands/digest/ +type DigestCmd struct { + baseCmd + + val uint64 +} + +var _ Cmder = (*DigestCmd)(nil) + +func NewDigestCmd(ctx context.Context, args ...interface{}) *DigestCmd { + return &DigestCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + }, + } +} + +func (cmd *DigestCmd) SetVal(val uint64) { + cmd.val = val +} + +func (cmd *DigestCmd) Val() uint64 { + return cmd.val +} + +func (cmd *DigestCmd) Result() (uint64, error) { + return cmd.val, cmd.err +} + +func (cmd *DigestCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *DigestCmd) Clone() Cmder { + return &DigestCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: cmd.val, + } +} + +func (cmd *DigestCmd) readReply(rd *proto.Reader) (err error) { + // Redis DIGEST command returns a hex string (e.g., "a1b2c3d4e5f67890") + // We parse it as a uint64 xxh3 hash value + var hexStr string + hexStr, err = rd.ReadString() + if err != nil { + return err + } + + // Parse hex string to uint64 + cmd.val, err = strconv.ParseUint(hexStr, 16, 64) + return err +} + +//------------------------------------------------------------------------------ + +type IntSliceCmd struct { + baseCmd + + val []int64 +} + +var _ Cmder = (*IntSliceCmd)(nil) + +func NewIntSliceCmd(ctx context.Context, args ...interface{}) *IntSliceCmd { + return &IntSliceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeIntSlice, + }, + } +} + +func (cmd *IntSliceCmd) SetVal(val []int64) { + cmd.val = val +} + +func (cmd *IntSliceCmd) Val() []int64 { + return cmd.val +} + +func (cmd *IntSliceCmd) Result() ([]int64, error) { + return cmd.val, cmd.err +} + +func (cmd *IntSliceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *IntSliceCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val = make([]int64, n) + for i := 0; i < len(cmd.val); i++ { + if cmd.val[i], err = rd.ReadInt(); err != nil { + return err + } + } + return nil +} + +func (cmd *IntSliceCmd) Clone() Cmder { + var val []int64 + if cmd.val != nil { + val = make([]int64, len(cmd.val)) + copy(val, cmd.val) + } + return &IntSliceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type DurationCmd struct { + baseCmd + + val time.Duration + precision time.Duration +} + +var _ Cmder = (*DurationCmd)(nil) + +func NewDurationCmd(ctx context.Context, precision time.Duration, args ...interface{}) *DurationCmd { + return &DurationCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeDuration, + }, + precision: precision, + } +} + +func (cmd *DurationCmd) SetVal(val time.Duration) { + cmd.val = val +} + +func (cmd *DurationCmd) Val() time.Duration { + return cmd.val +} + +func (cmd *DurationCmd) Result() (time.Duration, error) { + return cmd.val, cmd.err +} + +func (cmd *DurationCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *DurationCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadInt() + if err != nil { + return err + } + switch n { + // -2 if the key does not exist + // -1 if the key exists but has no associated expire + case -2, -1: + cmd.val = time.Duration(n) + default: + cmd.val = time.Duration(n) * cmd.precision + } + return nil +} + +func (cmd *DurationCmd) Clone() Cmder { + return &DurationCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: cmd.val, + precision: cmd.precision, + } +} + +//------------------------------------------------------------------------------ + +type TimeCmd struct { + baseCmd + + val time.Time +} + +var _ Cmder = (*TimeCmd)(nil) + +func NewTimeCmd(ctx context.Context, args ...interface{}) *TimeCmd { + return &TimeCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeTime, + }, + } +} + +func (cmd *TimeCmd) SetVal(val time.Time) { + cmd.val = val +} + +func (cmd *TimeCmd) Val() time.Time { + return cmd.val +} + +func (cmd *TimeCmd) Result() (time.Time, error) { + return cmd.val, cmd.err +} + +func (cmd *TimeCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *TimeCmd) readReply(rd *proto.Reader) error { + if err := rd.ReadFixedArrayLen(2); err != nil { + return err + } + second, err := rd.ReadInt() + if err != nil { + return err + } + microsecond, err := rd.ReadInt() + if err != nil { + return err + } + cmd.val = time.Unix(second, microsecond*1000) + return nil +} + +func (cmd *TimeCmd) Clone() Cmder { + return &TimeCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: cmd.val, + } +} + +//------------------------------------------------------------------------------ + +type BoolCmd struct { + baseCmd + + val bool +} + +var _ Cmder = (*BoolCmd)(nil) + +func NewBoolCmd(ctx context.Context, args ...interface{}) *BoolCmd { + return &BoolCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeBool, + }, + } +} + +func (cmd *BoolCmd) SetVal(val bool) { + cmd.val = val +} + +func (cmd *BoolCmd) Val() bool { + return cmd.val +} + +func (cmd *BoolCmd) Result() (bool, error) { + return cmd.val, cmd.err +} + +func (cmd *BoolCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *BoolCmd) readReply(rd *proto.Reader) (err error) { + cmd.val, err = rd.ReadBool() + + // `SET key value NX` returns nil when key already exists. But + // `SETNX key value` returns bool (0/1). So convert nil to bool. + if err == Nil { + cmd.val = false + err = nil + } + return err +} + +func (cmd *BoolCmd) Clone() Cmder { + return &BoolCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: cmd.val, + } +} + +//------------------------------------------------------------------------------ + +type StringCmd struct { + baseCmd + + val string +} + +var _ Cmder = (*StringCmd)(nil) + +func NewStringCmd(ctx context.Context, args ...interface{}) *StringCmd { + return &StringCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeString, + }, + } +} + +func (cmd *StringCmd) SetVal(val string) { + cmd.val = val +} + +func (cmd *StringCmd) Val() string { + return cmd.val +} + +func (cmd *StringCmd) Result() (string, error) { + return cmd.val, cmd.err +} + +func (cmd *StringCmd) Bytes() ([]byte, error) { + return util.StringToBytes(cmd.val), cmd.err +} + +func (cmd *StringCmd) Bool() (bool, error) { + if cmd.err != nil { + return false, cmd.err + } + return strconv.ParseBool(cmd.val) +} + +func (cmd *StringCmd) Int() (int, error) { + if cmd.err != nil { + return 0, cmd.err + } + return strconv.Atoi(cmd.val) +} + +func (cmd *StringCmd) Int64() (int64, error) { + if cmd.err != nil { + return 0, cmd.err + } + return strconv.ParseInt(cmd.val, 10, 64) +} + +func (cmd *StringCmd) Uint64() (uint64, error) { + if cmd.err != nil { + return 0, cmd.err + } + return strconv.ParseUint(cmd.val, 10, 64) +} + +func (cmd *StringCmd) Float32() (float32, error) { + if cmd.err != nil { + return 0, cmd.err + } + f, err := strconv.ParseFloat(cmd.val, 32) + if err != nil { + return 0, err + } + return float32(f), nil +} + +func (cmd *StringCmd) Float64() (float64, error) { + if cmd.err != nil { + return 0, cmd.err + } + return strconv.ParseFloat(cmd.val, 64) +} + +func (cmd *StringCmd) Time() (time.Time, error) { + if cmd.err != nil { + return time.Time{}, cmd.err + } + return time.Parse(time.RFC3339Nano, cmd.val) +} + +func (cmd *StringCmd) Scan(val interface{}) error { + if cmd.err != nil { + return cmd.err + } + return proto.Scan([]byte(cmd.val), val) +} + +func (cmd *StringCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *StringCmd) readReply(rd *proto.Reader) (err error) { + cmd.val, err = rd.ReadString() + return err +} + +func (cmd *StringCmd) Clone() Cmder { + return &StringCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: cmd.val, + } +} + +//------------------------------------------------------------------------------ + +type FloatCmd struct { + baseCmd + + val float64 +} + +var _ Cmder = (*FloatCmd)(nil) + +func NewFloatCmd(ctx context.Context, args ...interface{}) *FloatCmd { + return &FloatCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeFloat, + }, + } +} + +func (cmd *FloatCmd) SetVal(val float64) { + cmd.val = val +} + +func (cmd *FloatCmd) Val() float64 { + return cmd.val +} + +func (cmd *FloatCmd) Result() (float64, error) { + return cmd.val, cmd.err +} + +func (cmd *FloatCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *FloatCmd) readReply(rd *proto.Reader) (err error) { + cmd.val, err = rd.ReadFloat() + return err +} + +func (cmd *FloatCmd) Clone() Cmder { + return &FloatCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: cmd.val, + } +} + +//------------------------------------------------------------------------------ + +type FloatSliceCmd struct { + baseCmd + + val []float64 +} + +var _ Cmder = (*FloatSliceCmd)(nil) + +func NewFloatSliceCmd(ctx context.Context, args ...interface{}) *FloatSliceCmd { + return &FloatSliceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeFloatSlice, + }, + } +} + +func (cmd *FloatSliceCmd) SetVal(val []float64) { + cmd.val = val +} + +func (cmd *FloatSliceCmd) Val() []float64 { + return cmd.val +} + +func (cmd *FloatSliceCmd) Result() ([]float64, error) { + return cmd.val, cmd.err +} + +func (cmd *FloatSliceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *FloatSliceCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + + cmd.val = make([]float64, n) + for i := 0; i < len(cmd.val); i++ { + switch num, err := rd.ReadFloat(); { + case err == Nil: + cmd.val[i] = 0 + case err != nil: + return err + default: + cmd.val[i] = num + } + } + return nil +} + +func (cmd *FloatSliceCmd) Clone() Cmder { + var val []float64 + if cmd.val != nil { + val = make([]float64, len(cmd.val)) + copy(val, cmd.val) + } + return &FloatSliceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type StringSliceCmd struct { + baseCmd + + val []string +} + +var _ Cmder = (*StringSliceCmd)(nil) + +func NewStringSliceCmd(ctx context.Context, args ...interface{}) *StringSliceCmd { + return &StringSliceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeStringSlice, + }, + } +} + +func (cmd *StringSliceCmd) SetVal(val []string) { + cmd.val = val +} + +func (cmd *StringSliceCmd) Val() []string { + return cmd.val +} + +func (cmd *StringSliceCmd) Result() ([]string, error) { + return cmd.val, cmd.err +} + +func (cmd *StringSliceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *StringSliceCmd) ScanSlice(container interface{}) error { + return proto.ScanSlice(cmd.val, container) +} + +func (cmd *StringSliceCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val = make([]string, n) + for i := 0; i < len(cmd.val); i++ { + switch s, err := rd.ReadString(); { + case err == Nil: + cmd.val[i] = "" + case err != nil: + return err + default: + cmd.val[i] = s + } + } + return nil +} + +func (cmd *StringSliceCmd) Clone() Cmder { + var val []string + if cmd.val != nil { + val = make([]string, len(cmd.val)) + copy(val, cmd.val) + } + return &StringSliceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type KeyValue struct { + Key string + Value string +} + +type KeyValueSliceCmd struct { + baseCmd + + val []KeyValue +} + +var _ Cmder = (*KeyValueSliceCmd)(nil) + +func NewKeyValueSliceCmd(ctx context.Context, args ...interface{}) *KeyValueSliceCmd { + return &KeyValueSliceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeKeyValueSlice, + }, + } +} + +func (cmd *KeyValueSliceCmd) SetVal(val []KeyValue) { + cmd.val = val +} + +func (cmd *KeyValueSliceCmd) Val() []KeyValue { + return cmd.val +} + +func (cmd *KeyValueSliceCmd) Result() ([]KeyValue, error) { + return cmd.val, cmd.err +} + +func (cmd *KeyValueSliceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +// Many commands will respond to two formats: +// 1. 1) "one" +// 2. (double) 1 +// 2. 1) "two" +// 2. (double) 2 +// +// OR: +// 1. "two" +// 2. (double) 2 +// 3. "one" +// 4. (double) 1 +func (cmd *KeyValueSliceCmd) readReply(rd *proto.Reader) error { // nolint:dupl + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + + // If the n is 0, can't continue reading. + if n == 0 { + cmd.val = make([]KeyValue, 0) + return nil + } + + typ, err := rd.PeekReplyType() + if err != nil { + return err + } + array := typ == proto.RespArray + + if array { + cmd.val = make([]KeyValue, n) + } else { + cmd.val = make([]KeyValue, n/2) + } + + for i := 0; i < len(cmd.val); i++ { + if array { + if err = rd.ReadFixedArrayLen(2); err != nil { + return err + } + } + + if cmd.val[i].Key, err = rd.ReadString(); err != nil { + return err + } + + if cmd.val[i].Value, err = rd.ReadString(); err != nil { + return err + } + } + + return nil +} + +func (cmd *KeyValueSliceCmd) Clone() Cmder { + var val []KeyValue + if cmd.val != nil { + val = make([]KeyValue, len(cmd.val)) + copy(val, cmd.val) + } + return &KeyValueSliceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type BoolSliceCmd struct { + baseCmd + + val []bool +} + +var _ Cmder = (*BoolSliceCmd)(nil) + +func NewBoolSliceCmd(ctx context.Context, args ...interface{}) *BoolSliceCmd { + return &BoolSliceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeBoolSlice, + }, + } +} + +func (cmd *BoolSliceCmd) SetVal(val []bool) { + cmd.val = val +} + +func (cmd *BoolSliceCmd) Val() []bool { + return cmd.val +} + +func (cmd *BoolSliceCmd) Result() ([]bool, error) { + return cmd.val, cmd.err +} + +func (cmd *BoolSliceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *BoolSliceCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val = make([]bool, n) + for i := 0; i < len(cmd.val); i++ { + if cmd.val[i], err = rd.ReadBool(); err != nil { + return err + } + } + return nil +} + +func (cmd *BoolSliceCmd) Clone() Cmder { + var val []bool + if cmd.val != nil { + val = make([]bool, len(cmd.val)) + copy(val, cmd.val) + } + return &BoolSliceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type MapStringStringCmd struct { + baseCmd + + val map[string]string +} + +var _ Cmder = (*MapStringStringCmd)(nil) + +func NewMapStringStringCmd(ctx context.Context, args ...interface{}) *MapStringStringCmd { + return &MapStringStringCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeMapStringString, + }, + } +} + +func (cmd *MapStringStringCmd) Val() map[string]string { + return cmd.val +} + +func (cmd *MapStringStringCmd) SetVal(val map[string]string) { + cmd.val = val +} + +func (cmd *MapStringStringCmd) Result() (map[string]string, error) { + return cmd.val, cmd.err +} + +func (cmd *MapStringStringCmd) String() string { + return cmdString(cmd, cmd.val) +} + +// Scan scans the results from the map into a destination struct. The map keys +// are matched in the Redis struct fields by the `redis:"field"` tag. +func (cmd *MapStringStringCmd) Scan(dest interface{}) error { + if cmd.err != nil { + return cmd.err + } + + strct, err := hscan.Struct(dest) + if err != nil { + return err + } + + for k, v := range cmd.val { + if err := strct.Scan(k, v); err != nil { + return err + } + } + + return nil +} + +func (cmd *MapStringStringCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadMapLen() + if err != nil { + return err + } + + cmd.val = make(map[string]string, n) + for i := 0; i < n; i++ { + key, err := rd.ReadString() + if err != nil { + return err + } + + value, err := rd.ReadString() + if err != nil { + return err + } + + cmd.val[key] = value + } + return nil +} + +func (cmd *MapStringStringCmd) Clone() Cmder { + var val map[string]string + if cmd.val != nil { + val = make(map[string]string, len(cmd.val)) + for k, v := range cmd.val { + val[k] = v + } + } + return &MapStringStringCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type MapStringIntCmd struct { + baseCmd + + val map[string]int64 +} + +var _ Cmder = (*MapStringIntCmd)(nil) + +func NewMapStringIntCmd(ctx context.Context, args ...interface{}) *MapStringIntCmd { + return &MapStringIntCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeMapStringInt, + }, + } +} + +func (cmd *MapStringIntCmd) SetVal(val map[string]int64) { + cmd.val = val +} + +func (cmd *MapStringIntCmd) Val() map[string]int64 { + return cmd.val +} + +func (cmd *MapStringIntCmd) Result() (map[string]int64, error) { + return cmd.val, cmd.err +} + +func (cmd *MapStringIntCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *MapStringIntCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadMapLen() + if err != nil { + return err + } + + cmd.val = make(map[string]int64, n) + for i := 0; i < n; i++ { + key, err := rd.ReadString() + if err != nil { + return err + } + + nn, err := rd.ReadInt() + if err != nil { + return err + } + cmd.val[key] = nn + } + return nil +} + +func (cmd *MapStringIntCmd) Clone() Cmder { + var val map[string]int64 + if cmd.val != nil { + val = make(map[string]int64, len(cmd.val)) + for k, v := range cmd.val { + val[k] = v + } + } + return &MapStringIntCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +// ------------------------------------------------------------------------------ +type MapStringSliceInterfaceCmd struct { + baseCmd + val map[string][]interface{} +} + +func NewMapStringSliceInterfaceCmd(ctx context.Context, args ...interface{}) *MapStringSliceInterfaceCmd { + return &MapStringSliceInterfaceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeMapStringInterfaceSlice, + }, + } +} + +func (cmd *MapStringSliceInterfaceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *MapStringSliceInterfaceCmd) SetVal(val map[string][]interface{}) { + cmd.val = val +} + +func (cmd *MapStringSliceInterfaceCmd) Result() (map[string][]interface{}, error) { + return cmd.val, cmd.err +} + +func (cmd *MapStringSliceInterfaceCmd) Val() map[string][]interface{} { + return cmd.val +} + +func (cmd *MapStringSliceInterfaceCmd) readReply(rd *proto.Reader) (err error) { + readType, err := rd.PeekReplyType() + if err != nil { + return err + } + + cmd.val = make(map[string][]interface{}) + + switch readType { + case proto.RespMap: + n, err := rd.ReadMapLen() + if err != nil { + return err + } + for i := 0; i < n; i++ { + k, err := rd.ReadString() + if err != nil { + return err + } + nn, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val[k] = make([]interface{}, nn) + for j := 0; j < nn; j++ { + value, err := rd.ReadReply() + if err != nil { + return err + } + cmd.val[k][j] = value + } + } + case proto.RespArray: + // RESP2 response + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + + for i := 0; i < n; i++ { + // Each entry in this array is itself an array with key details + itemLen, err := rd.ReadArrayLen() + if err != nil { + return err + } + + key, err := rd.ReadString() + if err != nil { + return err + } + cmd.val[key] = make([]interface{}, 0, itemLen-1) + for j := 1; j < itemLen; j++ { + // Read the inner array for timestamp-value pairs + data, err := rd.ReadReply() + if err != nil { + return err + } + cmd.val[key] = append(cmd.val[key], data) + } + } + } + + return nil +} + +func (cmd *MapStringSliceInterfaceCmd) Clone() Cmder { + var val map[string][]interface{} + if cmd.val != nil { + val = make(map[string][]interface{}, len(cmd.val)) + for k, v := range cmd.val { + if v != nil { + newSlice := make([]interface{}, len(v)) + copy(newSlice, v) + val[k] = newSlice + } + } + } + return &MapStringSliceInterfaceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type StringStructMapCmd struct { + baseCmd + + val map[string]struct{} +} + +var _ Cmder = (*StringStructMapCmd)(nil) + +func NewStringStructMapCmd(ctx context.Context, args ...interface{}) *StringStructMapCmd { + return &StringStructMapCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeStringStructMap, + }, + } +} + +func (cmd *StringStructMapCmd) SetVal(val map[string]struct{}) { + cmd.val = val +} + +func (cmd *StringStructMapCmd) Val() map[string]struct{} { + return cmd.val +} + +func (cmd *StringStructMapCmd) Result() (map[string]struct{}, error) { + return cmd.val, cmd.err +} + +func (cmd *StringStructMapCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *StringStructMapCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + + cmd.val = make(map[string]struct{}, n) + for i := 0; i < n; i++ { + key, err := rd.ReadString() + if err != nil { + return err + } + cmd.val[key] = struct{}{} + } + return nil +} + +func (cmd *StringStructMapCmd) Clone() Cmder { + var val map[string]struct{} + if cmd.val != nil { + val = maps.Clone(cmd.val) + } + return &StringStructMapCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type XMessage struct { + ID string + Values map[string]interface{} + // MillisElapsedFromDelivery is the number of milliseconds since the entry was last delivered. + // Only populated when using XREADGROUP with CLAIM argument for claimed entries. + MillisElapsedFromDelivery int64 + // DeliveredCount is the number of times the entry was delivered. + // Only populated when using XREADGROUP with CLAIM argument for claimed entries. + DeliveredCount int64 +} + +type XMessageSliceCmd struct { + baseCmd + + val []XMessage +} + +var _ Cmder = (*XMessageSliceCmd)(nil) + +func NewXMessageSliceCmd(ctx context.Context, args ...interface{}) *XMessageSliceCmd { + return &XMessageSliceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeXMessageSlice, + }, + } +} + +func (cmd *XMessageSliceCmd) SetVal(val []XMessage) { + cmd.val = val +} + +func (cmd *XMessageSliceCmd) Val() []XMessage { + return cmd.val +} + +func (cmd *XMessageSliceCmd) Result() ([]XMessage, error) { + return cmd.val, cmd.err +} + +func (cmd *XMessageSliceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *XMessageSliceCmd) readReply(rd *proto.Reader) (err error) { + cmd.val, err = readXMessageSlice(rd) + return err +} + +func (cmd *XMessageSliceCmd) Clone() Cmder { + var val []XMessage + if cmd.val != nil { + val = make([]XMessage, len(cmd.val)) + for i, msg := range cmd.val { + val[i] = XMessage{ + ID: msg.ID, + } + if msg.Values != nil { + val[i].Values = maps.Clone(msg.Values) + } + } + } + return &XMessageSliceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +func readXMessageSlice(rd *proto.Reader) ([]XMessage, error) { + n, err := rd.ReadArrayLen() + if err != nil { + return nil, err + } + + msgs := make([]XMessage, n) + for i := 0; i < len(msgs); i++ { + if msgs[i], err = readXMessage(rd); err != nil { + return nil, err + } + } + return msgs, nil +} + +func readXMessage(rd *proto.Reader) (XMessage, error) { + // Read array length can be 2 or 4 (with CLAIM metadata) + n, err := rd.ReadArrayLen() + if err != nil { + return XMessage{}, err + } + + if n != 2 && n != 4 { + return XMessage{}, fmt.Errorf("redis: got %d elements in the XMessage array, expected 2 or 4", n) + } + + id, err := rd.ReadString() + if err != nil { + return XMessage{}, err + } + + v, err := stringInterfaceMapParser(rd) + if err != nil { + if err != proto.Nil { + return XMessage{}, err + } + } + + msg := XMessage{ + ID: id, + Values: v, + } + + if n == 4 { + msg.MillisElapsedFromDelivery, err = rd.ReadInt() + if err != nil { + return XMessage{}, err + } + + msg.DeliveredCount, err = rd.ReadInt() + if err != nil { + return XMessage{}, err + } + } + + return msg, nil +} + +func stringInterfaceMapParser(rd *proto.Reader) (map[string]interface{}, error) { + n, err := rd.ReadMapLen() + if err != nil { + return nil, err + } + + m := make(map[string]interface{}, n) + for i := 0; i < n; i++ { + key, err := rd.ReadString() + if err != nil { + return nil, err + } + + value, err := rd.ReadString() + if err != nil { + return nil, err + } + + m[key] = value + } + return m, nil +} + +//------------------------------------------------------------------------------ + +type XStream struct { + Stream string + Messages []XMessage +} + +type XStreamSliceCmd struct { + baseCmd + + val []XStream +} + +var _ Cmder = (*XStreamSliceCmd)(nil) + +func NewXStreamSliceCmd(ctx context.Context, args ...interface{}) *XStreamSliceCmd { + return &XStreamSliceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeXStreamSlice, + }, + } +} + +func (cmd *XStreamSliceCmd) SetVal(val []XStream) { + cmd.val = val +} + +func (cmd *XStreamSliceCmd) Val() []XStream { + return cmd.val +} + +func (cmd *XStreamSliceCmd) Result() ([]XStream, error) { + return cmd.val, cmd.err +} + +func (cmd *XStreamSliceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *XStreamSliceCmd) readReply(rd *proto.Reader) error { + typ, err := rd.PeekReplyType() + if err != nil { + return err + } + + var n int + if typ == proto.RespMap { + n, err = rd.ReadMapLen() + } else { + n, err = rd.ReadArrayLen() + } + if err != nil { + return err + } + cmd.val = make([]XStream, n) + for i := 0; i < len(cmd.val); i++ { + if typ != proto.RespMap { + if err = rd.ReadFixedArrayLen(2); err != nil { + return err + } + } + if cmd.val[i].Stream, err = rd.ReadString(); err != nil { + return err + } + if cmd.val[i].Messages, err = readXMessageSlice(rd); err != nil { + return err + } + } + return nil +} + +func (cmd *XStreamSliceCmd) Clone() Cmder { + var val []XStream + if cmd.val != nil { + val = make([]XStream, len(cmd.val)) + for i, stream := range cmd.val { + val[i] = XStream{ + Stream: stream.Stream, + } + if stream.Messages != nil { + val[i].Messages = make([]XMessage, len(stream.Messages)) + for j, msg := range stream.Messages { + val[i].Messages[j] = XMessage{ + ID: msg.ID, + } + if msg.Values != nil { + val[i].Messages[j].Values = make(map[string]interface{}, len(msg.Values)) + for k, v := range msg.Values { + val[i].Messages[j].Values[k] = v + } + } + } + } + } + } + return &XStreamSliceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type XPending struct { + Count int64 + Lower string + Higher string + Consumers map[string]int64 +} + +type XPendingCmd struct { + baseCmd + val *XPending +} + +var _ Cmder = (*XPendingCmd)(nil) + +func NewXPendingCmd(ctx context.Context, args ...interface{}) *XPendingCmd { + return &XPendingCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeXPending, + }, + } +} + +func (cmd *XPendingCmd) SetVal(val *XPending) { + cmd.val = val +} + +func (cmd *XPendingCmd) Val() *XPending { + return cmd.val +} + +func (cmd *XPendingCmd) Result() (*XPending, error) { + return cmd.val, cmd.err +} + +func (cmd *XPendingCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *XPendingCmd) readReply(rd *proto.Reader) error { + var err error + if err = rd.ReadFixedArrayLen(4); err != nil { + return err + } + cmd.val = &XPending{} + + if cmd.val.Count, err = rd.ReadInt(); err != nil { + return err + } + + if cmd.val.Lower, err = rd.ReadString(); err != nil && err != Nil { + return err + } + + if cmd.val.Higher, err = rd.ReadString(); err != nil && err != Nil { + return err + } + + n, err := rd.ReadArrayLen() + if err != nil && err != Nil { + return err + } + cmd.val.Consumers = make(map[string]int64, n) + for i := 0; i < n; i++ { + if err = rd.ReadFixedArrayLen(2); err != nil { + return err + } + + consumerName, err := rd.ReadString() + if err != nil { + return err + } + consumerPending, err := rd.ReadInt() + if err != nil { + return err + } + cmd.val.Consumers[consumerName] = consumerPending + } + return nil +} + +func (cmd *XPendingCmd) Clone() Cmder { + var val *XPending + if cmd.val != nil { + val = &XPending{ + Count: cmd.val.Count, + Lower: cmd.val.Lower, + Higher: cmd.val.Higher, + } + if cmd.val.Consumers != nil { + val.Consumers = make(map[string]int64, len(cmd.val.Consumers)) + for k, v := range cmd.val.Consumers { + val.Consumers[k] = v + } + } + } + return &XPendingCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type XPendingExt struct { + ID string + Consumer string + Idle time.Duration + RetryCount int64 +} + +type XPendingExtCmd struct { + baseCmd + val []XPendingExt +} + +var _ Cmder = (*XPendingExtCmd)(nil) + +func NewXPendingExtCmd(ctx context.Context, args ...interface{}) *XPendingExtCmd { + return &XPendingExtCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeXPendingExt, + }, + } +} + +func (cmd *XPendingExtCmd) SetVal(val []XPendingExt) { + cmd.val = val +} + +func (cmd *XPendingExtCmd) Val() []XPendingExt { + return cmd.val +} + +func (cmd *XPendingExtCmd) Result() ([]XPendingExt, error) { + return cmd.val, cmd.err +} + +func (cmd *XPendingExtCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *XPendingExtCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val = make([]XPendingExt, n) + + for i := 0; i < len(cmd.val); i++ { + if err = rd.ReadFixedArrayLen(4); err != nil { + return err + } + + if cmd.val[i].ID, err = rd.ReadString(); err != nil { + return err + } + + if cmd.val[i].Consumer, err = rd.ReadString(); err != nil && err != Nil { + return err + } + + idle, err := rd.ReadInt() + if err != nil && err != Nil { + return err + } + cmd.val[i].Idle = time.Duration(idle) * time.Millisecond + + if cmd.val[i].RetryCount, err = rd.ReadInt(); err != nil && err != Nil { + return err + } + } + + return nil +} + +func (cmd *XPendingExtCmd) Clone() Cmder { + var val []XPendingExt + if cmd.val != nil { + val = make([]XPendingExt, len(cmd.val)) + copy(val, cmd.val) + } + return &XPendingExtCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type XAutoClaimCmd struct { + baseCmd + + start string + val []XMessage +} + +var _ Cmder = (*XAutoClaimCmd)(nil) + +func NewXAutoClaimCmd(ctx context.Context, args ...interface{}) *XAutoClaimCmd { + return &XAutoClaimCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeXAutoClaim, + }, + } +} + +func (cmd *XAutoClaimCmd) SetVal(val []XMessage, start string) { + cmd.val = val + cmd.start = start +} + +func (cmd *XAutoClaimCmd) Val() (messages []XMessage, start string) { + return cmd.val, cmd.start +} + +func (cmd *XAutoClaimCmd) Result() (messages []XMessage, start string, err error) { + return cmd.val, cmd.start, cmd.err +} + +func (cmd *XAutoClaimCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *XAutoClaimCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + + switch n { + case 2, // Redis 6 + 3: // Redis 7: + // ok + default: + return fmt.Errorf("redis: got %d elements in XAutoClaim reply, wanted 2/3", n) + } + + cmd.start, err = rd.ReadString() + if err != nil { + return err + } + + cmd.val, err = readXMessageSlice(rd) + if err != nil { + return err + } + + if n >= 3 { + if err := rd.DiscardNext(); err != nil { + return err + } + } + + return nil +} + +func (cmd *XAutoClaimCmd) Clone() Cmder { + var val []XMessage + if cmd.val != nil { + val = make([]XMessage, len(cmd.val)) + for i, msg := range cmd.val { + val[i] = XMessage{ + ID: msg.ID, + } + if msg.Values != nil { + val[i].Values = make(map[string]interface{}, len(msg.Values)) + for k, v := range msg.Values { + val[i].Values[k] = v + } + } + } + } + return &XAutoClaimCmd{ + baseCmd: cmd.cloneBaseCmd(), + start: cmd.start, + val: val, + } +} + +//------------------------------------------------------------------------------ + +type XAutoClaimJustIDCmd struct { + baseCmd + + start string + val []string +} + +var _ Cmder = (*XAutoClaimJustIDCmd)(nil) + +func NewXAutoClaimJustIDCmd(ctx context.Context, args ...interface{}) *XAutoClaimJustIDCmd { + return &XAutoClaimJustIDCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeXAutoClaimJustID, + }, + } +} + +func (cmd *XAutoClaimJustIDCmd) SetVal(val []string, start string) { + cmd.val = val + cmd.start = start +} + +func (cmd *XAutoClaimJustIDCmd) Val() (ids []string, start string) { + return cmd.val, cmd.start +} + +func (cmd *XAutoClaimJustIDCmd) Result() (ids []string, start string, err error) { + return cmd.val, cmd.start, cmd.err +} + +func (cmd *XAutoClaimJustIDCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *XAutoClaimJustIDCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + + switch n { + case 2, // Redis 6 + 3: // Redis 7: + // ok + default: + return fmt.Errorf("redis: got %d elements in XAutoClaimJustID reply, wanted 2/3", n) + } + + cmd.start, err = rd.ReadString() + if err != nil { + return err + } + + nn, err := rd.ReadArrayLen() + if err != nil { + return err + } + + cmd.val = make([]string, nn) + for i := 0; i < nn; i++ { + cmd.val[i], err = rd.ReadString() + if err != nil { + return err + } + } + + if n >= 3 { + if err := rd.DiscardNext(); err != nil { + return err + } + } + + return nil +} + +func (cmd *XAutoClaimJustIDCmd) Clone() Cmder { + var val []string + if cmd.val != nil { + val = make([]string, len(cmd.val)) + copy(val, cmd.val) + } + return &XAutoClaimJustIDCmd{ + baseCmd: cmd.cloneBaseCmd(), + start: cmd.start, + val: val, + } +} + +//------------------------------------------------------------------------------ + +type XInfoConsumersCmd struct { + baseCmd + val []XInfoConsumer +} + +type XInfoConsumer struct { + Name string + Pending int64 + Idle time.Duration + Inactive time.Duration +} + +var _ Cmder = (*XInfoConsumersCmd)(nil) + +func NewXInfoConsumersCmd(ctx context.Context, stream string, group string) *XInfoConsumersCmd { + return &XInfoConsumersCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: []interface{}{"xinfo", "consumers", stream, group}, + cmdType: CmdTypeXInfoConsumers, + }, + } +} + +func (cmd *XInfoConsumersCmd) SetVal(val []XInfoConsumer) { + cmd.val = val +} + +func (cmd *XInfoConsumersCmd) Val() []XInfoConsumer { + return cmd.val +} + +func (cmd *XInfoConsumersCmd) Result() ([]XInfoConsumer, error) { + return cmd.val, cmd.err +} + +func (cmd *XInfoConsumersCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *XInfoConsumersCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val = make([]XInfoConsumer, n) + + for i := 0; i < len(cmd.val); i++ { + nn, err := rd.ReadMapLen() + if err != nil { + return err + } + + var key string + for f := 0; f < nn; f++ { + key, err = rd.ReadString() + if err != nil { + return err + } + + switch key { + case "name": + cmd.val[i].Name, err = rd.ReadString() + case "pending": + cmd.val[i].Pending, err = rd.ReadInt() + case "idle": + var idle int64 + idle, err = rd.ReadInt() + cmd.val[i].Idle = time.Duration(idle) * time.Millisecond + case "inactive": + var inactive int64 + inactive, err = rd.ReadInt() + cmd.val[i].Inactive = time.Duration(inactive) * time.Millisecond + default: + // skip unknown fields + if err = rd.DiscardNext(); err != nil { + return err + } + } + if err != nil { + return err + } + } + } + + return nil +} + +func (cmd *XInfoConsumersCmd) Clone() Cmder { + var val []XInfoConsumer + if cmd.val != nil { + val = make([]XInfoConsumer, len(cmd.val)) + copy(val, cmd.val) + } + return &XInfoConsumersCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type XInfoGroupsCmd struct { + baseCmd + val []XInfoGroup +} + +type XInfoGroup struct { + Name string + Consumers int64 + Pending int64 + LastDeliveredID string + EntriesRead int64 + // Lag represents the number of pending messages in the stream not yet + // delivered to this consumer group. Returns -1 when the lag cannot be determined. + Lag int64 +} + +var _ Cmder = (*XInfoGroupsCmd)(nil) + +func NewXInfoGroupsCmd(ctx context.Context, stream string) *XInfoGroupsCmd { + return &XInfoGroupsCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: []interface{}{"xinfo", "groups", stream}, + cmdType: CmdTypeXInfoGroups, + }, + } +} + +func (cmd *XInfoGroupsCmd) SetVal(val []XInfoGroup) { + cmd.val = val +} + +func (cmd *XInfoGroupsCmd) Val() []XInfoGroup { + return cmd.val +} + +func (cmd *XInfoGroupsCmd) Result() ([]XInfoGroup, error) { + return cmd.val, cmd.err +} + +func (cmd *XInfoGroupsCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *XInfoGroupsCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val = make([]XInfoGroup, n) + + for i := 0; i < len(cmd.val); i++ { + group := &cmd.val[i] + + nn, err := rd.ReadMapLen() + if err != nil { + return err + } + + var key string + for j := 0; j < nn; j++ { + key, err = rd.ReadString() + if err != nil { + return err + } + + switch key { + case "name": + group.Name, err = rd.ReadString() + if err != nil { + return err + } + case "consumers": + group.Consumers, err = rd.ReadInt() + if err != nil { + return err + } + case "pending": + group.Pending, err = rd.ReadInt() + if err != nil { + return err + } + case "last-delivered-id": + group.LastDeliveredID, err = rd.ReadString() + if err != nil { + return err + } + case "entries-read": + group.EntriesRead, err = rd.ReadInt() + if err != nil && err != Nil { + return err + } + case "lag": + group.Lag, err = rd.ReadInt() + + // lag: the number of entries in the stream that are still waiting to be delivered + // to the group's consumers, or a NULL(Nil) when that number can't be determined. + // In that case, we return -1. + if err != nil && err != Nil { + return err + } else if err == Nil { + group.Lag = -1 + } + default: + // skip unknown fields + if err = rd.DiscardNext(); err != nil { + return err + } + } + } + } + + return nil +} + +func (cmd *XInfoGroupsCmd) Clone() Cmder { + var val []XInfoGroup + if cmd.val != nil { + val = make([]XInfoGroup, len(cmd.val)) + copy(val, cmd.val) + } + return &XInfoGroupsCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type XInfoStreamCmd struct { + baseCmd + val *XInfoStream +} + +type XInfoStream struct { + Length int64 + RadixTreeKeys int64 + RadixTreeNodes int64 + Groups int64 + LastGeneratedID string + MaxDeletedEntryID string + EntriesAdded int64 + FirstEntry XMessage + LastEntry XMessage + RecordedFirstEntryID string + + IDMPDuration int64 + IDMPMaxSize int64 + PIDsTracked int64 + IIDsTracked int64 + IIDsAdded int64 + IIDsDuplicates int64 +} + +var _ Cmder = (*XInfoStreamCmd)(nil) + +func NewXInfoStreamCmd(ctx context.Context, stream string) *XInfoStreamCmd { + return &XInfoStreamCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: []interface{}{"xinfo", "stream", stream}, + cmdType: CmdTypeXInfoStream, + }, + } +} + +func (cmd *XInfoStreamCmd) SetVal(val *XInfoStream) { + cmd.val = val +} + +func (cmd *XInfoStreamCmd) Val() *XInfoStream { + return cmd.val +} + +func (cmd *XInfoStreamCmd) Result() (*XInfoStream, error) { + return cmd.val, cmd.err +} + +func (cmd *XInfoStreamCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *XInfoStreamCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadMapLen() + if err != nil { + return err + } + cmd.val = &XInfoStream{} + + for i := 0; i < n; i++ { + key, err := rd.ReadString() + if err != nil { + return err + } + switch key { + case "length": + cmd.val.Length, err = rd.ReadInt() + if err != nil { + return err + } + case "radix-tree-keys": + cmd.val.RadixTreeKeys, err = rd.ReadInt() + if err != nil { + return err + } + case "radix-tree-nodes": + cmd.val.RadixTreeNodes, err = rd.ReadInt() + if err != nil { + return err + } + case "groups": + cmd.val.Groups, err = rd.ReadInt() + if err != nil { + return err + } + case "last-generated-id": + cmd.val.LastGeneratedID, err = rd.ReadString() + if err != nil { + return err + } + case "max-deleted-entry-id": + cmd.val.MaxDeletedEntryID, err = rd.ReadString() + if err != nil { + return err + } + case "entries-added": + cmd.val.EntriesAdded, err = rd.ReadInt() + if err != nil { + return err + } + case "first-entry": + cmd.val.FirstEntry, err = readXMessage(rd) + if err != nil && err != Nil { + return err + } + case "last-entry": + cmd.val.LastEntry, err = readXMessage(rd) + if err != nil && err != Nil { + return err + } + case "recorded-first-entry-id": + cmd.val.RecordedFirstEntryID, err = rd.ReadString() + if err != nil { + return err + } + case "idmp-duration": + cmd.val.IDMPDuration, err = rd.ReadInt() + if err != nil { + return err + } + case "idmp-maxsize": + cmd.val.IDMPMaxSize, err = rd.ReadInt() + if err != nil { + return err + } + case "pids-tracked": + cmd.val.PIDsTracked, err = rd.ReadInt() + if err != nil { + return err + } + case "iids-tracked": + cmd.val.IIDsTracked, err = rd.ReadInt() + if err != nil { + return err + } + case "iids-added": + cmd.val.IIDsAdded, err = rd.ReadInt() + if err != nil { + return err + } + case "iids-duplicates": + cmd.val.IIDsDuplicates, err = rd.ReadInt() + if err != nil { + return err + } + default: + // skip unknown fields + if err = rd.DiscardNext(); err != nil { + return err + } + } + } + return nil +} + +func (cmd *XInfoStreamCmd) Clone() Cmder { + var val *XInfoStream + if cmd.val != nil { + val = &XInfoStream{ + Length: cmd.val.Length, + RadixTreeKeys: cmd.val.RadixTreeKeys, + RadixTreeNodes: cmd.val.RadixTreeNodes, + Groups: cmd.val.Groups, + LastGeneratedID: cmd.val.LastGeneratedID, + MaxDeletedEntryID: cmd.val.MaxDeletedEntryID, + EntriesAdded: cmd.val.EntriesAdded, + RecordedFirstEntryID: cmd.val.RecordedFirstEntryID, + } + // Clone XMessage fields + val.FirstEntry = XMessage{ + ID: cmd.val.FirstEntry.ID, + } + if cmd.val.FirstEntry.Values != nil { + val.FirstEntry.Values = make(map[string]interface{}, len(cmd.val.FirstEntry.Values)) + for k, v := range cmd.val.FirstEntry.Values { + val.FirstEntry.Values[k] = v + } + } + val.LastEntry = XMessage{ + ID: cmd.val.LastEntry.ID, + } + if cmd.val.LastEntry.Values != nil { + val.LastEntry.Values = make(map[string]interface{}, len(cmd.val.LastEntry.Values)) + for k, v := range cmd.val.LastEntry.Values { + val.LastEntry.Values[k] = v + } + } + } + return &XInfoStreamCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type XInfoStreamFullCmd struct { + baseCmd + val *XInfoStreamFull +} + +type XInfoStreamFull struct { + Length int64 + RadixTreeKeys int64 + RadixTreeNodes int64 + LastGeneratedID string + MaxDeletedEntryID string + EntriesAdded int64 + Entries []XMessage + Groups []XInfoStreamGroup + RecordedFirstEntryID string + IDMPDuration int64 + IDMPMaxSize int64 + PIDsTracked int64 + IIDsTracked int64 + IIDsAdded int64 + IIDsDuplicates int64 +} + +type XInfoStreamGroup struct { + Name string + LastDeliveredID string + EntriesRead int64 + Lag int64 + PelCount int64 + NackedCount uint64 // redis version 8.8, number of NACK'd messages in the group + Pending []XInfoStreamGroupPending + Consumers []XInfoStreamConsumer +} + +type XInfoStreamGroupPending struct { + ID string + Consumer string + DeliveryTime time.Time + DeliveryCount int64 +} + +type XInfoStreamConsumer struct { + Name string + SeenTime time.Time + ActiveTime time.Time + PelCount int64 + Pending []XInfoStreamConsumerPending +} + +type XInfoStreamConsumerPending struct { + ID string + DeliveryTime time.Time + DeliveryCount int64 +} + +var _ Cmder = (*XInfoStreamFullCmd)(nil) + +func NewXInfoStreamFullCmd(ctx context.Context, args ...interface{}) *XInfoStreamFullCmd { + return &XInfoStreamFullCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeXInfoStreamFull, + }, + } +} + +func (cmd *XInfoStreamFullCmd) SetVal(val *XInfoStreamFull) { + cmd.val = val +} + +func (cmd *XInfoStreamFullCmd) Val() *XInfoStreamFull { + return cmd.val +} + +func (cmd *XInfoStreamFullCmd) Result() (*XInfoStreamFull, error) { + return cmd.val, cmd.err +} + +func (cmd *XInfoStreamFullCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *XInfoStreamFullCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadMapLen() + if err != nil { + return err + } + + cmd.val = &XInfoStreamFull{} + + for i := 0; i < n; i++ { + key, err := rd.ReadString() + if err != nil { + return err + } + + switch key { + case "length": + cmd.val.Length, err = rd.ReadInt() + if err != nil { + return err + } + case "radix-tree-keys": + cmd.val.RadixTreeKeys, err = rd.ReadInt() + if err != nil { + return err + } + case "radix-tree-nodes": + cmd.val.RadixTreeNodes, err = rd.ReadInt() + if err != nil { + return err + } + case "last-generated-id": + cmd.val.LastGeneratedID, err = rd.ReadString() + if err != nil { + return err + } + case "entries-added": + cmd.val.EntriesAdded, err = rd.ReadInt() + if err != nil { + return err + } + case "entries": + cmd.val.Entries, err = readXMessageSlice(rd) + if err != nil { + return err + } + case "groups": + cmd.val.Groups, err = readStreamGroups(rd) + if err != nil { + return err + } + case "max-deleted-entry-id": + cmd.val.MaxDeletedEntryID, err = rd.ReadString() + if err != nil { + return err + } + case "recorded-first-entry-id": + cmd.val.RecordedFirstEntryID, err = rd.ReadString() + if err != nil { + return err + } + case "idmp-duration": + cmd.val.IDMPDuration, err = rd.ReadInt() + if err != nil { + return err + } + case "idmp-maxsize": + cmd.val.IDMPMaxSize, err = rd.ReadInt() + if err != nil { + return err + } + case "pids-tracked": + cmd.val.PIDsTracked, err = rd.ReadInt() + if err != nil { + return err + } + case "iids-tracked": + cmd.val.IIDsTracked, err = rd.ReadInt() + if err != nil { + return err + } + case "iids-added": + cmd.val.IIDsAdded, err = rd.ReadInt() + if err != nil { + return err + } + case "iids-duplicates": + cmd.val.IIDsDuplicates, err = rd.ReadInt() + if err != nil { + return err + } + default: + // skip unknown fields + if err = rd.DiscardNext(); err != nil { + return err + } + } + } + return nil +} + +func readStreamGroups(rd *proto.Reader) ([]XInfoStreamGroup, error) { + n, err := rd.ReadArrayLen() + if err != nil { + return nil, err + } + groups := make([]XInfoStreamGroup, 0, n) + for i := 0; i < n; i++ { + nn, err := rd.ReadMapLen() + if err != nil { + return nil, err + } + + group := XInfoStreamGroup{} + + for j := 0; j < nn; j++ { + key, err := rd.ReadString() + if err != nil { + return nil, err + } + + switch key { + case "name": + group.Name, err = rd.ReadString() + if err != nil { + return nil, err + } + case "last-delivered-id": + group.LastDeliveredID, err = rd.ReadString() + if err != nil { + return nil, err + } + case "entries-read": + group.EntriesRead, err = rd.ReadInt() + if err != nil && err != Nil { + return nil, err + } + case "lag": + // lag: the number of entries in the stream that are still waiting to be delivered + // to the group's consumers, or a NULL(Nil) when that number can't be determined. + group.Lag, err = rd.ReadInt() + if err != nil && err != Nil { + return nil, err + } + case "pel-count": + group.PelCount, err = rd.ReadInt() + if err != nil { + return nil, err + } + case "nacked-count": + group.NackedCount, err = rd.ReadUint() + if err != nil { + return nil, err + } + case "pending": + group.Pending, err = readXInfoStreamGroupPending(rd) + if err != nil { + return nil, err + } + case "consumers": + group.Consumers, err = readXInfoStreamConsumers(rd) + if err != nil { + return nil, err + } + default: + // skip unknown fields + if err = rd.DiscardNext(); err != nil { + return nil, err + } + } + } + + groups = append(groups, group) + } + + return groups, nil +} + +func readXInfoStreamGroupPending(rd *proto.Reader) ([]XInfoStreamGroupPending, error) { + n, err := rd.ReadArrayLen() + if err != nil { + return nil, err + } + + pending := make([]XInfoStreamGroupPending, 0, n) + + for i := 0; i < n; i++ { + if err = rd.ReadFixedArrayLen(4); err != nil { + return nil, err + } + + p := XInfoStreamGroupPending{} + + p.ID, err = rd.ReadString() + if err != nil { + return nil, err + } + + p.Consumer, err = rd.ReadString() + if err != nil { + return nil, err + } + + delivery, err := rd.ReadInt() + if err != nil { + return nil, err + } + p.DeliveryTime = time.Unix(delivery/1000, delivery%1000*int64(time.Millisecond)) + + p.DeliveryCount, err = rd.ReadInt() + if err != nil { + return nil, err + } + + pending = append(pending, p) + } + + return pending, nil +} + +func readXInfoStreamConsumers(rd *proto.Reader) ([]XInfoStreamConsumer, error) { + n, err := rd.ReadArrayLen() + if err != nil { + return nil, err + } + + consumers := make([]XInfoStreamConsumer, 0, n) + + for i := 0; i < n; i++ { + nn, err := rd.ReadMapLen() + if err != nil { + return nil, err + } + + c := XInfoStreamConsumer{} + + for f := 0; f < nn; f++ { + cKey, err := rd.ReadString() + if err != nil { + return nil, err + } + + switch cKey { + case "name": + c.Name, err = rd.ReadString() + case "seen-time": + seen, err := rd.ReadInt() + if err != nil { + return nil, err + } + c.SeenTime = time.UnixMilli(seen) + case "active-time": + active, err := rd.ReadInt() + if err != nil { + return nil, err + } + c.ActiveTime = time.UnixMilli(active) + case "pel-count": + c.PelCount, err = rd.ReadInt() + case "pending": + pendingNumber, err := rd.ReadArrayLen() + if err != nil { + return nil, err + } + + c.Pending = make([]XInfoStreamConsumerPending, 0, pendingNumber) + + for pn := 0; pn < pendingNumber; pn++ { + if err = rd.ReadFixedArrayLen(3); err != nil { + return nil, err + } + + p := XInfoStreamConsumerPending{} + + p.ID, err = rd.ReadString() + if err != nil { + return nil, err + } + + delivery, err := rd.ReadInt() + if err != nil { + return nil, err + } + p.DeliveryTime = time.Unix(delivery/1000, delivery%1000*int64(time.Millisecond)) + + p.DeliveryCount, err = rd.ReadInt() + if err != nil { + return nil, err + } + + c.Pending = append(c.Pending, p) + } + default: + // skip unknown fields + if err = rd.DiscardNext(); err != nil { + return nil, err + } + } + if err != nil { + return nil, err + } + } + consumers = append(consumers, c) + } + + return consumers, nil +} + +func (cmd *XInfoStreamFullCmd) Clone() Cmder { + var val *XInfoStreamFull + if cmd.val != nil { + val = &XInfoStreamFull{ + Length: cmd.val.Length, + RadixTreeKeys: cmd.val.RadixTreeKeys, + RadixTreeNodes: cmd.val.RadixTreeNodes, + LastGeneratedID: cmd.val.LastGeneratedID, + MaxDeletedEntryID: cmd.val.MaxDeletedEntryID, + EntriesAdded: cmd.val.EntriesAdded, + RecordedFirstEntryID: cmd.val.RecordedFirstEntryID, + } + // Clone Entries + if cmd.val.Entries != nil { + val.Entries = make([]XMessage, len(cmd.val.Entries)) + for i, msg := range cmd.val.Entries { + val.Entries[i] = XMessage{ + ID: msg.ID, + } + if msg.Values != nil { + val.Entries[i].Values = make(map[string]interface{}, len(msg.Values)) + for k, v := range msg.Values { + val.Entries[i].Values[k] = v + } + } + } + } + // Clone Groups - simplified copy for now due to complexity + if cmd.val.Groups != nil { + val.Groups = make([]XInfoStreamGroup, len(cmd.val.Groups)) + copy(val.Groups, cmd.val.Groups) + } + } + return &XInfoStreamFullCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type ZSliceCmd struct { + baseCmd + + val []Z +} + +var _ Cmder = (*ZSliceCmd)(nil) + +func NewZSliceCmd(ctx context.Context, args ...interface{}) *ZSliceCmd { + return &ZSliceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeZSlice, + }, + } +} + +func (cmd *ZSliceCmd) SetVal(val []Z) { + cmd.val = val +} + +func (cmd *ZSliceCmd) Val() []Z { + return cmd.val +} + +func (cmd *ZSliceCmd) Result() ([]Z, error) { + return cmd.val, cmd.err +} + +func (cmd *ZSliceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *ZSliceCmd) readReply(rd *proto.Reader) error { // nolint:dupl + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + + // If the n is 0, can't continue reading. + if n == 0 { + cmd.val = make([]Z, 0) + return nil + } + + typ, err := rd.PeekReplyType() + if err != nil { + return err + } + array := typ == proto.RespArray + + if array { + cmd.val = make([]Z, n) + } else { + cmd.val = make([]Z, n/2) + } + + for i := 0; i < len(cmd.val); i++ { + if array { + if err = rd.ReadFixedArrayLen(2); err != nil { + return err + } + } + + if cmd.val[i].Member, err = rd.ReadString(); err != nil { + return err + } + + if cmd.val[i].Score, err = rd.ReadFloat(); err != nil { + return err + } + } + + return nil +} + +func (cmd *ZSliceCmd) Clone() Cmder { + var val []Z + if cmd.val != nil { + val = make([]Z, len(cmd.val)) + copy(val, cmd.val) + } + return &ZSliceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type ZWithKeyCmd struct { + baseCmd + + val *ZWithKey +} + +var _ Cmder = (*ZWithKeyCmd)(nil) + +func NewZWithKeyCmd(ctx context.Context, args ...interface{}) *ZWithKeyCmd { + return &ZWithKeyCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeZWithKey, + }, + } +} + +func (cmd *ZWithKeyCmd) SetVal(val *ZWithKey) { + cmd.val = val +} + +func (cmd *ZWithKeyCmd) Val() *ZWithKey { + return cmd.val +} + +func (cmd *ZWithKeyCmd) Result() (*ZWithKey, error) { + return cmd.val, cmd.err +} + +func (cmd *ZWithKeyCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *ZWithKeyCmd) readReply(rd *proto.Reader) (err error) { + if err = rd.ReadFixedArrayLen(3); err != nil { + return err + } + cmd.val = &ZWithKey{} + + if cmd.val.Key, err = rd.ReadString(); err != nil { + return err + } + if cmd.val.Member, err = rd.ReadString(); err != nil { + return err + } + if cmd.val.Score, err = rd.ReadFloat(); err != nil { + return err + } + + return nil +} + +func (cmd *ZWithKeyCmd) Clone() Cmder { + var val *ZWithKey + if cmd.val != nil { + val = &ZWithKey{ + Z: Z{ + Score: cmd.val.Score, + Member: cmd.val.Member, + }, + Key: cmd.val.Key, + } + } + return &ZWithKeyCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type ScanCmd struct { + baseCmd + + page []string + cursor uint64 + + process cmdable +} + +var _ Cmder = (*ScanCmd)(nil) + +func NewScanCmd(ctx context.Context, process cmdable, args ...interface{}) *ScanCmd { + return &ScanCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeScan, + }, + process: process, + } +} + +func (cmd *ScanCmd) SetVal(page []string, cursor uint64) { + cmd.page = page + cmd.cursor = cursor +} + +func (cmd *ScanCmd) Val() (keys []string, cursor uint64) { + return cmd.page, cmd.cursor +} + +func (cmd *ScanCmd) Result() (keys []string, cursor uint64, err error) { + return cmd.page, cmd.cursor, cmd.err +} + +func (cmd *ScanCmd) String() string { + return cmdString(cmd, cmd.page) +} + +func (cmd *ScanCmd) readReply(rd *proto.Reader) error { + if err := rd.ReadFixedArrayLen(2); err != nil { + return err + } + + cursor, err := rd.ReadUint() + if err != nil { + return err + } + cmd.cursor = cursor + + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.page = make([]string, n) + + for i := 0; i < len(cmd.page); i++ { + if cmd.page[i], err = rd.ReadString(); err != nil { + return err + } + } + return nil +} + +func (cmd *ScanCmd) Clone() Cmder { + var page []string + if cmd.page != nil { + page = make([]string, len(cmd.page)) + copy(page, cmd.page) + } + return &ScanCmd{ + baseCmd: cmd.cloneBaseCmd(), + page: page, + cursor: cmd.cursor, + process: cmd.process, + } +} + +// Iterator creates a new ScanIterator. +func (cmd *ScanCmd) Iterator() *ScanIterator { + return &ScanIterator{ + cmd: cmd, + } +} + +//------------------------------------------------------------------------------ + +type ClusterNode struct { + ID string + Addr string + NetworkingMetadata map[string]string +} + +type ClusterSlot struct { + Start int + End int + Nodes []ClusterNode +} + +type ClusterSlotsCmd struct { + baseCmd + + val []ClusterSlot +} + +var _ Cmder = (*ClusterSlotsCmd)(nil) + +func NewClusterSlotsCmd(ctx context.Context, args ...interface{}) *ClusterSlotsCmd { + return &ClusterSlotsCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeClusterSlots, + }, + } +} + +func (cmd *ClusterSlotsCmd) SetVal(val []ClusterSlot) { + cmd.val = val +} + +func (cmd *ClusterSlotsCmd) Val() []ClusterSlot { + return cmd.val +} + +func (cmd *ClusterSlotsCmd) Result() ([]ClusterSlot, error) { + return cmd.val, cmd.err +} + +func (cmd *ClusterSlotsCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *ClusterSlotsCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val = make([]ClusterSlot, n) + + for i := 0; i < len(cmd.val); i++ { + n, err = rd.ReadArrayLen() + if err != nil { + return err + } + if n < 2 { + return fmt.Errorf("redis: got %d elements in cluster info, expected at least 2", n) + } + + start, err := rd.ReadInt() + if err != nil { + return err + } + + end, err := rd.ReadInt() + if err != nil { + return err + } + + // subtract start and end. + nodes := make([]ClusterNode, n-2) + + for j := 0; j < len(nodes); j++ { + nn, err := rd.ReadArrayLen() + if err != nil { + return err + } + if nn < 2 || nn > 4 { + return fmt.Errorf("got %d elements in cluster info address, expected 2, 3, or 4", n) + } + + ip, err := rd.ReadString() + if err != nil { + return err + } + + port, err := rd.ReadString() + if err != nil { + return err + } + + nodes[j].Addr = net.JoinHostPort(ip, port) + + if nn >= 3 { + id, err := rd.ReadString() + if err != nil { + return err + } + nodes[j].ID = id + } + + if nn >= 4 { + metadataLength, err := rd.ReadMapLen() + if err != nil { + return err + } + + networkingMetadata := make(map[string]string, metadataLength) + + for i := 0; i < metadataLength; i++ { + key, err := rd.ReadString() + if err != nil { + return err + } + value, err := rd.ReadString() + if err != nil { + return err + } + networkingMetadata[key] = value + } + + nodes[j].NetworkingMetadata = networkingMetadata + } + } + + cmd.val[i] = ClusterSlot{ + Start: int(start), + End: int(end), + Nodes: nodes, + } + } + + return nil +} + +func (cmd *ClusterSlotsCmd) Clone() Cmder { + var val []ClusterSlot + if cmd.val != nil { + val = make([]ClusterSlot, len(cmd.val)) + for i, slot := range cmd.val { + val[i] = ClusterSlot{ + Start: slot.Start, + End: slot.End, + } + if slot.Nodes != nil { + val[i].Nodes = make([]ClusterNode, len(slot.Nodes)) + for j, node := range slot.Nodes { + val[i].Nodes[j] = ClusterNode{ + ID: node.ID, + Addr: node.Addr, + } + if node.NetworkingMetadata != nil { + val[i].Nodes[j].NetworkingMetadata = make(map[string]string, len(node.NetworkingMetadata)) + for k, v := range node.NetworkingMetadata { + val[i].Nodes[j].NetworkingMetadata[k] = v + } + } + } + } + } + } + return &ClusterSlotsCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +// GeoLocation is used with GeoAdd to add geospatial location. +type GeoLocation struct { + Name string + Longitude, Latitude, Dist float64 + GeoHash int64 +} + +// GeoRadiusQuery is used with GeoRadius to query geospatial index. +type GeoRadiusQuery struct { + Radius float64 + // Can be m, km, ft, or mi. Default is km. + Unit string + WithCoord bool + WithDist bool + WithGeoHash bool + Count int + // Can be ASC or DESC. Default is no sort order. + Sort string + Store string + StoreDist string + + // WithCoord+WithDist+WithGeoHash + withLen int +} + +type GeoLocationCmd struct { + baseCmd + + q *GeoRadiusQuery + locations []GeoLocation +} + +var _ Cmder = (*GeoLocationCmd)(nil) + +func NewGeoLocationCmd(ctx context.Context, q *GeoRadiusQuery, args ...interface{}) *GeoLocationCmd { + return &GeoLocationCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: geoLocationArgs(q, args...), + cmdType: CmdTypeGeoLocation, + }, + q: q, + } +} + +func geoLocationArgs(q *GeoRadiusQuery, args ...interface{}) []interface{} { + args = append(args, q.Radius) + if q.Unit != "" { + args = append(args, q.Unit) + } else { + args = append(args, "km") + } + if q.WithCoord { + args = append(args, "withcoord") + q.withLen++ + } + if q.WithDist { + args = append(args, "withdist") + q.withLen++ + } + if q.WithGeoHash { + args = append(args, "withhash") + q.withLen++ + } + if q.Count > 0 { + args = append(args, "count", q.Count) + } + if q.Sort != "" { + args = append(args, q.Sort) + } + if q.Store != "" { + args = append(args, "store") + args = append(args, q.Store) + } + if q.StoreDist != "" { + args = append(args, "storedist") + args = append(args, q.StoreDist) + } + return args +} + +func (cmd *GeoLocationCmd) SetVal(locations []GeoLocation) { + cmd.locations = locations +} + +func (cmd *GeoLocationCmd) Val() []GeoLocation { + return cmd.locations +} + +func (cmd *GeoLocationCmd) Result() ([]GeoLocation, error) { + return cmd.locations, cmd.err +} + +func (cmd *GeoLocationCmd) String() string { + return cmdString(cmd, cmd.locations) +} + +func (cmd *GeoLocationCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.locations = make([]GeoLocation, n) + + for i := 0; i < len(cmd.locations); i++ { + // only name + if cmd.q.withLen == 0 { + if cmd.locations[i].Name, err = rd.ReadString(); err != nil { + return err + } + continue + } + + // +name + if err = rd.ReadFixedArrayLen(cmd.q.withLen + 1); err != nil { + return err + } + + if cmd.locations[i].Name, err = rd.ReadString(); err != nil { + return err + } + if cmd.q.WithDist { + if cmd.locations[i].Dist, err = rd.ReadFloat(); err != nil { + return err + } + } + if cmd.q.WithGeoHash { + if cmd.locations[i].GeoHash, err = rd.ReadInt(); err != nil { + return err + } + } + if cmd.q.WithCoord { + if err = rd.ReadFixedArrayLen(2); err != nil { + return err + } + if cmd.locations[i].Longitude, err = rd.ReadFloat(); err != nil { + return err + } + if cmd.locations[i].Latitude, err = rd.ReadFloat(); err != nil { + return err + } + } + } + + return nil +} + +func (cmd *GeoLocationCmd) Clone() Cmder { + var q *GeoRadiusQuery + if cmd.q != nil { + q = &GeoRadiusQuery{ + Radius: cmd.q.Radius, + Unit: cmd.q.Unit, + WithCoord: cmd.q.WithCoord, + WithDist: cmd.q.WithDist, + WithGeoHash: cmd.q.WithGeoHash, + Count: cmd.q.Count, + Sort: cmd.q.Sort, + Store: cmd.q.Store, + StoreDist: cmd.q.StoreDist, + withLen: cmd.q.withLen, + } + } + var locations []GeoLocation + if cmd.locations != nil { + locations = make([]GeoLocation, len(cmd.locations)) + copy(locations, cmd.locations) + } + return &GeoLocationCmd{ + baseCmd: cmd.cloneBaseCmd(), + q: q, + locations: locations, + } +} + +//------------------------------------------------------------------------------ + +// GeoSearchQuery is used for GEOSearch/GEOSearchStore command query. +type GeoSearchQuery struct { + Member string + + // Latitude and Longitude when using FromLonLat option. + Longitude float64 + Latitude float64 + + // Distance and unit when using ByRadius option. + // Can use m, km, ft, or mi. Default is km. + Radius float64 + RadiusUnit string + + // Height, width and unit when using ByBox option. + // Can be m, km, ft, or mi. Default is km. + BoxWidth float64 + BoxHeight float64 + BoxUnit string + + // Can be ASC or DESC. Default is no sort order. + Sort string + Count int + CountAny bool +} + +type GeoSearchLocationQuery struct { + GeoSearchQuery + + WithCoord bool + WithDist bool + WithHash bool +} + +type GeoSearchStoreQuery struct { + GeoSearchQuery + + // When using the StoreDist option, the command stores the items in a + // sorted set populated with their distance from the center of the circle or box, + // as a floating-point number, in the same unit specified for that shape. + StoreDist bool +} + +func geoSearchLocationArgs(q *GeoSearchLocationQuery, args []interface{}) []interface{} { + args = geoSearchArgs(&q.GeoSearchQuery, args) + + if q.WithCoord { + args = append(args, "withcoord") + } + if q.WithDist { + args = append(args, "withdist") + } + if q.WithHash { + args = append(args, "withhash") + } + + return args +} + +func geoSearchArgs(q *GeoSearchQuery, args []interface{}) []interface{} { + if q.Member != "" { + args = append(args, "frommember", q.Member) + } else { + args = append(args, "fromlonlat", q.Longitude, q.Latitude) + } + + if q.Radius > 0 { + if q.RadiusUnit == "" { + q.RadiusUnit = "km" + } + args = append(args, "byradius", q.Radius, q.RadiusUnit) + } else { + if q.BoxUnit == "" { + q.BoxUnit = "km" + } + args = append(args, "bybox", q.BoxWidth, q.BoxHeight, q.BoxUnit) + } + + if q.Sort != "" { + args = append(args, q.Sort) + } + + if q.Count > 0 { + args = append(args, "count", q.Count) + if q.CountAny { + args = append(args, "any") + } + } + + return args +} + +type GeoSearchLocationCmd struct { + baseCmd + + opt *GeoSearchLocationQuery + val []GeoLocation +} + +var _ Cmder = (*GeoSearchLocationCmd)(nil) + +func NewGeoSearchLocationCmd( + ctx context.Context, opt *GeoSearchLocationQuery, args ...interface{}, +) *GeoSearchLocationCmd { + return &GeoSearchLocationCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: geoSearchLocationArgs(opt, args), + cmdType: CmdTypeGeoSearchLocation, + }, + opt: opt, + } +} + +func (cmd *GeoSearchLocationCmd) SetVal(val []GeoLocation) { + cmd.val = val +} + +func (cmd *GeoSearchLocationCmd) Val() []GeoLocation { + return cmd.val +} + +func (cmd *GeoSearchLocationCmd) Result() ([]GeoLocation, error) { + return cmd.val, cmd.err +} + +func (cmd *GeoSearchLocationCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *GeoSearchLocationCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + + cmd.val = make([]GeoLocation, n) + for i := 0; i < n; i++ { + _, err = rd.ReadArrayLen() + if err != nil { + return err + } + + var loc GeoLocation + + loc.Name, err = rd.ReadString() + if err != nil { + return err + } + if cmd.opt.WithDist { + loc.Dist, err = rd.ReadFloat() + if err != nil { + return err + } + } + if cmd.opt.WithHash { + loc.GeoHash, err = rd.ReadInt() + if err != nil { + return err + } + } + if cmd.opt.WithCoord { + if err = rd.ReadFixedArrayLen(2); err != nil { + return err + } + loc.Longitude, err = rd.ReadFloat() + if err != nil { + return err + } + loc.Latitude, err = rd.ReadFloat() + if err != nil { + return err + } + } + + cmd.val[i] = loc + } + + return nil +} + +func (cmd *GeoSearchLocationCmd) Clone() Cmder { + var opt *GeoSearchLocationQuery + if cmd.opt != nil { + opt = &GeoSearchLocationQuery{ + GeoSearchQuery: GeoSearchQuery{ + Member: cmd.opt.Member, + Longitude: cmd.opt.Longitude, + Latitude: cmd.opt.Latitude, + Radius: cmd.opt.Radius, + RadiusUnit: cmd.opt.RadiusUnit, + BoxWidth: cmd.opt.BoxWidth, + BoxHeight: cmd.opt.BoxHeight, + BoxUnit: cmd.opt.BoxUnit, + Sort: cmd.opt.Sort, + Count: cmd.opt.Count, + CountAny: cmd.opt.CountAny, + }, + WithCoord: cmd.opt.WithCoord, + WithDist: cmd.opt.WithDist, + WithHash: cmd.opt.WithHash, + } + } + var val []GeoLocation + if cmd.val != nil { + val = make([]GeoLocation, len(cmd.val)) + copy(val, cmd.val) + } + return &GeoSearchLocationCmd{ + baseCmd: cmd.cloneBaseCmd(), + opt: opt, + val: val, + } +} + +//------------------------------------------------------------------------------ + +type GeoPos struct { + Longitude, Latitude float64 +} + +type GeoPosCmd struct { + baseCmd + + val []*GeoPos +} + +var _ Cmder = (*GeoPosCmd)(nil) + +func NewGeoPosCmd(ctx context.Context, args ...interface{}) *GeoPosCmd { + return &GeoPosCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeGeoPos, + }, + } +} + +func (cmd *GeoPosCmd) SetVal(val []*GeoPos) { + cmd.val = val +} + +func (cmd *GeoPosCmd) Val() []*GeoPos { + return cmd.val +} + +func (cmd *GeoPosCmd) Result() ([]*GeoPos, error) { + return cmd.val, cmd.err +} + +func (cmd *GeoPosCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *GeoPosCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val = make([]*GeoPos, n) + + for i := 0; i < len(cmd.val); i++ { + err = rd.ReadFixedArrayLen(2) + if err != nil { + if err == Nil { + cmd.val[i] = nil + continue + } + return err + } + + longitude, err := rd.ReadFloat() + if err != nil { + return err + } + latitude, err := rd.ReadFloat() + if err != nil { + return err + } + + cmd.val[i] = &GeoPos{ + Longitude: longitude, + Latitude: latitude, + } + } + + return nil +} + +func (cmd *GeoPosCmd) Clone() Cmder { + var val []*GeoPos + if cmd.val != nil { + val = make([]*GeoPos, len(cmd.val)) + for i, pos := range cmd.val { + if pos != nil { + val[i] = &GeoPos{ + Longitude: pos.Longitude, + Latitude: pos.Latitude, + } + } + } + } + return &GeoPosCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type CommandInfo struct { + Name string + Arity int8 + Flags []string + ACLFlags []string + FirstKeyPos int8 + LastKeyPos int8 + StepCount int8 + ReadOnly bool + CommandPolicy *routing.CommandPolicy +} + +type CommandsInfoCmd struct { + baseCmd + + val map[string]*CommandInfo +} + +var _ Cmder = (*CommandsInfoCmd)(nil) + +func NewCommandsInfoCmd(ctx context.Context, args ...interface{}) *CommandsInfoCmd { + return &CommandsInfoCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeCommandsInfo, + }, + } +} + +func (cmd *CommandsInfoCmd) SetVal(val map[string]*CommandInfo) { + cmd.val = val +} + +func (cmd *CommandsInfoCmd) Val() map[string]*CommandInfo { + return cmd.val +} + +func (cmd *CommandsInfoCmd) Result() (map[string]*CommandInfo, error) { + return cmd.val, cmd.err +} + +func (cmd *CommandsInfoCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *CommandsInfoCmd) readReply(rd *proto.Reader) error { + const numArgRedis5 = 6 + const numArgRedis6 = 7 + const numArgRedis7 = 10 // Also matches redis 8 + + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val = make(map[string]*CommandInfo, n) + + for i := 0; i < n; i++ { + nn, err := rd.ReadArrayLen() + if err != nil { + return err + } + + switch nn { + case numArgRedis5, numArgRedis6, numArgRedis7: + // ok + default: + return fmt.Errorf("redis: got %d elements in COMMAND reply, wanted 6/7/10", nn) + } + + cmdInfo := &CommandInfo{} + if cmdInfo.Name, err = rd.ReadString(); err != nil { + return err + } + + arity, err := rd.ReadInt() + if err != nil { + return err + } + cmdInfo.Arity = int8(arity) + + flagLen, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmdInfo.Flags = make([]string, flagLen) + for f := 0; f < len(cmdInfo.Flags); f++ { + switch s, err := rd.ReadString(); { + case err == Nil: + cmdInfo.Flags[f] = "" + case err != nil: + return err + default: + if !cmdInfo.ReadOnly && s == "readonly" { + cmdInfo.ReadOnly = true + } + cmdInfo.Flags[f] = s + } + } + + firstKeyPos, err := rd.ReadInt() + if err != nil { + return err + } + cmdInfo.FirstKeyPos = int8(firstKeyPos) + + lastKeyPos, err := rd.ReadInt() + if err != nil { + return err + } + cmdInfo.LastKeyPos = int8(lastKeyPos) + + stepCount, err := rd.ReadInt() + if err != nil { + return err + } + cmdInfo.StepCount = int8(stepCount) + + if nn >= numArgRedis6 { + aclFlagLen, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmdInfo.ACLFlags = make([]string, aclFlagLen) + for f := 0; f < len(cmdInfo.ACLFlags); f++ { + switch s, err := rd.ReadString(); { + case err == Nil: + cmdInfo.ACLFlags[f] = "" + case err != nil: + return err + default: + cmdInfo.ACLFlags[f] = s + } + } + } + + if nn >= numArgRedis7 { + // The 8th argument is an array of tips. + tipsLen, err := rd.ReadArrayLen() + if err != nil { + return err + } + + rawTips := make(map[string]string, tipsLen) + if cmdInfo.ReadOnly { + rawTips[routing.ReadOnlyCMD] = "" + } + for f := 0; f < tipsLen; f++ { + tip, err := rd.ReadString() + if err != nil { + return err + } + + k, v, ok := strings.Cut(tip, ":") + if !ok { + // Handle tips that don't have a colon (like "nondeterministic_output") + rawTips[tip] = "" + } else { + // Handle normal key:value tips + rawTips[k] = v + } + } + cmdInfo.CommandPolicy = parseCommandPolicies(rawTips, cmdInfo.FirstKeyPos) + + if err := rd.DiscardNext(); err != nil { + return err + } + if err := rd.DiscardNext(); err != nil { + return err + } + } + + cmd.val[cmdInfo.Name] = cmdInfo + } + + return nil +} + +func (cmd *CommandsInfoCmd) Clone() Cmder { + var val map[string]*CommandInfo + if cmd.val != nil { + val = make(map[string]*CommandInfo, len(cmd.val)) + for k, v := range cmd.val { + if v != nil { + newInfo := &CommandInfo{ + Name: v.Name, + Arity: v.Arity, + FirstKeyPos: v.FirstKeyPos, + LastKeyPos: v.LastKeyPos, + StepCount: v.StepCount, + ReadOnly: v.ReadOnly, + CommandPolicy: v.CommandPolicy, // CommandPolicy can be shared as it's immutable + } + if v.Flags != nil { + newInfo.Flags = make([]string, len(v.Flags)) + copy(newInfo.Flags, v.Flags) + } + if v.ACLFlags != nil { + newInfo.ACLFlags = make([]string, len(v.ACLFlags)) + copy(newInfo.ACLFlags, v.ACLFlags) + } + val[k] = newInfo + } + } + } + return &CommandsInfoCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type cmdsInfoCache struct { + fn func(ctx context.Context) (map[string]*CommandInfo, error) + + once internal.Once + refreshLock sync.Mutex + cmds map[string]*CommandInfo +} + +func newCmdsInfoCache(fn func(ctx context.Context) (map[string]*CommandInfo, error)) *cmdsInfoCache { + return &cmdsInfoCache{ + fn: fn, + } +} + +func (c *cmdsInfoCache) Get(ctx context.Context) (map[string]*CommandInfo, error) { + c.refreshLock.Lock() + defer c.refreshLock.Unlock() + + err := c.once.Do(func() error { + cmds, err := c.fn(ctx) + if err != nil { + return err + } + + lowerCmds := make(map[string]*CommandInfo, len(cmds)) + + // Extensions have cmd names in upper case. Convert them to lower case. + for k, v := range cmds { + lowerCmds[internal.ToLower(k)] = v + } + + c.cmds = lowerCmds + return nil + }) + return c.cmds, err +} + +func (c *cmdsInfoCache) Refresh() { + c.refreshLock.Lock() + defer c.refreshLock.Unlock() + + c.once = internal.Once{} +} + +// ------------------------------------------------------------------------------ +const requestPolicy = "request_policy" +const responsePolicy = "response_policy" + +func parseCommandPolicies(commandInfoTips map[string]string, firstKeyPos int8) *routing.CommandPolicy { + req := routing.ReqDefault + resp := routing.RespDefaultKeyless + if firstKeyPos > 0 { + resp = routing.RespDefaultHashSlot + } + + tips := make(map[string]string, len(commandInfoTips)) + for k, v := range commandInfoTips { + if k == requestPolicy { + if p, err := routing.ParseRequestPolicy(v); err == nil { + req = p + } + continue + } + if k == responsePolicy { + if p, err := routing.ParseResponsePolicy(v); err == nil { + resp = p + } + continue + } + tips[k] = v + } + + return &routing.CommandPolicy{Request: req, Response: resp, Tips: tips} +} + +//------------------------------------------------------------------------------ + +type SlowLog struct { + ID int64 + Time time.Time + Duration time.Duration + Args []string + // These are also optional fields emitted only by Redis 4.0 or greater: + // https://redis.io/commands/slowlog#output-format + ClientAddr string + ClientName string +} + +type SlowLogCmd struct { + baseCmd + + val []SlowLog +} + +var _ Cmder = (*SlowLogCmd)(nil) + +func NewSlowLogCmd(ctx context.Context, args ...interface{}) *SlowLogCmd { + return &SlowLogCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeSlowLog, + }, + } +} + +func (cmd *SlowLogCmd) SetVal(val []SlowLog) { + cmd.val = val +} + +func (cmd *SlowLogCmd) Val() []SlowLog { + return cmd.val +} + +func (cmd *SlowLogCmd) Result() ([]SlowLog, error) { + return cmd.val, cmd.err +} + +func (cmd *SlowLogCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *SlowLogCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val = make([]SlowLog, n) + + for i := 0; i < len(cmd.val); i++ { + nn, err := rd.ReadArrayLen() + if err != nil { + return err + } + if nn < 4 { + return fmt.Errorf("redis: got %d elements in slowlog get, expected at least 4", nn) + } + + if cmd.val[i].ID, err = rd.ReadInt(); err != nil { + return err + } + + createdAt, err := rd.ReadInt() + if err != nil { + return err + } + cmd.val[i].Time = time.Unix(createdAt, 0) + + costs, err := rd.ReadInt() + if err != nil { + return err + } + cmd.val[i].Duration = time.Duration(costs) * time.Microsecond + + cmdLen, err := rd.ReadArrayLen() + if err != nil { + return err + } + if cmdLen < 1 { + return fmt.Errorf("redis: got %d elements commands reply in slowlog get, expected at least 1", cmdLen) + } + + cmd.val[i].Args = make([]string, cmdLen) + for f := 0; f < len(cmd.val[i].Args); f++ { + cmd.val[i].Args[f], err = rd.ReadString() + if err != nil { + return err + } + } + + if nn >= 5 { + if cmd.val[i].ClientAddr, err = rd.ReadString(); err != nil { + return err + } + } + + if nn >= 6 { + if cmd.val[i].ClientName, err = rd.ReadString(); err != nil { + return err + } + } + } + + return nil +} + +func (cmd *SlowLogCmd) Clone() Cmder { + var val []SlowLog + if cmd.val != nil { + val = make([]SlowLog, len(cmd.val)) + for i, log := range cmd.val { + val[i] = SlowLog{ + ID: log.ID, + Time: log.Time, + Duration: log.Duration, + ClientAddr: log.ClientAddr, + ClientName: log.ClientName, + } + if log.Args != nil { + val[i].Args = make([]string, len(log.Args)) + copy(val[i].Args, log.Args) + } + } + } + return &SlowLogCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//----------------------------------------------------------------------- + +type Latency struct { + Name string + Time time.Time + Latest time.Duration + Max time.Duration +} + +type LatencyCmd struct { + baseCmd + val []Latency +} + +var _ Cmder = (*LatencyCmd)(nil) + +func NewLatencyCmd(ctx context.Context, args ...interface{}) *LatencyCmd { + return &LatencyCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + }, + } +} + +func (cmd *LatencyCmd) SetVal(val []Latency) { + cmd.val = val +} + +func (cmd *LatencyCmd) Val() []Latency { + return cmd.val +} + +func (cmd *LatencyCmd) Result() ([]Latency, error) { + return cmd.val, cmd.err +} + +func (cmd *LatencyCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *LatencyCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val = make([]Latency, n) + for i := 0; i < len(cmd.val); i++ { + nn, err := rd.ReadArrayLen() + if err != nil { + return err + } + if nn < 3 { + return fmt.Errorf("redis: got %d elements in latency get, expected at least 3", nn) + } + if cmd.val[i].Name, err = rd.ReadString(); err != nil { + return err + } + createdAt, err := rd.ReadInt() + if err != nil { + return err + } + cmd.val[i].Time = time.Unix(createdAt, 0) + latest, err := rd.ReadInt() + if err != nil { + return err + } + cmd.val[i].Latest = time.Duration(latest) * time.Millisecond + maximum, err := rd.ReadInt() + if err != nil { + return err + } + cmd.val[i].Max = time.Duration(maximum) * time.Millisecond + } + return nil +} + +func (cmd *LatencyCmd) Clone() Cmder { + var val []Latency + if cmd.val != nil { + val = make([]Latency, len(cmd.val)) + copy(val, cmd.val) + } + return &LatencyCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//----------------------------------------------------------------------- + +// HotKeysSlotRange represents a slot or slot range in the response. +// Single element slice = individual slot, two element slice = slot range [start, end]. +type HotKeysSlotRange []int64 + +// HotKeysKeyEntry represents a hot key entry with its metric value. +type HotKeysKeyEntry struct { + Key string + Value interface{} // Can be int64 or string +} + +// HotKeysResult represents the response data from HOTKEYS GET command. +// Field names match the Redis response format. +type HotKeysResult struct { + TrackingActive bool + SampleRatio uint8 + SelectedSlots []HotKeysSlotRange + SampledCommandsSelectedSlots time.Duration // Present when sample-ratio > 1 and selected-slots is not empty + AllCommandsSelectedSlots time.Duration // Present when selected-slots is not empty + AllCommandsAllSlots time.Duration + NetBytesSampledCommandsSelectedSlots int64 // Present when sample-ratio > 1 and selected-slots is not empty + NetBytesAllCommandsSelectedSlots int64 // Present when selected-slots is not empty + NetBytesAllCommandsAllSlots int64 + CollectionStartTime time.Time + CollectionDuration time.Duration + UsedCPUSys time.Duration + UsedCPUUser time.Duration + TotalNetBytes int64 + ByCPUTime []HotKeysKeyEntry + ByNetBytes []HotKeysKeyEntry +} + +type HotKeysCmd struct { + baseCmd + + val *HotKeysResult +} + +var _ Cmder = (*HotKeysCmd)(nil) + +func NewHotKeysCmd(ctx context.Context, args ...interface{}) *HotKeysCmd { + return &HotKeysCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeHotKeys, + }, + } +} + +func (cmd *HotKeysCmd) SetVal(val *HotKeysResult) { + cmd.val = val +} + +func (cmd *HotKeysCmd) Val() *HotKeysResult { + return cmd.val +} + +func (cmd *HotKeysCmd) Result() (*HotKeysResult, error) { + return cmd.val, cmd.err +} + +func (cmd *HotKeysCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *HotKeysCmd) readReply(rd *proto.Reader) error { + // HOTKEYS GET response is wrapped in an array for aggregation support + arrayLen, err := rd.ReadArrayLen() + if err != nil { + return err + } + + if arrayLen == 0 { + // Empty array means no tracking was started or after reset + cmd.val = nil + return nil + } + + // Read the first (and typically only) element which is a map + n, err := rd.ReadMapLen() + if err != nil { + return err + } + + result := &HotKeysResult{} + data := make(map[string]interface{}, n) + + for i := 0; i < n; i++ { + k, err := rd.ReadString() + if err != nil { + return err + } + v, err := rd.ReadReply() + if err != nil { + if err == Nil { + data[k] = Nil + continue + } + if err, ok := err.(proto.RedisError); ok { + data[k] = err + continue + } + return err + } + data[k] = v + } + + if v, ok := data["tracking-active"].(int64); ok { + result.TrackingActive = v == 1 + } + if v, ok := data["sample-ratio"].(int64); ok { + result.SampleRatio = uint8(v) + } + if v, ok := data["selected-slots"].([]interface{}); ok { + result.SelectedSlots = make([]HotKeysSlotRange, 0, len(v)) + for _, slot := range v { + switch s := slot.(type) { + case int64: + // Single slot + result.SelectedSlots = append(result.SelectedSlots, HotKeysSlotRange{s}) + case []interface{}: + // Slot range + slotRange := make(HotKeysSlotRange, 0, len(s)) + for _, sr := range s { + if val, ok := sr.(int64); ok { + slotRange = append(slotRange, val) + } + } + result.SelectedSlots = append(result.SelectedSlots, slotRange) + } + } + } + if v, ok := data["sampled-commands-selected-slots-us"].(int64); ok { + result.SampledCommandsSelectedSlots = time.Duration(v) * time.Microsecond + } + if v, ok := data["all-commands-selected-slots-us"].(int64); ok { + result.AllCommandsSelectedSlots = time.Duration(v) * time.Microsecond + } + if v, ok := data["all-commands-all-slots-us"].(int64); ok { + result.AllCommandsAllSlots = time.Duration(v) * time.Microsecond + } + if v, ok := data["net-bytes-sampled-commands-selected-slots"].(int64); ok { + result.NetBytesSampledCommandsSelectedSlots = v + } + if v, ok := data["net-bytes-all-commands-selected-slots"].(int64); ok { + result.NetBytesAllCommandsSelectedSlots = v + } + if v, ok := data["net-bytes-all-commands-all-slots"].(int64); ok { + result.NetBytesAllCommandsAllSlots = v + } + if v, ok := data["collection-start-time-unix-ms"].(int64); ok { + result.CollectionStartTime = time.UnixMilli(v) + } + if v, ok := data["collection-duration-ms"].(int64); ok { + result.CollectionDuration = time.Duration(v) * time.Millisecond + } + if v, ok := data["used-cpu-sys-ms"].(int64); ok { + result.UsedCPUSys = time.Duration(v) * time.Millisecond + } + if v, ok := data["used-cpu-user-ms"].(int64); ok { + result.UsedCPUUser = time.Duration(v) * time.Millisecond + } + if v, ok := data["total-net-bytes"].(int64); ok { + result.TotalNetBytes = v + } + + if v, ok := data["by-cpu-time-us"].([]interface{}); ok { + result.ByCPUTime = parseHotKeysKeyEntries(v) + } + + if v, ok := data["by-net-bytes"].([]interface{}); ok { + result.ByNetBytes = parseHotKeysKeyEntries(v) + } + + cmd.val = result + return nil +} + +// parseHotKeysKeyEntries parses the key-value pairs from HOTKEYS GET response. +func parseHotKeysKeyEntries(v []interface{}) []HotKeysKeyEntry { + entries := make([]HotKeysKeyEntry, 0, len(v)/2) + for i := 0; i < len(v); i += 2 { + if i+1 < len(v) { + key, keyOk := v[i].(string) + if keyOk { + entries = append(entries, HotKeysKeyEntry{ + Key: key, + Value: v[i+1], // Can be int64 or string + }) + } + } + } + return entries +} + +func (cmd *HotKeysCmd) Clone() Cmder { + var val *HotKeysResult + if cmd.val != nil { + val = &HotKeysResult{ + TrackingActive: cmd.val.TrackingActive, + SampleRatio: cmd.val.SampleRatio, + SampledCommandsSelectedSlots: cmd.val.SampledCommandsSelectedSlots, + AllCommandsSelectedSlots: cmd.val.AllCommandsSelectedSlots, + AllCommandsAllSlots: cmd.val.AllCommandsAllSlots, + NetBytesSampledCommandsSelectedSlots: cmd.val.NetBytesSampledCommandsSelectedSlots, + NetBytesAllCommandsSelectedSlots: cmd.val.NetBytesAllCommandsSelectedSlots, + NetBytesAllCommandsAllSlots: cmd.val.NetBytesAllCommandsAllSlots, + CollectionStartTime: cmd.val.CollectionStartTime, + CollectionDuration: cmd.val.CollectionDuration, + UsedCPUSys: cmd.val.UsedCPUSys, + UsedCPUUser: cmd.val.UsedCPUUser, + TotalNetBytes: cmd.val.TotalNetBytes, + } + if cmd.val.SelectedSlots != nil { + val.SelectedSlots = make([]HotKeysSlotRange, len(cmd.val.SelectedSlots)) + for i, sr := range cmd.val.SelectedSlots { + val.SelectedSlots[i] = make(HotKeysSlotRange, len(sr)) + copy(val.SelectedSlots[i], sr) + } + } + if cmd.val.ByCPUTime != nil { + val.ByCPUTime = make([]HotKeysKeyEntry, len(cmd.val.ByCPUTime)) + copy(val.ByCPUTime, cmd.val.ByCPUTime) + } + if cmd.val.ByNetBytes != nil { + val.ByNetBytes = make([]HotKeysKeyEntry, len(cmd.val.ByNetBytes)) + copy(val.ByNetBytes, cmd.val.ByNetBytes) + } + } + return &HotKeysCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//----------------------------------------------------------------------- + +type MapStringInterfaceCmd struct { + baseCmd + + val map[string]interface{} +} + +var _ Cmder = (*MapStringInterfaceCmd)(nil) + +func NewMapStringInterfaceCmd(ctx context.Context, args ...interface{}) *MapStringInterfaceCmd { + return &MapStringInterfaceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeMapStringInterface, + }, + } +} + +func (cmd *MapStringInterfaceCmd) SetVal(val map[string]interface{}) { + cmd.val = val +} + +func (cmd *MapStringInterfaceCmd) Val() map[string]interface{} { + return cmd.val +} + +func (cmd *MapStringInterfaceCmd) Result() (map[string]interface{}, error) { + return cmd.val, cmd.err +} + +func (cmd *MapStringInterfaceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *MapStringInterfaceCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadMapLen() + if err != nil { + return err + } + + cmd.val = make(map[string]interface{}, n) + for i := 0; i < n; i++ { + k, err := rd.ReadString() + if err != nil { + return err + } + v, err := rd.ReadReply() + if err != nil { + if err == Nil { + cmd.val[k] = Nil + continue + } + if err, ok := err.(proto.RedisError); ok { + cmd.val[k] = err + continue + } + return err + } + cmd.val[k] = v + } + return nil +} + +func (cmd *MapStringInterfaceCmd) Clone() Cmder { + var val map[string]interface{} + if cmd.val != nil { + val = make(map[string]interface{}, len(cmd.val)) + for k, v := range cmd.val { + val[k] = v + } + } + return &MapStringInterfaceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//----------------------------------------------------------------------- + +type MapStringStringSliceCmd struct { + baseCmd + + val []map[string]string +} + +var _ Cmder = (*MapStringStringSliceCmd)(nil) + +func NewMapStringStringSliceCmd(ctx context.Context, args ...interface{}) *MapStringStringSliceCmd { + return &MapStringStringSliceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeMapStringStringSlice, + }, + } +} + +func (cmd *MapStringStringSliceCmd) SetVal(val []map[string]string) { + cmd.val = val +} + +func (cmd *MapStringStringSliceCmd) Val() []map[string]string { + return cmd.val +} + +func (cmd *MapStringStringSliceCmd) Result() ([]map[string]string, error) { + return cmd.val, cmd.err +} + +func (cmd *MapStringStringSliceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *MapStringStringSliceCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + + cmd.val = make([]map[string]string, n) + for i := 0; i < n; i++ { + nn, err := rd.ReadMapLen() + if err != nil { + return err + } + cmd.val[i] = make(map[string]string, nn) + for f := 0; f < nn; f++ { + k, err := rd.ReadString() + if err != nil { + return err + } + + v, err := rd.ReadString() + if err != nil { + return err + } + cmd.val[i][k] = v + } + } + return nil +} + +func (cmd *MapStringStringSliceCmd) Clone() Cmder { + var val []map[string]string + if cmd.val != nil { + val = make([]map[string]string, len(cmd.val)) + for i, m := range cmd.val { + if m != nil { + val[i] = make(map[string]string, len(m)) + for k, v := range m { + val[i][k] = v + } + } + } + } + return &MapStringStringSliceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +// ----------------------------------------------------------------------- + +// MapMapStringInterfaceCmd represents a command that returns a map of strings to interface{}. +type MapMapStringInterfaceCmd struct { + baseCmd + val map[string]interface{} +} + +func NewMapMapStringInterfaceCmd(ctx context.Context, args ...interface{}) *MapMapStringInterfaceCmd { + return &MapMapStringInterfaceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeMapMapStringInterface, + }, + } +} + +func (cmd *MapMapStringInterfaceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *MapMapStringInterfaceCmd) SetVal(val map[string]interface{}) { + cmd.val = val +} + +func (cmd *MapMapStringInterfaceCmd) Result() (map[string]interface{}, error) { + return cmd.val, cmd.err +} + +func (cmd *MapMapStringInterfaceCmd) Val() map[string]interface{} { + return cmd.val +} + +// readReply will try to parse the reply from the proto.Reader for both resp2 and resp3 +func (cmd *MapMapStringInterfaceCmd) readReply(rd *proto.Reader) (err error) { + data, err := rd.ReadReply() + if err != nil { + return err + } + resultMap := map[string]interface{}{} + + switch midResponse := data.(type) { + case map[interface{}]interface{}: // resp3 will return map + for k, v := range midResponse { + stringKey, ok := k.(string) + if !ok { + return fmt.Errorf("redis: invalid map key %#v", k) + } + resultMap[stringKey] = v + } + case []interface{}: // resp2 will return array of arrays + n := len(midResponse) + for i := 0; i < n; i++ { + finalArr, ok := midResponse[i].([]interface{}) // final array that we need to transform to map + if !ok { + return fmt.Errorf("redis: unexpected response %#v", data) + } + m := len(finalArr) + if m%2 != 0 { // since this should be map, keys should be even number + return fmt.Errorf("redis: unexpected response %#v", data) + } + + for j := 0; j < m; j += 2 { + stringKey, ok := finalArr[j].(string) // the first one + if !ok { + return fmt.Errorf("redis: invalid map key %#v", finalArr[i]) + } + resultMap[stringKey] = finalArr[j+1] // second one is value + } + } + default: + return fmt.Errorf("redis: unexpected response %#v", data) + } + + cmd.val = resultMap + return nil +} + +func (cmd *MapMapStringInterfaceCmd) Clone() Cmder { + var val map[string]interface{} + if cmd.val != nil { + val = make(map[string]interface{}, len(cmd.val)) + for k, v := range cmd.val { + val[k] = v + } + } + return &MapMapStringInterfaceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//----------------------------------------------------------------------- + +type MapStringInterfaceSliceCmd struct { + baseCmd + + val []map[string]interface{} +} + +var _ Cmder = (*MapStringInterfaceSliceCmd)(nil) + +func NewMapStringInterfaceSliceCmd(ctx context.Context, args ...interface{}) *MapStringInterfaceSliceCmd { + return &MapStringInterfaceSliceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeMapStringInterfaceSlice, + }, + } +} + +func (cmd *MapStringInterfaceSliceCmd) SetVal(val []map[string]interface{}) { + cmd.val = val +} + +func (cmd *MapStringInterfaceSliceCmd) Val() []map[string]interface{} { + return cmd.val +} + +func (cmd *MapStringInterfaceSliceCmd) Result() ([]map[string]interface{}, error) { + return cmd.val, cmd.err +} + +func (cmd *MapStringInterfaceSliceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *MapStringInterfaceSliceCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + + cmd.val = make([]map[string]interface{}, n) + for i := 0; i < n; i++ { + nn, err := rd.ReadMapLen() + if err != nil { + return err + } + cmd.val[i] = make(map[string]interface{}, nn) + for f := 0; f < nn; f++ { + k, err := rd.ReadString() + if err != nil { + return err + } + v, err := rd.ReadReply() + if err != nil { + if err != Nil { + return err + } + } + cmd.val[i][k] = v + } + } + return nil +} + +func (cmd *MapStringInterfaceSliceCmd) Clone() Cmder { + var val []map[string]interface{} + if cmd.val != nil { + val = make([]map[string]interface{}, len(cmd.val)) + for i, m := range cmd.val { + if m != nil { + val[i] = make(map[string]interface{}, len(m)) + for k, v := range m { + val[i][k] = v + } + } + } + } + return &MapStringInterfaceSliceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +type KeyValuesCmd struct { + baseCmd + + key string + val []string +} + +var _ Cmder = (*KeyValuesCmd)(nil) + +func NewKeyValuesCmd(ctx context.Context, args ...interface{}) *KeyValuesCmd { + return &KeyValuesCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeKeyValues, + }, + } +} + +func (cmd *KeyValuesCmd) SetVal(key string, val []string) { + cmd.key = key + cmd.val = val +} + +func (cmd *KeyValuesCmd) Val() (string, []string) { + return cmd.key, cmd.val +} + +func (cmd *KeyValuesCmd) Result() (string, []string, error) { + return cmd.key, cmd.val, cmd.err +} + +func (cmd *KeyValuesCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *KeyValuesCmd) readReply(rd *proto.Reader) (err error) { + if err = rd.ReadFixedArrayLen(2); err != nil { + return err + } + + cmd.key, err = rd.ReadString() + if err != nil { + return err + } + + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val = make([]string, n) + for i := 0; i < n; i++ { + cmd.val[i], err = rd.ReadString() + if err != nil { + return err + } + } + + return nil +} + +func (cmd *KeyValuesCmd) Clone() Cmder { + var val []string + if cmd.val != nil { + val = make([]string, len(cmd.val)) + copy(val, cmd.val) + } + return &KeyValuesCmd{ + baseCmd: cmd.cloneBaseCmd(), + key: cmd.key, + val: val, + } +} + +//------------------------------------------------------------------------------ + +type ZSliceWithKeyCmd struct { + baseCmd + + key string + val []Z +} + +var _ Cmder = (*ZSliceWithKeyCmd)(nil) + +func NewZSliceWithKeyCmd(ctx context.Context, args ...interface{}) *ZSliceWithKeyCmd { + return &ZSliceWithKeyCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeZSliceWithKey, + }, + } +} + +func (cmd *ZSliceWithKeyCmd) SetVal(key string, val []Z) { + cmd.key = key + cmd.val = val +} + +func (cmd *ZSliceWithKeyCmd) Val() (string, []Z) { + return cmd.key, cmd.val +} + +func (cmd *ZSliceWithKeyCmd) Result() (string, []Z, error) { + return cmd.key, cmd.val, cmd.err +} + +func (cmd *ZSliceWithKeyCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *ZSliceWithKeyCmd) readReply(rd *proto.Reader) (err error) { + if err = rd.ReadFixedArrayLen(2); err != nil { + return err + } + + cmd.key, err = rd.ReadString() + if err != nil { + return err + } + + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + + typ, err := rd.PeekReplyType() + if err != nil { + return err + } + array := typ == proto.RespArray + + if array { + cmd.val = make([]Z, n) + } else { + cmd.val = make([]Z, n/2) + } + + for i := 0; i < len(cmd.val); i++ { + if array { + if err = rd.ReadFixedArrayLen(2); err != nil { + return err + } + } + + if cmd.val[i].Member, err = rd.ReadString(); err != nil { + return err + } + + if cmd.val[i].Score, err = rd.ReadFloat(); err != nil { + return err + } + } + + return nil +} + +func (cmd *ZSliceWithKeyCmd) Clone() Cmder { + var val []Z + if cmd.val != nil { + val = make([]Z, len(cmd.val)) + copy(val, cmd.val) + } + return &ZSliceWithKeyCmd{ + baseCmd: cmd.cloneBaseCmd(), + key: cmd.key, + val: val, + } +} + +type Function struct { + Name string + Description string + Flags []string +} + +type Library struct { + Name string + Engine string + Functions []Function + Code string +} + +type FunctionListCmd struct { + baseCmd + + val []Library +} + +var _ Cmder = (*FunctionListCmd)(nil) + +func NewFunctionListCmd(ctx context.Context, args ...interface{}) *FunctionListCmd { + return &FunctionListCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeFunctionList, + }, + } +} + +func (cmd *FunctionListCmd) SetVal(val []Library) { + cmd.val = val +} + +func (cmd *FunctionListCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *FunctionListCmd) Val() []Library { + return cmd.val +} + +func (cmd *FunctionListCmd) Result() ([]Library, error) { + return cmd.val, cmd.err +} + +func (cmd *FunctionListCmd) First() (*Library, error) { + if cmd.err != nil { + return nil, cmd.err + } + if len(cmd.val) > 0 { + return &cmd.val[0], nil + } + return nil, Nil +} + +func (cmd *FunctionListCmd) readReply(rd *proto.Reader) (err error) { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + + libraries := make([]Library, n) + for i := 0; i < n; i++ { + nn, err := rd.ReadMapLen() + if err != nil { + return err + } + + library := Library{} + for f := 0; f < nn; f++ { + key, err := rd.ReadString() + if err != nil { + return err + } + + switch key { + case "library_name": + library.Name, err = rd.ReadString() + case "engine": + library.Engine, err = rd.ReadString() + case "functions": + library.Functions, err = cmd.readFunctions(rd) + case "library_code": + library.Code, err = rd.ReadString() + default: + return fmt.Errorf("redis: function list unexpected key %s", key) + } + + if err != nil { + return err + } + } + + libraries[i] = library + } + cmd.val = libraries + return nil +} + +func (cmd *FunctionListCmd) readFunctions(rd *proto.Reader) ([]Function, error) { + n, err := rd.ReadArrayLen() + if err != nil { + return nil, err + } + + functions := make([]Function, n) + for i := 0; i < n; i++ { + nn, err := rd.ReadMapLen() + if err != nil { + return nil, err + } + + function := Function{} + for f := 0; f < nn; f++ { + key, err := rd.ReadString() + if err != nil { + return nil, err + } + + switch key { + case "name": + if function.Name, err = rd.ReadString(); err != nil { + return nil, err + } + case "description": + if function.Description, err = rd.ReadString(); err != nil && err != Nil { + return nil, err + } + case "flags": + // resp set + nx, err := rd.ReadArrayLen() + if err != nil { + return nil, err + } + + function.Flags = make([]string, nx) + for j := 0; j < nx; j++ { + if function.Flags[j], err = rd.ReadString(); err != nil { + return nil, err + } + } + default: + return nil, fmt.Errorf("redis: function list unexpected key %s", key) + } + } + + functions[i] = function + } + return functions, nil +} + +func (cmd *FunctionListCmd) Clone() Cmder { + var val []Library + if cmd.val != nil { + val = make([]Library, len(cmd.val)) + for i, lib := range cmd.val { + val[i] = Library{ + Name: lib.Name, + Engine: lib.Engine, + Code: lib.Code, + } + if lib.Functions != nil { + val[i].Functions = make([]Function, len(lib.Functions)) + for j, fn := range lib.Functions { + val[i].Functions[j] = Function{ + Name: fn.Name, + Description: fn.Description, + } + if fn.Flags != nil { + val[i].Functions[j].Flags = make([]string, len(fn.Flags)) + copy(val[i].Functions[j].Flags, fn.Flags) + } + } + } + } + } + return &FunctionListCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +// FunctionStats contains information about the scripts currently executing on the server, and the available engines +// - Engines: +// Statistics about the engine like number of functions and number of libraries +// - RunningScript: +// The script currently running on the shard we're connecting to. +// For Redis Enterprise and Redis Cloud, this represents the +// function with the longest running time, across all the running functions, on all shards +// - RunningScripts +// All scripts currently running in a Redis Enterprise clustered database. +// Only available on Redis Enterprise +type FunctionStats struct { + Engines []Engine + isRunning bool + rs RunningScript + allrs []RunningScript +} + +func (fs *FunctionStats) Running() bool { + return fs.isRunning +} + +func (fs *FunctionStats) RunningScript() (RunningScript, bool) { + return fs.rs, fs.isRunning +} + +// AllRunningScripts returns all scripts currently running in a Redis Enterprise clustered database. +// Only available on Redis Enterprise +func (fs *FunctionStats) AllRunningScripts() []RunningScript { + return fs.allrs +} + +type RunningScript struct { + Name string + Command []string + Duration time.Duration +} + +type Engine struct { + Language string + LibrariesCount int64 + FunctionsCount int64 +} + +type FunctionStatsCmd struct { + baseCmd + val FunctionStats +} + +var _ Cmder = (*FunctionStatsCmd)(nil) + +func NewFunctionStatsCmd(ctx context.Context, args ...interface{}) *FunctionStatsCmd { + return &FunctionStatsCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeFunctionStats, + }, + } +} + +func (cmd *FunctionStatsCmd) SetVal(val FunctionStats) { + cmd.val = val +} + +func (cmd *FunctionStatsCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *FunctionStatsCmd) Val() FunctionStats { + return cmd.val +} + +func (cmd *FunctionStatsCmd) Result() (FunctionStats, error) { + return cmd.val, cmd.err +} + +func (cmd *FunctionStatsCmd) readReply(rd *proto.Reader) (err error) { + n, err := rd.ReadMapLen() + if err != nil { + return err + } + + var key string + var result FunctionStats + for f := 0; f < n; f++ { + key, err = rd.ReadString() + if err != nil { + return err + } + + switch key { + case "running_script": + result.rs, result.isRunning, err = cmd.readRunningScript(rd) + case "engines": + result.Engines, err = cmd.readEngines(rd) + case "all_running_scripts": // Redis Enterprise only + result.allrs, result.isRunning, err = cmd.readRunningScripts(rd) + default: + return fmt.Errorf("redis: function stats unexpected key %s", key) + } + + if err != nil { + return err + } + } + + cmd.val = result + return nil +} + +func (cmd *FunctionStatsCmd) readRunningScript(rd *proto.Reader) (RunningScript, bool, error) { + err := rd.ReadFixedMapLen(3) + if err != nil { + if err == Nil { + return RunningScript{}, false, nil + } + return RunningScript{}, false, err + } + + var runningScript RunningScript + for i := 0; i < 3; i++ { + key, err := rd.ReadString() + if err != nil { + return RunningScript{}, false, err + } + + switch key { + case "name": + runningScript.Name, err = rd.ReadString() + case "duration_ms": + runningScript.Duration, err = cmd.readDuration(rd) + case "command": + runningScript.Command, err = cmd.readCommand(rd) + default: + return RunningScript{}, false, fmt.Errorf("redis: function stats unexpected running_script key %s", key) + } + + if err != nil { + return RunningScript{}, false, err + } + } + + return runningScript, true, nil +} + +func (cmd *FunctionStatsCmd) readEngines(rd *proto.Reader) ([]Engine, error) { + n, err := rd.ReadMapLen() + if err != nil { + return nil, err + } + + engines := make([]Engine, 0, n) + for i := 0; i < n; i++ { + engine := Engine{} + engine.Language, err = rd.ReadString() + if err != nil { + return nil, err + } + + err = rd.ReadFixedMapLen(2) + if err != nil { + return nil, fmt.Errorf("redis: function stats unexpected %s engine map length", engine.Language) + } + + for i := 0; i < 2; i++ { + key, err := rd.ReadString() + switch key { + case "libraries_count": + engine.LibrariesCount, err = rd.ReadInt() + case "functions_count": + engine.FunctionsCount, err = rd.ReadInt() + } + if err != nil { + return nil, err + } + } + + engines = append(engines, engine) + } + return engines, nil +} + +func (cmd *FunctionStatsCmd) readDuration(rd *proto.Reader) (time.Duration, error) { + t, err := rd.ReadInt() + if err != nil { + return time.Duration(0), err + } + return time.Duration(t) * time.Millisecond, nil +} + +func (cmd *FunctionStatsCmd) readCommand(rd *proto.Reader) ([]string, error) { + n, err := rd.ReadArrayLen() + if err != nil { + return nil, err + } + + command := make([]string, 0, n) + for i := 0; i < n; i++ { + x, err := rd.ReadString() + if err != nil { + return nil, err + } + command = append(command, x) + } + + return command, nil +} + +func (cmd *FunctionStatsCmd) readRunningScripts(rd *proto.Reader) ([]RunningScript, bool, error) { + n, err := rd.ReadArrayLen() + if err != nil { + return nil, false, err + } + + runningScripts := make([]RunningScript, 0, n) + for i := 0; i < n; i++ { + rs, _, err := cmd.readRunningScript(rd) + if err != nil { + return nil, false, err + } + runningScripts = append(runningScripts, rs) + } + + return runningScripts, len(runningScripts) > 0, nil +} + +func (cmd *FunctionStatsCmd) Clone() Cmder { + val := FunctionStats{ + isRunning: cmd.val.isRunning, + rs: cmd.val.rs, // RunningScript is a simple struct, can be copied directly + } + if cmd.val.Engines != nil { + val.Engines = make([]Engine, len(cmd.val.Engines)) + copy(val.Engines, cmd.val.Engines) + } + if cmd.val.allrs != nil { + val.allrs = make([]RunningScript, len(cmd.val.allrs)) + for i, rs := range cmd.val.allrs { + val.allrs[i] = RunningScript{ + Name: rs.Name, + Duration: rs.Duration, + } + if rs.Command != nil { + val.allrs[i].Command = make([]string, len(rs.Command)) + copy(val.allrs[i].Command, rs.Command) + } + } + } + return &FunctionStatsCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +//------------------------------------------------------------------------------ + +// LCSQuery is a parameter used for the LCS command +type LCSQuery struct { + Key1 string + Key2 string + Len bool + Idx bool + MinMatchLen int + WithMatchLen bool +} + +// LCSMatch is the result set of the LCS command. +type LCSMatch struct { + MatchString string + Matches []LCSMatchedPosition + Len int64 +} + +type LCSMatchedPosition struct { + Key1 LCSPosition + Key2 LCSPosition + + // only for withMatchLen is true + MatchLen int64 +} + +type LCSPosition struct { + Start int64 + End int64 +} + +type LCSCmd struct { + baseCmd + + // 1: match string + // 2: match len + // 3: match idx LCSMatch + readType uint8 + val *LCSMatch +} + +func NewLCSCmd(ctx context.Context, q *LCSQuery) *LCSCmd { + args := make([]interface{}, 3, 7) + args[0] = "lcs" + args[1] = q.Key1 + args[2] = q.Key2 + + cmd := &LCSCmd{readType: 1} + if q.Len { + cmd.readType = 2 + args = append(args, "len") + } else if q.Idx { + cmd.readType = 3 + args = append(args, "idx") + if q.MinMatchLen != 0 { + args = append(args, "minmatchlen", q.MinMatchLen) + } + if q.WithMatchLen { + args = append(args, "withmatchlen") + } + } + cmd.baseCmd = baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeLCS, + } + + return cmd +} + +func (cmd *LCSCmd) SetVal(val *LCSMatch) { + cmd.val = val +} + +func (cmd *LCSCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *LCSCmd) Val() *LCSMatch { + return cmd.val +} + +func (cmd *LCSCmd) Result() (*LCSMatch, error) { + return cmd.val, cmd.err +} + +func (cmd *LCSCmd) readReply(rd *proto.Reader) (err error) { + lcs := &LCSMatch{} + switch cmd.readType { + case 1: + // match string + if lcs.MatchString, err = rd.ReadString(); err != nil { + return err + } + case 2: + // match len + if lcs.Len, err = rd.ReadInt(); err != nil { + return err + } + case 3: + // read LCSMatch + if err = rd.ReadFixedMapLen(2); err != nil { + return err + } + + // read matches or len field + for i := 0; i < 2; i++ { + key, err := rd.ReadString() + if err != nil { + return err + } + + switch key { + case "matches": + // read array of matched positions + if lcs.Matches, err = cmd.readMatchedPositions(rd); err != nil { + return err + } + case "len": + // read match length + if lcs.Len, err = rd.ReadInt(); err != nil { + return err + } + } + } + } + + cmd.val = lcs + return nil +} + +func (cmd *LCSCmd) readMatchedPositions(rd *proto.Reader) ([]LCSMatchedPosition, error) { + n, err := rd.ReadArrayLen() + if err != nil { + return nil, err + } + + positions := make([]LCSMatchedPosition, n) + for i := 0; i < n; i++ { + pn, err := rd.ReadArrayLen() + if err != nil { + return nil, err + } + + if positions[i].Key1, err = cmd.readPosition(rd); err != nil { + return nil, err + } + if positions[i].Key2, err = cmd.readPosition(rd); err != nil { + return nil, err + } + + // read match length if WithMatchLen is true + if pn > 2 { + if positions[i].MatchLen, err = rd.ReadInt(); err != nil { + return nil, err + } + } + } + + return positions, nil +} + +func (cmd *LCSCmd) readPosition(rd *proto.Reader) (pos LCSPosition, err error) { + if err = rd.ReadFixedArrayLen(2); err != nil { + return pos, err + } + if pos.Start, err = rd.ReadInt(); err != nil { + return pos, err + } + if pos.End, err = rd.ReadInt(); err != nil { + return pos, err + } + + return pos, nil +} + +func (cmd *LCSCmd) Clone() Cmder { + var val *LCSMatch + if cmd.val != nil { + val = &LCSMatch{ + MatchString: cmd.val.MatchString, + Len: cmd.val.Len, + } + if cmd.val.Matches != nil { + val.Matches = make([]LCSMatchedPosition, len(cmd.val.Matches)) + copy(val.Matches, cmd.val.Matches) + } + } + return &LCSCmd{ + baseCmd: cmd.cloneBaseCmd(), + readType: cmd.readType, + val: val, + } +} + +// ------------------------------------------------------------------------ + +type KeyFlags struct { + Key string + Flags []string +} + +type KeyFlagsCmd struct { + baseCmd + + val []KeyFlags +} + +var _ Cmder = (*KeyFlagsCmd)(nil) + +func NewKeyFlagsCmd(ctx context.Context, args ...interface{}) *KeyFlagsCmd { + return &KeyFlagsCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeKeyFlags, + }, + } +} + +func (cmd *KeyFlagsCmd) SetVal(val []KeyFlags) { + cmd.val = val +} + +func (cmd *KeyFlagsCmd) Val() []KeyFlags { + return cmd.val +} + +func (cmd *KeyFlagsCmd) Result() ([]KeyFlags, error) { + return cmd.val, cmd.err +} + +func (cmd *KeyFlagsCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *KeyFlagsCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + + if n == 0 { + cmd.val = make([]KeyFlags, 0) + return nil + } + + cmd.val = make([]KeyFlags, n) + + for i := 0; i < len(cmd.val); i++ { + + if err = rd.ReadFixedArrayLen(2); err != nil { + return err + } + + if cmd.val[i].Key, err = rd.ReadString(); err != nil { + return err + } + flagsLen, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val[i].Flags = make([]string, flagsLen) + + for j := 0; j < flagsLen; j++ { + if cmd.val[i].Flags[j], err = rd.ReadString(); err != nil { + return err + } + } + } + + return nil +} + +func (cmd *KeyFlagsCmd) Clone() Cmder { + var val []KeyFlags + if cmd.val != nil { + val = make([]KeyFlags, len(cmd.val)) + for i, kf := range cmd.val { + val[i] = KeyFlags{ + Key: kf.Key, + } + if kf.Flags != nil { + val[i].Flags = make([]string, len(kf.Flags)) + copy(val[i].Flags, kf.Flags) + } + } + } + return &KeyFlagsCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +// --------------------------------------------------------------------------------------------------- + +type ClusterLink struct { + Direction string + Node string + CreateTime int64 + Events string + SendBufferAllocated int64 + SendBufferUsed int64 +} + +type ClusterLinksCmd struct { + baseCmd + + val []ClusterLink +} + +var _ Cmder = (*ClusterLinksCmd)(nil) + +func NewClusterLinksCmd(ctx context.Context, args ...interface{}) *ClusterLinksCmd { + return &ClusterLinksCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeClusterLinks, + }, + } +} + +func (cmd *ClusterLinksCmd) SetVal(val []ClusterLink) { + cmd.val = val +} + +func (cmd *ClusterLinksCmd) Val() []ClusterLink { + return cmd.val +} + +func (cmd *ClusterLinksCmd) Result() ([]ClusterLink, error) { + return cmd.val, cmd.err +} + +func (cmd *ClusterLinksCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *ClusterLinksCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val = make([]ClusterLink, n) + + for i := 0; i < len(cmd.val); i++ { + m, err := rd.ReadMapLen() + if err != nil { + return err + } + + for j := 0; j < m; j++ { + key, err := rd.ReadString() + if err != nil { + return err + } + + switch key { + case "direction": + cmd.val[i].Direction, err = rd.ReadString() + case "node": + cmd.val[i].Node, err = rd.ReadString() + case "create-time": + cmd.val[i].CreateTime, err = rd.ReadInt() + case "events": + cmd.val[i].Events, err = rd.ReadString() + case "send-buffer-allocated": + cmd.val[i].SendBufferAllocated, err = rd.ReadInt() + case "send-buffer-used": + cmd.val[i].SendBufferUsed, err = rd.ReadInt() + default: + return fmt.Errorf("redis: unexpected key %q in CLUSTER LINKS reply", key) + } + + if err != nil { + return err + } + } + } + + return nil +} + +func (cmd *ClusterLinksCmd) Clone() Cmder { + var val []ClusterLink + if cmd.val != nil { + val = make([]ClusterLink, len(cmd.val)) + copy(val, cmd.val) + } + return &ClusterLinksCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +// ------------------------------------------------------------------------------------------------------------------ + +type SlotRange struct { + Start int64 + End int64 +} + +type Node struct { + ID string + Endpoint string + IP string + Hostname string + Port int64 + TLSPort int64 + Role string + ReplicationOffset int64 + Health string +} + +type ClusterShard struct { + Slots []SlotRange + Nodes []Node +} + +type ClusterShardsCmd struct { + baseCmd + + val []ClusterShard +} + +var _ Cmder = (*ClusterShardsCmd)(nil) + +func NewClusterShardsCmd(ctx context.Context, args ...interface{}) *ClusterShardsCmd { + return &ClusterShardsCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeClusterShards, + }, + } +} + +func (cmd *ClusterShardsCmd) SetVal(val []ClusterShard) { + cmd.val = val +} + +func (cmd *ClusterShardsCmd) Val() []ClusterShard { + return cmd.val +} + +func (cmd *ClusterShardsCmd) Result() ([]ClusterShard, error) { + return cmd.val, cmd.err +} + +func (cmd *ClusterShardsCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *ClusterShardsCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val = make([]ClusterShard, n) + + for i := 0; i < n; i++ { + m, err := rd.ReadMapLen() + if err != nil { + return err + } + + for j := 0; j < m; j++ { + key, err := rd.ReadString() + if err != nil { + return err + } + + switch key { + case "slots": + l, err := rd.ReadArrayLen() + if err != nil { + return err + } + for k := 0; k < l; k += 2 { + start, err := rd.ReadInt() + if err != nil { + return err + } + + end, err := rd.ReadInt() + if err != nil { + return err + } + + cmd.val[i].Slots = append(cmd.val[i].Slots, SlotRange{Start: start, End: end}) + } + case "nodes": + nodesLen, err := rd.ReadArrayLen() + if err != nil { + return err + } + cmd.val[i].Nodes = make([]Node, nodesLen) + for k := 0; k < nodesLen; k++ { + nodeMapLen, err := rd.ReadMapLen() + if err != nil { + return err + } + + for l := 0; l < nodeMapLen; l++ { + nodeKey, err := rd.ReadString() + if err != nil { + return err + } + + switch nodeKey { + case "id": + cmd.val[i].Nodes[k].ID, err = rd.ReadString() + case "endpoint": + cmd.val[i].Nodes[k].Endpoint, err = rd.ReadString() + case "ip": + cmd.val[i].Nodes[k].IP, err = rd.ReadString() + case "hostname": + cmd.val[i].Nodes[k].Hostname, err = rd.ReadString() + case "port": + cmd.val[i].Nodes[k].Port, err = rd.ReadInt() + case "tls-port": + cmd.val[i].Nodes[k].TLSPort, err = rd.ReadInt() + case "role": + cmd.val[i].Nodes[k].Role, err = rd.ReadString() + case "replication-offset": + cmd.val[i].Nodes[k].ReplicationOffset, err = rd.ReadInt() + case "health": + cmd.val[i].Nodes[k].Health, err = rd.ReadString() + default: + return fmt.Errorf("redis: unexpected key %q in CLUSTER SHARDS node reply", nodeKey) + } + + if err != nil { + return err + } + } + } + default: + return fmt.Errorf("redis: unexpected key %q in CLUSTER SHARDS reply", key) + } + } + } + + return nil +} + +func (cmd *ClusterShardsCmd) Clone() Cmder { + var val []ClusterShard + if cmd.val != nil { + val = make([]ClusterShard, len(cmd.val)) + for i, shard := range cmd.val { + val[i] = ClusterShard{} + if shard.Slots != nil { + val[i].Slots = make([]SlotRange, len(shard.Slots)) + copy(val[i].Slots, shard.Slots) + } + if shard.Nodes != nil { + val[i].Nodes = make([]Node, len(shard.Nodes)) + copy(val[i].Nodes, shard.Nodes) + } + } + } + return &ClusterShardsCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +// ----------------------------------------- + +type RankScore struct { + Rank int64 + Score float64 +} + +type RankWithScoreCmd struct { + baseCmd + + val RankScore +} + +var _ Cmder = (*RankWithScoreCmd)(nil) + +func NewRankWithScoreCmd(ctx context.Context, args ...interface{}) *RankWithScoreCmd { + return &RankWithScoreCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeRankWithScore, + }, + } +} + +func (cmd *RankWithScoreCmd) SetVal(val RankScore) { + cmd.val = val +} + +func (cmd *RankWithScoreCmd) Val() RankScore { + return cmd.val +} + +func (cmd *RankWithScoreCmd) Result() (RankScore, error) { + return cmd.val, cmd.err +} + +func (cmd *RankWithScoreCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *RankWithScoreCmd) readReply(rd *proto.Reader) error { + if err := rd.ReadFixedArrayLen(2); err != nil { + return err + } + + rank, err := rd.ReadInt() + if err != nil { + return err + } + + score, err := rd.ReadFloat() + if err != nil { + return err + } + + cmd.val = RankScore{Rank: rank, Score: score} + + return nil +} + +func (cmd *RankWithScoreCmd) Clone() Cmder { + return &RankWithScoreCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: cmd.val, // RankScore is a simple struct, can be copied directly + } +} + +// -------------------------------------------------------------------------------------------------- + +// ClientFlags is redis-server client flags, copy from redis/src/server.h (redis 7.0) +type ClientFlags uint64 + +const ( + ClientSlave ClientFlags = 1 << 0 /* This client is a replica */ + ClientMaster ClientFlags = 1 << 1 /* This client is a master */ + ClientMonitor ClientFlags = 1 << 2 /* This client is a slave monitor, see MONITOR */ + ClientMulti ClientFlags = 1 << 3 /* This client is in a MULTI context */ + ClientBlocked ClientFlags = 1 << 4 /* The client is waiting in a blocking operation */ + ClientDirtyCAS ClientFlags = 1 << 5 /* Watched keys modified. EXEC will fail. */ + ClientCloseAfterReply ClientFlags = 1 << 6 /* Close after writing entire reply. */ + ClientUnBlocked ClientFlags = 1 << 7 /* This client was unblocked and is stored in server.unblocked_clients */ + ClientScript ClientFlags = 1 << 8 /* This is a non-connected client used by Lua */ + ClientAsking ClientFlags = 1 << 9 /* Client issued the ASKING command */ + ClientCloseASAP ClientFlags = 1 << 10 /* Close this client ASAP */ + ClientUnixSocket ClientFlags = 1 << 11 /* Client connected via Unix domain socket */ + ClientDirtyExec ClientFlags = 1 << 12 /* EXEC will fail for errors while queueing */ + ClientMasterForceReply ClientFlags = 1 << 13 /* Queue replies even if is master */ + ClientForceAOF ClientFlags = 1 << 14 /* Force AOF propagation of current cmd. */ + ClientForceRepl ClientFlags = 1 << 15 /* Force replication of current cmd. */ + ClientPrePSync ClientFlags = 1 << 16 /* Instance don't understand PSYNC. */ + ClientReadOnly ClientFlags = 1 << 17 /* Cluster client is in read-only state. */ + ClientPubSub ClientFlags = 1 << 18 /* Client is in Pub/Sub mode. */ + ClientPreventAOFProp ClientFlags = 1 << 19 /* Don't propagate to AOF. */ + ClientPreventReplProp ClientFlags = 1 << 20 /* Don't propagate to slaves. */ + ClientPreventProp ClientFlags = ClientPreventAOFProp | ClientPreventReplProp + ClientPendingWrite ClientFlags = 1 << 21 /* Client has output to send but a-write handler is yet not installed. */ + ClientReplyOff ClientFlags = 1 << 22 /* Don't send replies to client. */ + ClientReplySkipNext ClientFlags = 1 << 23 /* Set ClientREPLY_SKIP for next cmd */ + ClientReplySkip ClientFlags = 1 << 24 /* Don't send just this reply. */ + ClientLuaDebug ClientFlags = 1 << 25 /* Run EVAL in debug mode. */ + ClientLuaDebugSync ClientFlags = 1 << 26 /* EVAL debugging without fork() */ + ClientModule ClientFlags = 1 << 27 /* Non connected client used by some module. */ + ClientProtected ClientFlags = 1 << 28 /* Client should not be freed for now. */ + ClientExecutingCommand ClientFlags = 1 << 29 /* Indicates that the client is currently in the process of handling + a command. usually this will be marked only during call() + however, blocked clients might have this flag kept until they + will try to reprocess the command. */ + ClientPendingCommand ClientFlags = 1 << 30 /* Indicates the client has a fully * parsed command ready for execution. */ + ClientTracking ClientFlags = 1 << 31 /* Client enabled keys tracking in order to perform client side caching. */ + ClientTrackingBrokenRedir ClientFlags = 1 << 32 /* Target client is invalid. */ + ClientTrackingBCAST ClientFlags = 1 << 33 /* Tracking in BCAST mode. */ + ClientTrackingOptIn ClientFlags = 1 << 34 /* Tracking in opt-in mode. */ + ClientTrackingOptOut ClientFlags = 1 << 35 /* Tracking in opt-out mode. */ + ClientTrackingCaching ClientFlags = 1 << 36 /* CACHING yes/no was given, depending on optin/optout mode. */ + ClientTrackingNoLoop ClientFlags = 1 << 37 /* Don't send invalidation messages about writes performed by myself.*/ + ClientInTimeoutTable ClientFlags = 1 << 38 /* This client is in the timeout table. */ + ClientProtocolError ClientFlags = 1 << 39 /* Protocol error chatting with it. */ + ClientCloseAfterCommand ClientFlags = 1 << 40 /* Close after executing commands * and writing entire reply. */ + ClientDenyBlocking ClientFlags = 1 << 41 /* Indicate that the client should not be blocked. currently, turned on inside MULTI, Lua, RM_Call, and AOF client */ + ClientReplRDBOnly ClientFlags = 1 << 42 /* This client is a replica that only wants RDB without replication buffer. */ + ClientNoEvict ClientFlags = 1 << 43 /* This client is protected against client memory eviction. */ + ClientAllowOOM ClientFlags = 1 << 44 /* Client used by RM_Call is allowed to fully execute scripts even when in OOM */ + ClientNoTouch ClientFlags = 1 << 45 /* This client will not touch LFU/LRU stats. */ + ClientPushing ClientFlags = 1 << 46 /* This client is pushing notifications. */ +) + +// ClientInfo is redis-server ClientInfo, not go-redis *Client +type ClientInfo struct { + ID int64 // redis version 2.8.12, a unique 64-bit client ID + Addr string // address/port of the client + LAddr string // address/port of local address client connected to (bind address) + FD int64 // file descriptor corresponding to the socket + Name string // the name set by the client with CLIENT SETNAME + Age time.Duration // total duration of the connection in seconds + Idle time.Duration // idle time of the connection in seconds + Flags ClientFlags // client flags (see below) + DB int // current database ID + Sub int // number of channel subscriptions + PSub int // number of pattern matching subscriptions + SSub int // redis version 7.0.3, number of shard channel subscriptions + Multi int // number of commands in a MULTI/EXEC context + Watch int // redis version 7.4 RC1, number of keys this client is currently watching. + QueryBuf int // qbuf, query buffer length (0 means no query pending) + QueryBufFree int // qbuf-free, free space of the query buffer (0 means the buffer is full) + ArgvMem int // incomplete arguments for the next command (already extracted from query buffer) + MultiMem int // redis version 7.0, memory is used up by buffered multi commands + BufferSize int // rbs, usable size of buffer + BufferPeak int // rbp, peak used size of buffer in last 5 sec interval + OutputBufferLength int // obl, output buffer length + OutputListLength int // oll, output list length (replies are queued in this list when the buffer is full) + OutputMemory int // omem, output buffer memory usage + TotalMemory int // tot-mem, total memory consumed by this client in its various buffers + TotalNetIn int // tot-net-in, total network input + TotalNetOut int // tot-net-out, total network output + TotalCmds int // tot-cmds, total number of commands processed + IoThread int // io-thread id + Events string // file descriptor events (see below) + LastCmd string // cmd, last command played + User string // the authenticated username of the client + Redir int64 // client id of current client tracking redirection + Resp int // redis version 7.0, client RESP protocol version + LibName string // redis version 7.2, client library name + LibVer string // redis version 7.2, client library version + ReadEvents uint64 // redis version 8.8, number of read events processed + AvgPipelineLenSum uint64 // redis version 8.8, sum of pipeline lengths + AvgPipelineLenCnt uint64 // redis version 8.8, count of pipeline operations +} + +type ClientInfoCmd struct { + baseCmd + + val *ClientInfo +} + +var _ Cmder = (*ClientInfoCmd)(nil) + +func NewClientInfoCmd(ctx context.Context, args ...interface{}) *ClientInfoCmd { + return &ClientInfoCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeClientInfo, + }, + } +} + +func (cmd *ClientInfoCmd) SetVal(val *ClientInfo) { + cmd.val = val +} + +func (cmd *ClientInfoCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *ClientInfoCmd) Val() *ClientInfo { + return cmd.val +} + +func (cmd *ClientInfoCmd) Result() (*ClientInfo, error) { + return cmd.val, cmd.err +} + +func (cmd *ClientInfoCmd) readReply(rd *proto.Reader) (err error) { + txt, err := rd.ReadString() + if err != nil { + return err + } + + // sds o = catClientInfoString(sdsempty(), c); + // o = sdscatlen(o,"\n",1); + // addReplyVerbatim(c,o,sdslen(o),"txt"); + // sdsfree(o); + cmd.val, err = parseClientInfo(strings.TrimSpace(txt)) + return err +} + +// fmt.Sscanf() cannot handle null values +func parseClientInfo(txt string) (info *ClientInfo, err error) { + info = &ClientInfo{} + for _, s := range strings.Split(txt, " ") { + kv := strings.Split(s, "=") + if len(kv) != 2 { + return nil, fmt.Errorf("redis: unexpected client info data (%s)", s) + } + key, val := kv[0], kv[1] + + switch key { + case "id": + info.ID, err = strconv.ParseInt(val, 10, 64) + case "addr": + info.Addr = val + case "laddr": + info.LAddr = val + case "fd": + info.FD, err = strconv.ParseInt(val, 10, 64) + case "name": + info.Name = val + case "age": + var age int + if age, err = strconv.Atoi(val); err == nil { + info.Age = time.Duration(age) * time.Second + } + case "idle": + var idle int + if idle, err = strconv.Atoi(val); err == nil { + info.Idle = time.Duration(idle) * time.Second + } + case "flags": + if val == "N" { + break + } + + for i := 0; i < len(val); i++ { + switch val[i] { + case 'S': + info.Flags |= ClientSlave + case 'O': + info.Flags |= ClientSlave | ClientMonitor + case 'M': + info.Flags |= ClientMaster + case 'P': + info.Flags |= ClientPubSub + case 'x': + info.Flags |= ClientMulti + case 'b': + info.Flags |= ClientBlocked + case 't': + info.Flags |= ClientTracking + case 'R': + info.Flags |= ClientTrackingBrokenRedir + case 'B': + info.Flags |= ClientTrackingBCAST + case 'd': + info.Flags |= ClientDirtyCAS + case 'c': + info.Flags |= ClientCloseAfterCommand + case 'u': + info.Flags |= ClientUnBlocked + case 'A': + info.Flags |= ClientCloseASAP + case 'U': + info.Flags |= ClientUnixSocket + case 'r': + info.Flags |= ClientReadOnly + case 'e': + info.Flags |= ClientNoEvict + case 'T': + info.Flags |= ClientNoTouch + default: + return nil, fmt.Errorf("redis: unexpected client info flags(%s)", string(val[i])) + } + } + case "db": + info.DB, err = strconv.Atoi(val) + case "sub": + info.Sub, err = strconv.Atoi(val) + case "psub": + info.PSub, err = strconv.Atoi(val) + case "ssub": + info.SSub, err = strconv.Atoi(val) + case "multi": + info.Multi, err = strconv.Atoi(val) + case "watch": + info.Watch, err = strconv.Atoi(val) + case "qbuf": + info.QueryBuf, err = strconv.Atoi(val) + case "qbuf-free": + info.QueryBufFree, err = strconv.Atoi(val) + case "argv-mem": + info.ArgvMem, err = strconv.Atoi(val) + case "multi-mem": + info.MultiMem, err = strconv.Atoi(val) + case "rbs": + info.BufferSize, err = strconv.Atoi(val) + case "rbp": + info.BufferPeak, err = strconv.Atoi(val) + case "obl": + info.OutputBufferLength, err = strconv.Atoi(val) + case "oll": + info.OutputListLength, err = strconv.Atoi(val) + case "omem": + info.OutputMemory, err = strconv.Atoi(val) + case "tot-mem": + info.TotalMemory, err = strconv.Atoi(val) + case "tot-net-in": + info.TotalNetIn, err = strconv.Atoi(val) + case "tot-net-out": + info.TotalNetOut, err = strconv.Atoi(val) + case "tot-cmds": + info.TotalCmds, err = strconv.Atoi(val) + case "events": + info.Events = val + case "cmd": + info.LastCmd = val + case "user": + info.User = val + case "redir": + info.Redir, err = strconv.ParseInt(val, 10, 64) + case "resp": + info.Resp, err = strconv.Atoi(val) + case "lib-name": + info.LibName = val + case "lib-ver": + info.LibVer = val + case "io-thread": + info.IoThread, err = strconv.Atoi(val) + case "read-events": + info.ReadEvents, err = strconv.ParseUint(val, 10, 64) + case "avg-pipeline-len-sum": + info.AvgPipelineLenSum, err = strconv.ParseUint(val, 10, 64) + case "avg-pipeline-len-cnt": + info.AvgPipelineLenCnt, err = strconv.ParseUint(val, 10, 64) + default: + // skip unknown fields + } + + if err != nil { + return nil, err + } + } + + return info, nil +} + +func (cmd *ClientInfoCmd) Clone() Cmder { + var val *ClientInfo + if cmd.val != nil { + val = &ClientInfo{ + ID: cmd.val.ID, + Addr: cmd.val.Addr, + LAddr: cmd.val.LAddr, + FD: cmd.val.FD, + Name: cmd.val.Name, + Age: cmd.val.Age, + Idle: cmd.val.Idle, + Flags: cmd.val.Flags, + DB: cmd.val.DB, + Sub: cmd.val.Sub, + PSub: cmd.val.PSub, + SSub: cmd.val.SSub, + Multi: cmd.val.Multi, + Watch: cmd.val.Watch, + QueryBuf: cmd.val.QueryBuf, + QueryBufFree: cmd.val.QueryBufFree, + ArgvMem: cmd.val.ArgvMem, + MultiMem: cmd.val.MultiMem, + BufferSize: cmd.val.BufferSize, + BufferPeak: cmd.val.BufferPeak, + OutputBufferLength: cmd.val.OutputBufferLength, + OutputListLength: cmd.val.OutputListLength, + OutputMemory: cmd.val.OutputMemory, + TotalMemory: cmd.val.TotalMemory, + IoThread: cmd.val.IoThread, + Events: cmd.val.Events, + LastCmd: cmd.val.LastCmd, + User: cmd.val.User, + Redir: cmd.val.Redir, + Resp: cmd.val.Resp, + LibName: cmd.val.LibName, + LibVer: cmd.val.LibVer, + ReadEvents: cmd.val.ReadEvents, + AvgPipelineLenSum: cmd.val.AvgPipelineLenSum, + AvgPipelineLenCnt: cmd.val.AvgPipelineLenCnt, + } + } + return &ClientInfoCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +// ------------------------------------------- + +type ACLLogEntry struct { + Count int64 + Reason string + Context string + Object string + Username string + AgeSeconds float64 + ClientInfo *ClientInfo + EntryID int64 + TimestampCreated int64 + TimestampLastUpdated int64 +} + +type ACLLogCmd struct { + baseCmd + + val []*ACLLogEntry +} + +var _ Cmder = (*ACLLogCmd)(nil) + +func NewACLLogCmd(ctx context.Context, args ...interface{}) *ACLLogCmd { + return &ACLLogCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeACLLog, + }, + } +} + +func (cmd *ACLLogCmd) SetVal(val []*ACLLogEntry) { + cmd.val = val +} + +func (cmd *ACLLogCmd) Val() []*ACLLogEntry { + return cmd.val +} + +func (cmd *ACLLogCmd) Result() ([]*ACLLogEntry, error) { + return cmd.val, cmd.err +} + +func (cmd *ACLLogCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *ACLLogCmd) readReply(rd *proto.Reader) error { + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + + cmd.val = make([]*ACLLogEntry, n) + for i := 0; i < n; i++ { + cmd.val[i] = &ACLLogEntry{} + entry := cmd.val[i] + respLen, err := rd.ReadMapLen() + if err != nil { + return err + } + for j := 0; j < respLen; j++ { + key, err := rd.ReadString() + if err != nil { + return err + } + + switch key { + case "count": + entry.Count, err = rd.ReadInt() + case "reason": + entry.Reason, err = rd.ReadString() + case "context": + entry.Context, err = rd.ReadString() + case "object": + entry.Object, err = rd.ReadString() + case "username": + entry.Username, err = rd.ReadString() + case "age-seconds": + entry.AgeSeconds, err = rd.ReadFloat() + case "client-info": + txt, err := rd.ReadString() + if err != nil { + return err + } + entry.ClientInfo, err = parseClientInfo(strings.TrimSpace(txt)) + if err != nil { + return err + } + case "entry-id": + entry.EntryID, err = rd.ReadInt() + case "timestamp-created": + entry.TimestampCreated, err = rd.ReadInt() + case "timestamp-last-updated": + entry.TimestampLastUpdated, err = rd.ReadInt() + default: + // skip unknown fields + if err := rd.DiscardNext(); err != nil { + return err + } + } + + if err != nil { + return err + } + } + } + + return nil +} + +func (cmd *ACLLogCmd) Clone() Cmder { + var val []*ACLLogEntry + if cmd.val != nil { + val = make([]*ACLLogEntry, len(cmd.val)) + for i, entry := range cmd.val { + if entry != nil { + val[i] = &ACLLogEntry{ + Count: entry.Count, + Reason: entry.Reason, + Context: entry.Context, + Object: entry.Object, + Username: entry.Username, + AgeSeconds: entry.AgeSeconds, + EntryID: entry.EntryID, + TimestampCreated: entry.TimestampCreated, + TimestampLastUpdated: entry.TimestampLastUpdated, + } + // Clone ClientInfo if present + if entry.ClientInfo != nil { + val[i].ClientInfo = &ClientInfo{ + ID: entry.ClientInfo.ID, + Addr: entry.ClientInfo.Addr, + LAddr: entry.ClientInfo.LAddr, + FD: entry.ClientInfo.FD, + Name: entry.ClientInfo.Name, + Age: entry.ClientInfo.Age, + Idle: entry.ClientInfo.Idle, + Flags: entry.ClientInfo.Flags, + DB: entry.ClientInfo.DB, + Sub: entry.ClientInfo.Sub, + PSub: entry.ClientInfo.PSub, + SSub: entry.ClientInfo.SSub, + Multi: entry.ClientInfo.Multi, + Watch: entry.ClientInfo.Watch, + QueryBuf: entry.ClientInfo.QueryBuf, + QueryBufFree: entry.ClientInfo.QueryBufFree, + ArgvMem: entry.ClientInfo.ArgvMem, + MultiMem: entry.ClientInfo.MultiMem, + BufferSize: entry.ClientInfo.BufferSize, + BufferPeak: entry.ClientInfo.BufferPeak, + OutputBufferLength: entry.ClientInfo.OutputBufferLength, + OutputListLength: entry.ClientInfo.OutputListLength, + OutputMemory: entry.ClientInfo.OutputMemory, + TotalMemory: entry.ClientInfo.TotalMemory, + IoThread: entry.ClientInfo.IoThread, + Events: entry.ClientInfo.Events, + LastCmd: entry.ClientInfo.LastCmd, + User: entry.ClientInfo.User, + Redir: entry.ClientInfo.Redir, + Resp: entry.ClientInfo.Resp, + LibName: entry.ClientInfo.LibName, + LibVer: entry.ClientInfo.LibVer, + ReadEvents: entry.ClientInfo.ReadEvents, + AvgPipelineLenSum: entry.ClientInfo.AvgPipelineLenSum, + AvgPipelineLenCnt: entry.ClientInfo.AvgPipelineLenCnt, + } + } + } + } + } + return &ACLLogCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +// LibraryInfo holds the library info. +type LibraryInfo struct { + LibName *string + LibVer *string +} + +// WithLibraryName returns a valid LibraryInfo with library name only. +func WithLibraryName(libName string) LibraryInfo { + return LibraryInfo{LibName: &libName} +} + +// WithLibraryVersion returns a valid LibraryInfo with library version only. +func WithLibraryVersion(libVer string) LibraryInfo { + return LibraryInfo{LibVer: &libVer} +} + +// ------------------------------------------- + +type InfoCmd struct { + baseCmd + val map[string]map[string]string +} + +var _ Cmder = (*InfoCmd)(nil) + +func NewInfoCmd(ctx context.Context, args ...interface{}) *InfoCmd { + return &InfoCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + cmdType: CmdTypeInfo, + }, + } +} + +func (cmd *InfoCmd) SetVal(val map[string]map[string]string) { + cmd.val = val +} + +func (cmd *InfoCmd) Val() map[string]map[string]string { + return cmd.val +} + +func (cmd *InfoCmd) Result() (map[string]map[string]string, error) { + return cmd.val, cmd.err +} + +func (cmd *InfoCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *InfoCmd) readReply(rd *proto.Reader) error { + val, err := rd.ReadString() + if err != nil { + return err + } + + section := "" + scanner := bufio.NewScanner(strings.NewReader(val)) + for scanner.Scan() { + line := scanner.Text() + if strings.HasPrefix(line, "#") { + if cmd.val == nil { + cmd.val = make(map[string]map[string]string) + } + section = strings.TrimPrefix(line, "# ") + cmd.val[section] = make(map[string]string) + } else if line != "" { + if section == "Modules" { + moduleRe := regexp.MustCompile(`module:name=(.+?),(.+)$`) + kv := moduleRe.FindStringSubmatch(line) + if len(kv) == 3 { + cmd.val[section][kv[1]] = kv[2] + } + } else { + kv := strings.SplitN(line, ":", 2) + if len(kv) == 2 { + cmd.val[section][kv[0]] = kv[1] + } + } + } + } + + return nil +} + +func (cmd *InfoCmd) Item(section, key string) string { + if cmd.val == nil { + return "" + } else if cmd.val[section] == nil { + return "" + } else { + return cmd.val[section][key] + } +} + +func (cmd *InfoCmd) Clone() Cmder { + var val map[string]map[string]string + if cmd.val != nil { + val = make(map[string]map[string]string, len(cmd.val)) + for section, sectionMap := range cmd.val { + if sectionMap != nil { + val[section] = make(map[string]string, len(sectionMap)) + for k, v := range sectionMap { + val[section][k] = v + } + } + } + } + return &InfoCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: val, + } +} + +type MonitorStatus int + +const ( + monitorStatusIdle MonitorStatus = iota + monitorStatusStart + monitorStatusStop +) + +type MonitorCmd struct { + baseCmd + ch chan string + status MonitorStatus + mu sync.Mutex +} + +func newMonitorCmd(ctx context.Context, ch chan string) *MonitorCmd { + return &MonitorCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: []interface{}{"monitor"}, + cmdType: CmdTypeMonitor, + }, + ch: ch, + status: monitorStatusIdle, + mu: sync.Mutex{}, + } +} + +func (cmd *MonitorCmd) String() string { + return cmdString(cmd, nil) +} + +func (cmd *MonitorCmd) readReply(rd *proto.Reader) error { + ctx, cancel := context.WithCancel(cmd.ctx) + go func(ctx context.Context) { + for { + select { + case <-ctx.Done(): + return + default: + err := cmd.readMonitor(rd, cancel) + if err != nil { + cmd.err = err + return + } + } + } + }(ctx) + return nil +} + +func (cmd *MonitorCmd) readMonitor(rd *proto.Reader, cancel context.CancelFunc) error { + for { + cmd.mu.Lock() + st := cmd.status + pk, _ := rd.Peek(1) + cmd.mu.Unlock() + if len(pk) != 0 && st == monitorStatusStart { + cmd.mu.Lock() + line, err := rd.ReadString() + cmd.mu.Unlock() + if err != nil { + return err + } + cmd.ch <- line + } + if st == monitorStatusStop { + cancel() + break + } + } + return nil +} + +func (cmd *MonitorCmd) Start() { + cmd.mu.Lock() + defer cmd.mu.Unlock() + cmd.status = monitorStatusStart +} + +func (cmd *MonitorCmd) Stop() { + cmd.mu.Lock() + defer cmd.mu.Unlock() + cmd.status = monitorStatusStop +} + +type VectorScoreSliceCmd struct { + baseCmd + + val []VectorScore +} + +var _ Cmder = (*VectorScoreSliceCmd)(nil) + +func NewVectorScoreSliceCmd(ctx context.Context, args ...any) *VectorScoreSliceCmd { + return &VectorScoreSliceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + }, + } +} + +// NewVectorInfoSliceCmd is an alias for NewVectorScoreSliceCmd kept for backwards compatibility. +func NewVectorInfoSliceCmd(ctx context.Context, args ...any) *VectorScoreSliceCmd { + return NewVectorScoreSliceCmd(ctx, args...) +} + +func (cmd *VectorScoreSliceCmd) SetVal(val []VectorScore) { + cmd.val = val +} + +func (cmd *VectorScoreSliceCmd) Val() []VectorScore { + return cmd.val +} + +func (cmd *VectorScoreSliceCmd) Result() ([]VectorScore, error) { + return cmd.val, cmd.err +} + +func (cmd *VectorScoreSliceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *VectorScoreSliceCmd) readReply(rd *proto.Reader) error { + typ, err := rd.PeekReplyType() + if err != nil { + return err + } + + var n int + if typ == proto.RespMap { + n, err = rd.ReadMapLen() + if err != nil { + return err + } + } else { + // RESP2 returns a flat array [name, score, name, score, ...] + n, err = rd.ReadArrayLen() + if err != nil { + return err + } + if n%2 != 0 { + return fmt.Errorf("redis: VectorScoreSliceCmd expects even number of elements, got %d", n) + } + n /= 2 + } + + cmd.val = make([]VectorScore, n) + for i := 0; i < n; i++ { + name, err := rd.ReadString() + if err != nil { + return err + } + cmd.val[i].Name = name + + score, err := rd.ReadFloat() + if err != nil { + return err + } + cmd.val[i].Score = score + } + + return nil +} + +func (cmd *VectorScoreSliceCmd) Clone() Cmder { + return &VectorScoreSliceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: cmd.val, + } +} + +func readVectorAttribStringOrNil(rd *proto.Reader) (*string, error) { + v, err := rd.ReadReply() + if err != nil { + if err == proto.Nil { + return nil, nil + } + return nil, err + } + s, ok := v.(string) + if !ok { + return nil, fmt.Errorf("redis: can't parse reply=%T reading string", v) + } + return &s, nil +} + +type VectorAttribSliceCmd struct { + baseCmd + + val []VectorAttrib +} + +var _ Cmder = (*VectorAttribSliceCmd)(nil) + +func NewVectorAttribSliceCmd(ctx context.Context, args ...any) *VectorAttribSliceCmd { + return &VectorAttribSliceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + }, + } +} + +func (cmd *VectorAttribSliceCmd) SetVal(val []VectorAttrib) { + cmd.val = val +} + +func (cmd *VectorAttribSliceCmd) Val() []VectorAttrib { + return cmd.val +} + +func (cmd *VectorAttribSliceCmd) Result() ([]VectorAttrib, error) { + return cmd.val, cmd.err +} + +func (cmd *VectorAttribSliceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *VectorAttribSliceCmd) readReply(rd *proto.Reader) error { + replyType, err := rd.PeekReplyType() + if err != nil { + return err + } + + if replyType == proto.RespMap { + n, err := rd.ReadMapLen() + if err != nil { + return err + } + cmd.val = make([]VectorAttrib, n) + for i := 0; i < n; i++ { + name, err := rd.ReadString() + if err != nil { + return err + } + attrib, err := readVectorAttribStringOrNil(rd) + if err != nil { + return err + } + cmd.val[i] = VectorAttrib{Name: name, Attribs: attrib} + } + return nil + } + + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + if n%2 != 0 { + return fmt.Errorf("redis: got %d elements in the VSIM array, wanted a multiple of 2", n) + } + cmd.val = make([]VectorAttrib, n/2) + for i := range cmd.val { + name, err := rd.ReadString() + if err != nil { + return err + } + attrib, err := readVectorAttribStringOrNil(rd) + if err != nil { + return err + } + cmd.val[i] = VectorAttrib{Name: name, Attribs: attrib} + } + return nil +} + +func (cmd *VectorAttribSliceCmd) Clone() Cmder { + return &VectorAttribSliceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: cmd.val, + } +} + +type VectorScoreAttribSliceCmd struct { + baseCmd + + val []VectorScoreAttrib +} + +var _ Cmder = (*VectorScoreAttribSliceCmd)(nil) + +func NewVectorScoreAttribSliceCmd(ctx context.Context, args ...any) *VectorScoreAttribSliceCmd { + return &VectorScoreAttribSliceCmd{ + baseCmd: baseCmd{ + ctx: ctx, + args: args, + }, + } +} + +func (cmd *VectorScoreAttribSliceCmd) SetVal(val []VectorScoreAttrib) { + cmd.val = val +} + +func (cmd *VectorScoreAttribSliceCmd) Val() []VectorScoreAttrib { + return cmd.val +} + +func (cmd *VectorScoreAttribSliceCmd) Result() ([]VectorScoreAttrib, error) { + return cmd.val, cmd.err +} + +func (cmd *VectorScoreAttribSliceCmd) String() string { + return cmdString(cmd, cmd.val) +} + +func (cmd *VectorScoreAttribSliceCmd) readReply(rd *proto.Reader) error { + replyType, err := rd.PeekReplyType() + if err != nil { + return err + } + + if replyType == proto.RespMap { + n, err := rd.ReadMapLen() + if err != nil { + return err + } + cmd.val = make([]VectorScoreAttrib, n) + for i := 0; i < n; i++ { + name, err := rd.ReadString() + if err != nil { + return err + } + if err := rd.ReadFixedArrayLen(2); err != nil { + return err + } + score, err := rd.ReadFloat() + if err != nil { + return err + } + attrib, err := readVectorAttribStringOrNil(rd) + if err != nil { + return err + } + cmd.val[i] = VectorScoreAttrib{Name: name, Score: score, Attribs: attrib} + } + return nil + } + + n, err := rd.ReadArrayLen() + if err != nil { + return err + } + if n%3 != 0 { + return fmt.Errorf("redis: got %d elements in the VSIM array, wanted a multiple of 3", n) + } + cmd.val = make([]VectorScoreAttrib, n/3) + for i := range cmd.val { + name, err := rd.ReadString() + if err != nil { + return err + } + score, err := rd.ReadFloat() + if err != nil { + return err + } + attrib, err := readVectorAttribStringOrNil(rd) + if err != nil { + return err + } + cmd.val[i] = VectorScoreAttrib{Name: name, Score: score, Attribs: attrib} + } + return nil +} + +func (cmd *VectorScoreAttribSliceCmd) Clone() Cmder { + return &VectorScoreAttribSliceCmd{ + baseCmd: cmd.cloneBaseCmd(), + val: cmd.val, + } +} + +func (cmd *MonitorCmd) Clone() Cmder { + // MonitorCmd cannot be safely cloned due to channels and goroutines + // Return a new MonitorCmd with the same channel + return newMonitorCmd(cmd.ctx, cmd.ch) +} + +// ExtractCommandValue extracts the value from a command result using the fast enum-based approach +func ExtractCommandValue(cmd interface{}) (interface{}, error) { + // First try to get the command type using the interface + if cmdTypeGetter, ok := cmd.(CmdTypeGetter); ok { + cmdType := cmdTypeGetter.GetCmdType() + + // Use fast type-based extraction + switch cmdType { + case CmdTypeGeneric: + if genericCmd, ok := cmd.(interface { + Val() interface{} + Err() error + }); ok { + return genericCmd.Val(), genericCmd.Err() + } + case CmdTypeString: + if stringCmd, ok := cmd.(interface { + Val() string + Err() error + }); ok { + return stringCmd.Val(), stringCmd.Err() + } + case CmdTypeInt: + if intCmd, ok := cmd.(interface { + Val() int64 + Err() error + }); ok { + return intCmd.Val(), intCmd.Err() + } + case CmdTypeBool: + if boolCmd, ok := cmd.(interface { + Val() bool + Err() error + }); ok { + return boolCmd.Val(), boolCmd.Err() + } + case CmdTypeFloat: + if floatCmd, ok := cmd.(interface { + Val() float64 + Err() error + }); ok { + return floatCmd.Val(), floatCmd.Err() + } + case CmdTypeStatus: + if statusCmd, ok := cmd.(interface { + Val() string + Err() error + }); ok { + return statusCmd.Val(), statusCmd.Err() + } + case CmdTypeDuration: + if durationCmd, ok := cmd.(interface { + Val() time.Duration + Err() error + }); ok { + return durationCmd.Val(), durationCmd.Err() + } + case CmdTypeTime: + if timeCmd, ok := cmd.(interface { + Val() time.Time + Err() error + }); ok { + return timeCmd.Val(), timeCmd.Err() + } + case CmdTypeStringStructMap: + if structMapCmd, ok := cmd.(interface { + Val() map[string]struct{} + Err() error + }); ok { + return structMapCmd.Val(), structMapCmd.Err() + } + case CmdTypeXMessageSlice: + if xMessageSliceCmd, ok := cmd.(interface { + Val() []XMessage + Err() error + }); ok { + return xMessageSliceCmd.Val(), xMessageSliceCmd.Err() + } + case CmdTypeXStreamSlice: + if xStreamSliceCmd, ok := cmd.(interface { + Val() []XStream + Err() error + }); ok { + return xStreamSliceCmd.Val(), xStreamSliceCmd.Err() + } + case CmdTypeXPending: + if xPendingCmd, ok := cmd.(interface { + Val() *XPending + Err() error + }); ok { + return xPendingCmd.Val(), xPendingCmd.Err() + } + case CmdTypeXPendingExt: + if xPendingExtCmd, ok := cmd.(interface { + Val() []XPendingExt + Err() error + }); ok { + return xPendingExtCmd.Val(), xPendingExtCmd.Err() + } + case CmdTypeXAutoClaim: + if xAutoClaimCmd, ok := cmd.(interface { + Val() ([]XMessage, string) + Err() error + }); ok { + messages, start := xAutoClaimCmd.Val() + return CmdTypeXAutoClaimValue{messages: messages, start: start}, xAutoClaimCmd.Err() + } + case CmdTypeXAutoClaimJustID: + if xAutoClaimJustIDCmd, ok := cmd.(interface { + Val() ([]string, string) + Err() error + }); ok { + ids, start := xAutoClaimJustIDCmd.Val() + return CmdTypeXAutoClaimJustIDValue{ids: ids, start: start}, xAutoClaimJustIDCmd.Err() + } + case CmdTypeXInfoConsumers: + if xInfoConsumersCmd, ok := cmd.(interface { + Val() []XInfoConsumer + Err() error + }); ok { + return xInfoConsumersCmd.Val(), xInfoConsumersCmd.Err() + } + case CmdTypeXInfoGroups: + if xInfoGroupsCmd, ok := cmd.(interface { + Val() []XInfoGroup + Err() error + }); ok { + return xInfoGroupsCmd.Val(), xInfoGroupsCmd.Err() + } + case CmdTypeXInfoStream: + if xInfoStreamCmd, ok := cmd.(interface { + Val() *XInfoStream + Err() error + }); ok { + return xInfoStreamCmd.Val(), xInfoStreamCmd.Err() + } + case CmdTypeXInfoStreamFull: + if xInfoStreamFullCmd, ok := cmd.(interface { + Val() *XInfoStreamFull + Err() error + }); ok { + return xInfoStreamFullCmd.Val(), xInfoStreamFullCmd.Err() + } + case CmdTypeZSlice: + if zSliceCmd, ok := cmd.(interface { + Val() []Z + Err() error + }); ok { + return zSliceCmd.Val(), zSliceCmd.Err() + } + case CmdTypeZWithKey: + if zWithKeyCmd, ok := cmd.(interface { + Val() *ZWithKey + Err() error + }); ok { + return zWithKeyCmd.Val(), zWithKeyCmd.Err() + } + case CmdTypeScan: + if scanCmd, ok := cmd.(interface { + Val() ([]string, uint64) + Err() error + }); ok { + keys, cursor := scanCmd.Val() + return CmdTypeScanValue{keys: keys, cursor: cursor}, scanCmd.Err() + } + case CmdTypeClusterSlots: + if clusterSlotsCmd, ok := cmd.(interface { + Val() []ClusterSlot + Err() error + }); ok { + return clusterSlotsCmd.Val(), clusterSlotsCmd.Err() + } + case CmdTypeGeoLocation: + if geoLocationCmd, ok := cmd.(interface { + Val() []GeoLocation + Err() error + }); ok { + return geoLocationCmd.Val(), geoLocationCmd.Err() + } + case CmdTypeGeoSearchLocation: + if geoSearchLocationCmd, ok := cmd.(interface { + Val() []GeoLocation + Err() error + }); ok { + return geoSearchLocationCmd.Val(), geoSearchLocationCmd.Err() + } + case CmdTypeGeoPos: + if geoPosCmd, ok := cmd.(interface { + Val() []*GeoPos + Err() error + }); ok { + return geoPosCmd.Val(), geoPosCmd.Err() + } + case CmdTypeCommandsInfo: + if commandsInfoCmd, ok := cmd.(interface { + Val() map[string]*CommandInfo + Err() error + }); ok { + return commandsInfoCmd.Val(), commandsInfoCmd.Err() + } + case CmdTypeSlowLog: + if slowLogCmd, ok := cmd.(interface { + Val() []SlowLog + Err() error + }); ok { + return slowLogCmd.Val(), slowLogCmd.Err() + } + case CmdTypeHotKeys: + if hotKeysCmd, ok := cmd.(interface { + Val() *HotKeysResult + Err() error + }); ok { + return hotKeysCmd.Val(), hotKeysCmd.Err() + } + case CmdTypeKeyValues: + if keyValuesCmd, ok := cmd.(interface { + Val() (string, []string) + Err() error + }); ok { + key, values := keyValuesCmd.Val() + return CmdTypeKeyValuesValue{key: key, values: values}, keyValuesCmd.Err() + } + case CmdTypeZSliceWithKey: + if zSliceWithKeyCmd, ok := cmd.(interface { + Val() (string, []Z) + Err() error + }); ok { + key, zSlice := zSliceWithKeyCmd.Val() + return CmdTypeZSliceWithKeyValue{key: key, zSlice: zSlice}, zSliceWithKeyCmd.Err() + } + case CmdTypeFunctionList: + if functionListCmd, ok := cmd.(interface { + Val() []Library + Err() error + }); ok { + return functionListCmd.Val(), functionListCmd.Err() + } + case CmdTypeFunctionStats: + if functionStatsCmd, ok := cmd.(interface { + Val() FunctionStats + Err() error + }); ok { + return functionStatsCmd.Val(), functionStatsCmd.Err() + } + case CmdTypeLCS: + if lcsCmd, ok := cmd.(interface { + Val() *LCSMatch + Err() error + }); ok { + return lcsCmd.Val(), lcsCmd.Err() + } + case CmdTypeKeyFlags: + if keyFlagsCmd, ok := cmd.(interface { + Val() []KeyFlags + Err() error + }); ok { + return keyFlagsCmd.Val(), keyFlagsCmd.Err() + } + case CmdTypeClusterLinks: + if clusterLinksCmd, ok := cmd.(interface { + Val() []ClusterLink + Err() error + }); ok { + return clusterLinksCmd.Val(), clusterLinksCmd.Err() + } + case CmdTypeClusterShards: + if clusterShardsCmd, ok := cmd.(interface { + Val() []ClusterShard + Err() error + }); ok { + return clusterShardsCmd.Val(), clusterShardsCmd.Err() + } + case CmdTypeRankWithScore: + if rankWithScoreCmd, ok := cmd.(interface { + Val() RankScore + Err() error + }); ok { + return rankWithScoreCmd.Val(), rankWithScoreCmd.Err() + } + case CmdTypeClientInfo: + if clientInfoCmd, ok := cmd.(interface { + Val() *ClientInfo + Err() error + }); ok { + return clientInfoCmd.Val(), clientInfoCmd.Err() + } + case CmdTypeACLLog: + if aclLogCmd, ok := cmd.(interface { + Val() []*ACLLogEntry + Err() error + }); ok { + return aclLogCmd.Val(), aclLogCmd.Err() + } + case CmdTypeInfo: + if infoCmd, ok := cmd.(interface { + Val() string + Err() error + }); ok { + return infoCmd.Val(), infoCmd.Err() + } + case CmdTypeMonitor: + if monitorCmd, ok := cmd.(interface { + Val() string + Err() error + }); ok { + return monitorCmd.Val(), monitorCmd.Err() + } + case CmdTypeJSON: + if jsonCmd, ok := cmd.(interface { + Val() string + Err() error + }); ok { + return jsonCmd.Val(), jsonCmd.Err() + } + case CmdTypeJSONSlice: + if jsonSliceCmd, ok := cmd.(interface { + Val() []interface{} + Err() error + }); ok { + return jsonSliceCmd.Val(), jsonSliceCmd.Err() + } + case CmdTypeIntPointerSlice: + if intPointerSliceCmd, ok := cmd.(interface { + Val() []*int64 + Err() error + }); ok { + return intPointerSliceCmd.Val(), intPointerSliceCmd.Err() + } + case CmdTypeScanDump: + if scanDumpCmd, ok := cmd.(interface { + Val() ScanDump + Err() error + }); ok { + return scanDumpCmd.Val(), scanDumpCmd.Err() + } + case CmdTypeBFInfo: + if bfInfoCmd, ok := cmd.(interface { + Val() BFInfo + Err() error + }); ok { + return bfInfoCmd.Val(), bfInfoCmd.Err() + } + case CmdTypeCFInfo: + if cfInfoCmd, ok := cmd.(interface { + Val() CFInfo + Err() error + }); ok { + return cfInfoCmd.Val(), cfInfoCmd.Err() + } + case CmdTypeCMSInfo: + if cmsInfoCmd, ok := cmd.(interface { + Val() CMSInfo + Err() error + }); ok { + return cmsInfoCmd.Val(), cmsInfoCmd.Err() + } + case CmdTypeTopKInfo: + if topKInfoCmd, ok := cmd.(interface { + Val() TopKInfo + Err() error + }); ok { + return topKInfoCmd.Val(), topKInfoCmd.Err() + } + case CmdTypeTDigestInfo: + if tDigestInfoCmd, ok := cmd.(interface { + Val() TDigestInfo + Err() error + }); ok { + return tDigestInfoCmd.Val(), tDigestInfoCmd.Err() + } + case CmdTypeFTSearch: + if ftSearchCmd, ok := cmd.(interface { + Val() FTSearchResult + Err() error + }); ok { + return ftSearchCmd.Val(), ftSearchCmd.Err() + } + case CmdTypeFTInfo: + if ftInfoCmd, ok := cmd.(interface { + Val() FTInfoResult + Err() error + }); ok { + return ftInfoCmd.Val(), ftInfoCmd.Err() + } + case CmdTypeFTSpellCheck: + if ftSpellCheckCmd, ok := cmd.(interface { + Val() []SpellCheckResult + Err() error + }); ok { + return ftSpellCheckCmd.Val(), ftSpellCheckCmd.Err() + } + case CmdTypeFTSynDump: + if ftSynDumpCmd, ok := cmd.(interface { + Val() []FTSynDumpResult + Err() error + }); ok { + return ftSynDumpCmd.Val(), ftSynDumpCmd.Err() + } + case CmdTypeAggregate: + if aggregateCmd, ok := cmd.(interface { + Val() *FTAggregateResult + Err() error + }); ok { + return aggregateCmd.Val(), aggregateCmd.Err() + } + case CmdTypeTSTimestampValue: + if tsTimestampValueCmd, ok := cmd.(interface { + Val() TSTimestampValue + Err() error + }); ok { + return tsTimestampValueCmd.Val(), tsTimestampValueCmd.Err() + } + case CmdTypeTSTimestampValueSlice: + if tsTimestampValueSliceCmd, ok := cmd.(interface { + Val() []TSTimestampValue + Err() error + }); ok { + return tsTimestampValueSliceCmd.Val(), tsTimestampValueSliceCmd.Err() + } + case CmdTypeStringSlice: + if stringSliceCmd, ok := cmd.(interface { + Val() []string + Err() error + }); ok { + return stringSliceCmd.Val(), stringSliceCmd.Err() + } + case CmdTypeIntSlice: + if intSliceCmd, ok := cmd.(interface { + Val() []int64 + Err() error + }); ok { + return intSliceCmd.Val(), intSliceCmd.Err() + } + case CmdTypeBoolSlice: + if boolSliceCmd, ok := cmd.(interface { + Val() []bool + Err() error + }); ok { + return boolSliceCmd.Val(), boolSliceCmd.Err() + } + case CmdTypeFloatSlice: + if floatSliceCmd, ok := cmd.(interface { + Val() []float64 + Err() error + }); ok { + return floatSliceCmd.Val(), floatSliceCmd.Err() + } + case CmdTypeSlice: + if sliceCmd, ok := cmd.(interface { + Val() []interface{} + Err() error + }); ok { + return sliceCmd.Val(), sliceCmd.Err() + } + case CmdTypeKeyValueSlice: + if keyValueSliceCmd, ok := cmd.(interface { + Val() []KeyValue + Err() error + }); ok { + return keyValueSliceCmd.Val(), keyValueSliceCmd.Err() + } + case CmdTypeMapStringString: + if mapCmd, ok := cmd.(interface { + Val() map[string]string + Err() error + }); ok { + return mapCmd.Val(), mapCmd.Err() + } + case CmdTypeMapStringInt: + if mapCmd, ok := cmd.(interface { + Val() map[string]int64 + Err() error + }); ok { + return mapCmd.Val(), mapCmd.Err() + } + case CmdTypeMapStringInterfaceSlice: + if mapCmd, ok := cmd.(interface { + Val() []map[string]interface{} + Err() error + }); ok { + return mapCmd.Val(), mapCmd.Err() + } + case CmdTypeMapStringInterface: + if mapCmd, ok := cmd.(interface { + Val() map[string]interface{} + Err() error + }); ok { + return mapCmd.Val(), mapCmd.Err() + } + case CmdTypeMapStringStringSlice: + if mapCmd, ok := cmd.(interface { + Val() []map[string]string + Err() error + }); ok { + return mapCmd.Val(), mapCmd.Err() + } + case CmdTypeMapMapStringInterface: + if mapCmd, ok := cmd.(interface { + Val() map[string]interface{} + Err() error + }); ok { + return mapCmd.Val(), mapCmd.Err() + } + default: + // For unknown command types, return nil + return nil, nil + } + } + + // If we can't get the command type, return nil + return nil, nil +} diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/command_policy_resolver.go b/scraper-go/vendor/github.com/redis/go-redis/v9/command_policy_resolver.go new file mode 100644 index 0000000..da8c6d3 --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/command_policy_resolver.go @@ -0,0 +1,209 @@ +package redis + +import ( + "context" + "strings" + + "github.com/redis/go-redis/v9/internal/routing" +) + +type ( + module = string + commandName = string +) + +var defaultPolicies = map[module]map[commandName]*routing.CommandPolicy{ + "ft": { + "create": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + }, + "search": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + Tips: map[string]string{ + routing.ReadOnlyCMD: "", + }, + }, + "aggregate": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + Tips: map[string]string{ + routing.ReadOnlyCMD: "", + }, + }, + "dictadd": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + }, + "dictdump": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + Tips: map[string]string{ + routing.ReadOnlyCMD: "", + }, + }, + "dictdel": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + }, + "suglen": { + Request: routing.ReqDefault, + Response: routing.RespDefaultHashSlot, + Tips: map[string]string{ + routing.ReadOnlyCMD: "", + }, + }, + "cursor": { + Request: routing.ReqSpecial, + Response: routing.RespDefaultKeyless, + Tips: map[string]string{ + routing.ReadOnlyCMD: "", + }, + }, + "sugadd": { + Request: routing.ReqDefault, + Response: routing.RespDefaultHashSlot, + }, + "sugget": { + Request: routing.ReqDefault, + Response: routing.RespDefaultHashSlot, + Tips: map[string]string{ + routing.ReadOnlyCMD: "", + }, + }, + "sugdel": { + Request: routing.ReqDefault, + Response: routing.RespDefaultHashSlot, + }, + "spellcheck": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + Tips: map[string]string{ + routing.ReadOnlyCMD: "", + }, + }, + "explain": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + Tips: map[string]string{ + routing.ReadOnlyCMD: "", + }, + }, + "explaincli": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + Tips: map[string]string{ + routing.ReadOnlyCMD: "", + }, + }, + "aliasadd": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + }, + "aliasupdate": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + }, + "aliasdel": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + }, + "info": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + Tips: map[string]string{ + routing.ReadOnlyCMD: "", + }, + }, + "tagvals": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + Tips: map[string]string{ + routing.ReadOnlyCMD: "", + }, + }, + "syndump": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + Tips: map[string]string{ + routing.ReadOnlyCMD: "", + }, + }, + "synupdate": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + }, + "profile": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + Tips: map[string]string{ + routing.ReadOnlyCMD: "", + }, + }, + "alter": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + }, + "dropindex": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + }, + "drop": { + Request: routing.ReqDefault, + Response: routing.RespDefaultKeyless, + }, + }, +} + +type CommandInfoResolveFunc func(ctx context.Context, cmd Cmder) *routing.CommandPolicy + +type commandInfoResolver struct { + resolveFunc CommandInfoResolveFunc + fallBackResolver *commandInfoResolver +} + +func NewCommandInfoResolver(resolveFunc CommandInfoResolveFunc) *commandInfoResolver { + return &commandInfoResolver{ + resolveFunc: resolveFunc, + } +} + +func NewDefaultCommandPolicyResolver() *commandInfoResolver { + return NewCommandInfoResolver(func(ctx context.Context, cmd Cmder) *routing.CommandPolicy { + module := "core" + command := cmd.Name() + cmdParts := strings.Split(command, ".") + if len(cmdParts) == 2 { + module = cmdParts[0] + command = cmdParts[1] + } + + if policy, ok := defaultPolicies[module][command]; ok { + return policy + } + + return nil + }) +} + +func (r *commandInfoResolver) GetCommandPolicy(ctx context.Context, cmd Cmder) *routing.CommandPolicy { + if r.resolveFunc == nil { + return nil + } + + policy := r.resolveFunc(ctx, cmd) + if policy != nil { + return policy + } + + if r.fallBackResolver != nil { + return r.fallBackResolver.GetCommandPolicy(ctx, cmd) + } + + return nil +} + +func (r *commandInfoResolver) SetFallbackResolver(fallbackResolver *commandInfoResolver) { + r.fallBackResolver = fallbackResolver +} diff --git a/scraper-go/vendor/github.com/redis/go-redis/v9/commands.go b/scraper-go/vendor/github.com/redis/go-redis/v9/commands.go new file mode 100644 index 0000000..b3b6bad --- /dev/null +++ b/scraper-go/vendor/github.com/redis/go-redis/v9/commands.go @@ -0,0 +1,819 @@ +package redis + +import ( + "context" + "encoding" + "errors" + "fmt" + "io" + "net" + "reflect" + "runtime" + "strings" + "time" + + "github.com/redis/go-redis/v9/internal" +) + +// KeepTTL is a Redis KEEPTTL option to keep existing TTL, it requires your redis-server version >= 6.0, +// otherwise you will receive an error: (error) ERR syntax error. +// For example: +// +// rdb.Set(ctx, key, value, redis.KeepTTL) +const KeepTTL = -1 + +func usePrecise(dur time.Duration) bool { + return dur < time.Second || dur%time.Second != 0 +} + +func formatMs(ctx context.Context, dur time.Duration) int64 { + if dur > 0 && dur < time.Millisecond { + internal.Logger.Printf( + ctx, + "specified duration is %s, but minimal supported value is %s - truncating to 1ms", + dur, time.Millisecond, + ) + return 1 + } + return int64(dur / time.Millisecond) +} + +func formatSec(ctx context.Context, dur time.Duration) int64 { + if dur > 0 && dur < time.Second { + internal.Logger.Printf( + ctx, + "specified duration is %s, but minimal supported value is %s - truncating to 1s", + dur, time.Second, + ) + return 1 + } + return int64(dur / time.Second) +} + +func appendArgs(dst, src []interface{}) []interface{} { + if len(src) == 1 { + return appendArg(dst, src[0]) + } + + if cap(dst) < len(dst)+len(src) { + newDst := make([]interface{}, len(dst), len(dst)+len(src)) + copy(newDst, dst) + dst = newDst + } + dst = append(dst, src...) + return dst +} + +func appendArg(dst []interface{}, arg interface{}) []interface{} { + switch arg := arg.(type) { + case []string: + for _, s := range arg { + dst = append(dst, s) + } + return dst + case []interface{}: + dst = append(dst, arg...) + return dst + case map[string]interface{}: + for k, v := range arg { + dst = append(dst, k, v) + } + return dst + case map[string]string: + for k, v := range arg { + dst = append(dst, k, v) + } + return dst + case time.Time, time.Duration, encoding.BinaryMarshaler, net.IP: + return append(dst, arg) + case nil: + return dst + default: + // scan struct field + v := reflect.ValueOf(arg) + if v.Type().Kind() == reflect.Ptr { + if v.IsNil() { + // error: arg is not a valid object + return dst + } + v = v.Elem() + } + + if v.Type().Kind() == reflect.Struct { + return appendStructField(dst, v) + } + + return append(dst, arg) + } +} + +// appendStructField appends the field and value held by the structure v to dst, and returns the appended dst. +func appendStructField(dst []interface{}, v reflect.Value) []interface{} { + typ := v.Type() + for i := 0; i < typ.NumField(); i++ { + tag := typ.Field(i).Tag.Get("redis") + if tag == "" || tag == "-" { + continue + } + name, opt, _ := strings.Cut(tag, ",") + if name == "" { + continue + } + + field := v.Field(i) + + // miss field + if omitEmpty(opt) && isEmptyValue(field) { + continue + } + + if field.CanInterface() { + dst = append(dst, name, field.Interface()) + } + } + + return dst +} + +func omitEmpty(opt string) bool { + for opt != "" { + var name string + name, opt, _ = strings.Cut(opt, ",") + if name == "omitempty" { + return true + } + } + return false +} + +func isEmptyValue(v reflect.Value) bool { + switch v.Kind() { + case reflect.Array, reflect.Map, reflect.Slice, reflect.String: + return v.Len() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Interface, reflect.Pointer: + return v.IsNil() + case reflect.Struct: + if v.Type() == reflect.TypeOf(time.Time{}) { + return v.IsZero() + } + // Only supports the struct time.Time, + // subsequent iterations will follow the func Scan support decoder. + } + return false +} + +type Cmdable interface { + Pipeline() Pipeliner + Pipelined(ctx context.Context, fn func(Pipeliner) error) ([]Cmder, error) + + TxPipelined(ctx context.Context, fn func(Pipeliner) error) ([]Cmder, error) + TxPipeline() Pipeliner + + Command(ctx context.Context) *CommandsInfoCmd + CommandList(ctx context.Context, filter *FilterBy) *StringSliceCmd + CommandGetKeys(ctx context.Context, commands ...interface{}) *StringSliceCmd + CommandGetKeysAndFlags(ctx context.Context, commands ...interface{}) *KeyFlagsCmd + ClientGetName(ctx context.Context) *StringCmd + Echo(ctx context.Context, message interface{}) *StringCmd + Ping(ctx context.Context) *StatusCmd + Quit(ctx context.Context) *StatusCmd + Unlink(ctx context.Context, keys ...string) *IntCmd + + BgRewriteAOF(ctx context.Context) *StatusCmd + BgSave(ctx context.Context) *StatusCmd + ClientKill(ctx context.Context, ipPort string) *StatusCmd + ClientKillByFilter(ctx context.Context, keys ...string) *IntCmd + ClientList(ctx context.Context) *StringCmd + ClientInfo(ctx context.Context) *ClientInfoCmd + ClientPause(ctx context.Context, dur time.Duration) *BoolCmd + ClientUnpause(ctx context.Context) *BoolCmd + ClientID(ctx context.Context) *IntCmd + ClientUnblock(ctx context.Context, id int64) *IntCmd + ClientUnblockWithError(ctx context.Context, id int64) *IntCmd + ClientMaintNotifications(ctx context.Context, enabled bool, endpointType string) *StatusCmd + ConfigGet(ctx context.Context, parameter string) *MapStringStringCmd + ConfigResetStat(ctx context.Context) *StatusCmd + ConfigSet(ctx context.Context, parameter, value string) *StatusCmd + ConfigRewrite(ctx context.Context) *StatusCmd + DBSize(ctx context.Context) *IntCmd + FlushAll(ctx context.Context) *StatusCmd + FlushAllAsync(ctx context.Context) *StatusCmd + FlushDB(ctx context.Context) *StatusCmd + FlushDBAsync(ctx context.Context) *StatusCmd + Info(ctx context.Context, section ...string) *StringCmd + LastSave(ctx context.Context) *IntCmd + Save(ctx context.Context) *StatusCmd + Shutdown(ctx context.Context) *StatusCmd + ShutdownSave(ctx context.Context) *StatusCmd + ShutdownNoSave(ctx context.Context) *StatusCmd + SlaveOf(ctx context.Context, host, port string) *StatusCmd + ReplicaOf(ctx context.Context, host, port string) *StatusCmd + SlowLogGet(ctx context.Context, num int64) *SlowLogCmd + SlowLogLen(ctx context.Context) *IntCmd + SlowLogReset(ctx context.Context) *StatusCmd + Time(ctx context.Context) *TimeCmd + DebugObject(ctx context.Context, key string) *StringCmd + MemoryUsage(ctx context.Context, key string, samples ...int) *IntCmd + Latency(ctx context.Context) *LatencyCmd + LatencyReset(ctx context.Context, events ...interface{}) *StatusCmd + + ModuleLoadex(ctx context.Context, conf *ModuleLoadexConfig) *StringCmd + + ACLCmdable + BitMapCmdable + ClusterCmdable + GenericCmdable + GeoCmdable + HashCmdable + HyperLogLogCmdable + ListCmdable + ProbabilisticCmdable + PubSubCmdable + ScriptingFunctionsCmdable + SearchCmdable + SetCmdable + SortedSetCmdable + StringCmdable + StreamCmdable + TimeseriesCmdable + JSONCmdable + VectorSetCmdable +} + +type StatefulCmdable interface { + Cmdable + Auth(ctx context.Context, password string) *StatusCmd + AuthACL(ctx context.Context, username, password string) *StatusCmd + Select(ctx context.Context, index int) *StatusCmd + SwapDB(ctx context.Context, index1, index2 int) *StatusCmd + ClientSetName(ctx context.Context, name string) *BoolCmd + ClientSetInfo(ctx context.Context, info LibraryInfo) *StatusCmd + Hello(ctx context.Context, ver int, username, password, clientName string) *MapStringInterfaceCmd +} + +var ( + _ Cmdable = (*Client)(nil) + _ Cmdable = (*Tx)(nil) + _ Cmdable = (*Ring)(nil) + _ Cmdable = (*ClusterClient)(nil) + _ Cmdable = (*Pipeline)(nil) +) + +type cmdable func(ctx context.Context, cmd Cmder) error + +type statefulCmdable func(ctx context.Context, cmd Cmder) error + +//------------------------------------------------------------------------------ + +func (c statefulCmdable) Auth(ctx context.Context, password string) *StatusCmd { + cmd := NewStatusCmd(ctx, "auth", password) + _ = c(ctx, cmd) + return cmd +} + +// AuthACL Perform an AUTH command, using the given user and pass. +// Should be used to authenticate the current connection with one of the connections defined in the ACL list +// when connecting to a Redis 6.0 instance, or greater, that is using the Redis ACL system. +func (c statefulCmdable) AuthACL(ctx context.Context, username, password string) *StatusCmd { + cmd := NewStatusCmd(ctx, "auth", username, password) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) Wait(ctx context.Context, numSlaves int, timeout time.Duration) *IntCmd { + cmd := NewIntCmd(ctx, "wait", numSlaves, int(timeout/time.Millisecond)) + cmd.setReadTimeout(timeout) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) WaitAOF(ctx context.Context, numLocal, numSlaves int, timeout time.Duration) *IntCmd { + cmd := NewIntCmd(ctx, "waitAOF", numLocal, numSlaves, int(timeout/time.Millisecond)) + cmd.setReadTimeout(timeout) + _ = c(ctx, cmd) + return cmd +} + +func (c statefulCmdable) Select(ctx context.Context, index int) *StatusCmd { + cmd := NewStatusCmd(ctx, "select", index) + _ = c(ctx, cmd) + return cmd +} + +func (c statefulCmdable) SwapDB(ctx context.Context, index1, index2 int) *StatusCmd { + cmd := NewStatusCmd(ctx, "swapdb", index1, index2) + _ = c(ctx, cmd) + return cmd +} + +// ClientSetName assigns a name to the connection. +func (c statefulCmdable) ClientSetName(ctx context.Context, name string) *BoolCmd { + cmd := NewBoolCmd(ctx, "client", "setname", name) + _ = c(ctx, cmd) + return cmd +} + +// ClientSetInfo sends a CLIENT SETINFO command with the provided info. +func (c statefulCmdable) ClientSetInfo(ctx context.Context, info LibraryInfo) *StatusCmd { + err := info.Validate() + if err != nil { + panic(err.Error()) + } + + var cmd *StatusCmd + if info.LibName != nil { + libName := fmt.Sprintf("go-redis(%s,%s)", *info.LibName, internal.ReplaceSpaces(runtime.Version())) + cmd = NewStatusCmd(ctx, "client", "setinfo", "LIB-NAME", libName) + } else { + cmd = NewStatusCmd(ctx, "client", "setinfo", "LIB-VER", *info.LibVer) + } + + _ = c(ctx, cmd) + return cmd +} + +// Validate checks if only one field in the struct is non-nil. +func (info LibraryInfo) Validate() error { + if info.LibName != nil && info.LibVer != nil { + return errors.New("both LibName and LibVer cannot be set at the same time") + } + if info.LibName == nil && info.LibVer == nil { + return errors.New("at least one of LibName and LibVer should be set") + } + return nil +} + +// Hello sets the resp protocol used. +func (c statefulCmdable) Hello(ctx context.Context, + ver int, username, password, clientName string, +) *MapStringInterfaceCmd { + args := make([]interface{}, 0, 7) + args = append(args, "hello", ver) + if password != "" { + if username != "" { + args = append(args, "auth", username, password) + } else { + args = append(args, "auth", "default", password) + } + } + if clientName != "" { + args = append(args, "setname", clientName) + } + cmd := NewMapStringInterfaceCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +//------------------------------------------------------------------------------ + +func (c cmdable) Command(ctx context.Context) *CommandsInfoCmd { + cmd := NewCommandsInfoCmd(ctx, "command") + _ = c(ctx, cmd) + return cmd +} + +// FilterBy is used for the `CommandList` command parameter. +type FilterBy struct { + Module string + ACLCat string + Pattern string +} + +func (c cmdable) CommandList(ctx context.Context, filter *FilterBy) *StringSliceCmd { + args := make([]interface{}, 0, 5) + args = append(args, "command", "list") + if filter != nil { + if filter.Module != "" { + args = append(args, "filterby", "module", filter.Module) + } else if filter.ACLCat != "" { + args = append(args, "filterby", "aclcat", filter.ACLCat) + } else if filter.Pattern != "" { + args = append(args, "filterby", "pattern", filter.Pattern) + } + } + cmd := NewStringSliceCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) CommandGetKeys(ctx context.Context, commands ...interface{}) *StringSliceCmd { + args := make([]interface{}, 2+len(commands)) + args[0] = "command" + args[1] = "getkeys" + copy(args[2:], commands) + cmd := NewStringSliceCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) CommandGetKeysAndFlags(ctx context.Context, commands ...interface{}) *KeyFlagsCmd { + args := make([]interface{}, 2+len(commands)) + args[0] = "command" + args[1] = "getkeysandflags" + copy(args[2:], commands) + cmd := NewKeyFlagsCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +// ClientGetName returns the name of the connection. +func (c cmdable) ClientGetName(ctx context.Context) *StringCmd { + cmd := NewStringCmd(ctx, "client", "getname") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) Echo(ctx context.Context, message interface{}) *StringCmd { + cmd := NewStringCmd(ctx, "echo", message) + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) Ping(ctx context.Context) *StatusCmd { + cmd := NewStatusCmd(ctx, "ping") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) Do(ctx context.Context, args ...interface{}) *Cmd { + cmd := NewCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +// DoRaw executes a command and returns the raw RESP protocol bytes without parsing. +func (c cmdable) DoRaw(ctx context.Context, args ...interface{}) *RawCmd { + cmd := NewRawCmd(ctx, args...) + _ = c(ctx, cmd) + return cmd +} + +// DoRawWriteTo executes a command and streams raw RESP bytes directly to w without intermediate allocations. +func (c cmdable) DoRawWriteTo(ctx context.Context, w io.Writer, args ...interface{}) *RawWriteToCmd { + cmd := NewRawWriteToCmd(ctx, w, args...) + _ = c(ctx, cmd) + return cmd +} + +// Quit closes the connection. +// +// Deprecated: Just close the connection instead as of Redis 7.2.0. +func (c cmdable) Quit(_ context.Context) *StatusCmd { + panic("not implemented") +} + +//------------------------------------------------------------------------------ + +func (c cmdable) BgRewriteAOF(ctx context.Context) *StatusCmd { + cmd := NewStatusCmd(ctx, "bgrewriteaof") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) BgSave(ctx context.Context) *StatusCmd { + cmd := NewStatusCmd(ctx, "bgsave") + _ = c(ctx, cmd) + return cmd +} + +func (c cmdable) ClientKill(ctx context.Context, ipPort string) *StatusCmd { + cmd := NewStatusCmd(ctx, "client", "kill", ipPort) + _ = c(ctx, cmd) + return cmd +} + +// ClientKillByFilter is new style syntax, while the ClientKill is old +// +// CLIENT KILL