@strapi/data-transfer 5.37.1 → 5.38.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/engine/errors.js.map +1 -1
  2. package/dist/engine/errors.mjs.map +1 -1
  3. package/dist/engine/index.js.map +1 -1
  4. package/dist/engine/index.mjs.map +1 -1
  5. package/dist/engine/validation/provider.js.map +1 -1
  6. package/dist/engine/validation/provider.mjs.map +1 -1
  7. package/dist/engine/validation/schemas/index.js.map +1 -1
  8. package/dist/engine/validation/schemas/index.mjs.map +1 -1
  9. package/dist/errors/base.js.map +1 -1
  10. package/dist/errors/base.mjs.map +1 -1
  11. package/dist/errors/constants.js +0 -1
  12. package/dist/errors/constants.js.map +1 -1
  13. package/dist/errors/constants.mjs +0 -1
  14. package/dist/errors/constants.mjs.map +1 -1
  15. package/dist/errors/providers.js.map +1 -1
  16. package/dist/errors/providers.mjs.map +1 -1
  17. package/dist/file/providers/destination/index.js.map +1 -1
  18. package/dist/file/providers/destination/index.mjs.map +1 -1
  19. package/dist/file/providers/destination/utils.js.map +1 -1
  20. package/dist/file/providers/destination/utils.mjs.map +1 -1
  21. package/dist/file/providers/index.js +4 -4
  22. package/dist/file/providers/source/index.d.ts.map +1 -1
  23. package/dist/file/providers/source/index.js +6 -3
  24. package/dist/file/providers/source/index.js.map +1 -1
  25. package/dist/file/providers/source/index.mjs +7 -4
  26. package/dist/file/providers/source/index.mjs.map +1 -1
  27. package/dist/file/providers/source/utils.js.map +1 -1
  28. package/dist/file/providers/source/utils.mjs.map +1 -1
  29. package/dist/index.js +4 -4
  30. package/dist/index.mjs +4 -4
  31. package/dist/strapi/providers/local-destination/index.js.map +1 -1
  32. package/dist/strapi/providers/local-destination/index.mjs.map +1 -1
  33. package/dist/strapi/providers/local-destination/strategies/restore/configuration.js.map +1 -1
  34. package/dist/strapi/providers/local-destination/strategies/restore/configuration.mjs.map +1 -1
  35. package/dist/strapi/providers/local-destination/strategies/restore/entities.js.map +1 -1
  36. package/dist/strapi/providers/local-destination/strategies/restore/entities.mjs.map +1 -1
  37. package/dist/strapi/providers/local-destination/strategies/restore/index.js.map +1 -1
  38. package/dist/strapi/providers/local-destination/strategies/restore/index.mjs.map +1 -1
  39. package/dist/strapi/providers/local-destination/strategies/restore/links.js.map +1 -1
  40. package/dist/strapi/providers/local-destination/strategies/restore/links.mjs.map +1 -1
  41. package/dist/strapi/providers/local-source/assets.js.map +1 -1
  42. package/dist/strapi/providers/local-source/assets.mjs +1 -1
  43. package/dist/strapi/providers/local-source/assets.mjs.map +1 -1
  44. package/dist/strapi/providers/local-source/configuration.js.map +1 -1
  45. package/dist/strapi/providers/local-source/configuration.mjs.map +1 -1
  46. package/dist/strapi/providers/local-source/entities.js.map +1 -1
  47. package/dist/strapi/providers/local-source/entities.mjs.map +1 -1
  48. package/dist/strapi/providers/local-source/index.js.map +1 -1
  49. package/dist/strapi/providers/local-source/index.mjs.map +1 -1
  50. package/dist/strapi/providers/local-source/links.js.map +1 -1
  51. package/dist/strapi/providers/local-source/links.mjs.map +1 -1
  52. package/dist/strapi/providers/remote-destination/index.js +1 -1
  53. package/dist/strapi/providers/remote-destination/index.js.map +1 -1
  54. package/dist/strapi/providers/remote-destination/index.mjs +1 -1
  55. package/dist/strapi/providers/remote-destination/index.mjs.map +1 -1
  56. package/dist/strapi/providers/remote-source/index.js.map +1 -1
  57. package/dist/strapi/providers/remote-source/index.mjs.map +1 -1
  58. package/dist/strapi/providers/utils.js.map +1 -1
  59. package/dist/strapi/providers/utils.mjs.map +1 -1
  60. package/dist/strapi/queries/entity.js.map +1 -1
  61. package/dist/strapi/queries/entity.mjs +2 -2
  62. package/dist/strapi/queries/entity.mjs.map +1 -1
  63. package/dist/strapi/queries/link.js.map +1 -1
  64. package/dist/strapi/queries/link.mjs.map +1 -1
  65. package/dist/strapi/remote/constants.js.map +1 -1
  66. package/dist/strapi/remote/constants.mjs.map +1 -1
  67. package/dist/strapi/remote/flows/default.js.map +1 -1
  68. package/dist/strapi/remote/flows/default.mjs.map +1 -1
  69. package/dist/strapi/remote/flows/index.js.map +1 -1
  70. package/dist/strapi/remote/flows/index.mjs.map +1 -1
  71. package/dist/strapi/remote/handlers/constants.js.map +1 -1
  72. package/dist/strapi/remote/handlers/constants.mjs.map +1 -1
  73. package/dist/strapi/remote/handlers/pull.js.map +1 -1
  74. package/dist/strapi/remote/handlers/pull.mjs.map +1 -1
  75. package/dist/strapi/remote/handlers/push.js.map +1 -1
  76. package/dist/strapi/remote/handlers/push.mjs +1 -1
  77. package/dist/strapi/remote/handlers/push.mjs.map +1 -1
  78. package/dist/strapi/remote/handlers/utils.js.map +1 -1
  79. package/dist/strapi/remote/handlers/utils.mjs +1 -1
  80. package/dist/strapi/remote/handlers/utils.mjs.map +1 -1
  81. package/dist/utils/components.js.map +1 -1
  82. package/dist/utils/components.mjs +1 -1
  83. package/dist/utils/components.mjs.map +1 -1
  84. package/dist/utils/diagnostic.js.map +1 -1
  85. package/dist/utils/diagnostic.mjs.map +1 -1
  86. package/dist/utils/encryption/decrypt.js.map +1 -1
  87. package/dist/utils/encryption/decrypt.mjs.map +1 -1
  88. package/dist/utils/encryption/encrypt.js.map +1 -1
  89. package/dist/utils/encryption/encrypt.mjs.map +1 -1
  90. package/dist/utils/json.js.map +1 -1
  91. package/dist/utils/json.mjs.map +1 -1
  92. package/dist/utils/middleware.js.map +1 -1
  93. package/dist/utils/middleware.mjs.map +1 -1
  94. package/dist/utils/providers.js.map +1 -1
  95. package/dist/utils/providers.mjs.map +1 -1
  96. package/dist/utils/schema.js.map +1 -1
  97. package/dist/utils/schema.mjs.map +1 -1
  98. package/dist/utils/stream.js.map +1 -1
  99. package/dist/utils/stream.mjs.map +1 -1
  100. package/dist/utils/transaction.js.map +1 -1
  101. package/dist/utils/transaction.mjs.map +1 -1
  102. package/package.json +16 -7
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../../../src/strapi/providers/utils.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport { RawData, WebSocket } from 'ws';\n\nimport type { Client, Server } from '../../../types/remote/protocol';\n\nimport {\n ProviderError,\n ProviderTransferError,\n ProviderInitializationError,\n ProviderValidationError,\n ProviderErrorDetails,\n} from '../../errors/providers';\nimport { IDiagnosticReporter } from '../../utils/diagnostic';\n\ninterface IDispatcherState {\n transfer?: { kind: Client.TransferKind; id: string };\n}\n\ninterface IDispatchOptions {\n attachTransfer?: boolean;\n}\n\ntype Dispatch<T> = Omit<T, 'transferID' | 'uuid'>;\n\nexport const createDispatcher = (\n ws: WebSocket,\n retryMessageOptions = {\n retryMessageMaxRetries: 5,\n retryMessageTimeout: 30000,\n },\n reportInfo?: (message: string) => void\n) => {\n const state: IDispatcherState = {};\n\n type DispatchMessage = Dispatch<Client.Message>;\n\n const dispatch = async <U = null>(\n message: DispatchMessage,\n options: IDispatchOptions = {}\n ): Promise<U | null> => {\n if (!ws) {\n throw new Error('No websocket connection found');\n }\n\n return new Promise<U | null>((resolve, reject) => {\n const uuid = randomUUID();\n const payload = { ...message, uuid };\n let numberOfTimesMessageWasSent = 0;\n\n if (options.attachTransfer) {\n Object.assign(payload, { transferID: state.transfer?.id });\n }\n\n if (message.type === 'command') {\n reportInfo?.(\n `dispatching message command:${(message as Client.CommandMessage).command} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`\n );\n } else if (message.type === 'transfer') {\n const messageToSend = message as Client.TransferMessage;\n reportInfo?.(\n `dispatching message action:${messageToSend.action} ${messageToSend.kind === 'step' ? `step:${messageToSend.step}` : ''} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`\n );\n }\n const stringifiedPayload = JSON.stringify(payload);\n ws.send(stringifiedPayload, (error) => {\n if (error) {\n reject(error);\n }\n });\n const { retryMessageMaxRetries, retryMessageTimeout } = retryMessageOptions;\n const sendPeriodically = () => {\n if (numberOfTimesMessageWasSent <= retryMessageMaxRetries) {\n numberOfTimesMessageWasSent += 1;\n ws.send(stringifiedPayload, (error) => {\n if (error) {\n reject(error);\n }\n });\n } else {\n reject(new ProviderError('error', 'Request timed out'));\n }\n };\n const interval = setInterval(sendPeriodically, retryMessageTimeout);\n\n const onResponse = (raw: RawData) => {\n const response: Server.Message<U> = JSON.parse(raw.toString());\n if (message.type === 'command') {\n reportInfo?.(\n `received response to message command: ${(message as Client.CommandMessage).command} uuid: ${uuid} sent: ${numberOfTimesMessageWasSent}`\n );\n } else if (message.type === 'transfer') {\n const messageToSend = message as Client.TransferMessage;\n reportInfo?.(\n `received response to message action:${messageToSend.action} ${messageToSend.kind === 'step' ? `step:${messageToSend.step}` : ''} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`\n );\n }\n if (response.uuid === uuid) {\n clearInterval(interval);\n if (response.error) {\n const message = response.error.message;\n const details = response.error.details?.details as ProviderErrorDetails;\n const step = response.error.details?.step;\n let error = new ProviderError('error', message, details);\n if (step === 'transfer') {\n error = new ProviderTransferError(message, details);\n } else if (step === 'validation') {\n error = new ProviderValidationError(message, details);\n } else if (step === 'initialization') {\n error = new ProviderInitializationError(message);\n }\n return reject(error);\n }\n resolve(response.data ?? null);\n } else {\n ws.once('message', onResponse);\n }\n };\n\n ws.once('message', onResponse);\n });\n };\n\n const dispatchCommand = <U extends Client.Command>(\n payload: {\n command: U;\n } & ([Client.GetCommandParams<U>] extends [never]\n ? unknown\n : { params?: Client.GetCommandParams<U> })\n ) => {\n return dispatch({ type: 'command', ...payload } as Client.CommandMessage);\n };\n\n const dispatchTransferAction = async <T>(action: Client.Action['action']) => {\n const payload: Dispatch<Client.Action> = { type: 'transfer', kind: 'action', action };\n\n return dispatch<T>(payload, { attachTransfer: true }) ?? Promise.resolve(null);\n };\n\n const dispatchTransferStep = async <\n T,\n A extends Client.TransferPushMessage['action'] = Client.TransferPushMessage['action'],\n S extends Client.TransferPushStep = Client.TransferPushStep,\n >(\n payload: {\n step: S;\n action: A;\n } & (A extends 'stream' ? { data: Client.GetTransferPushStreamData<S> } : unknown)\n ) => {\n const message: Dispatch<Client.TransferPushMessage> = {\n type: 'transfer',\n kind: 'step',\n ...payload,\n };\n\n return dispatch<T>(message, { attachTransfer: true }) ?? Promise.resolve(null);\n };\n\n const setTransferProperties = (\n properties: Exclude<IDispatcherState['transfer'], undefined>\n ): void => {\n state.transfer = { ...properties };\n };\n\n return {\n get transferID() {\n return state.transfer?.id;\n },\n\n get transferKind() {\n return state.transfer?.kind;\n },\n\n setTransferProperties,\n\n dispatch,\n dispatchCommand,\n dispatchTransferAction,\n dispatchTransferStep,\n };\n};\n\ntype WebsocketParams = ConstructorParameters<typeof WebSocket>;\ntype Address = WebsocketParams[0];\ntype Options = WebsocketParams[2];\n\nexport const connectToWebsocket = (\n address: Address,\n options?: Options,\n diagnostics?: IDiagnosticReporter\n): Promise<WebSocket> => {\n return new Promise((resolve, reject) => {\n const server = new WebSocket(address, options);\n server.once('open', () => {\n resolve(server);\n });\n\n server.on('unexpected-response', (_req, res) => {\n if (res.statusCode === 401) {\n return reject(\n new ProviderInitializationError(\n 'Failed to initialize the connection: Authentication Error'\n )\n );\n }\n\n if (res.statusCode === 403) {\n return reject(\n new ProviderInitializationError(\n 'Failed to initialize the connection: Authorization Error'\n )\n );\n }\n\n if (res.statusCode === 404) {\n return reject(\n new ProviderInitializationError(\n 'Failed to initialize the connection: Data transfer is not enabled on the remote host'\n )\n );\n }\n\n return reject(\n new ProviderInitializationError(\n `Failed to initialize the connection: Unexpected server response ${res.statusCode}`\n )\n );\n });\n\n server.on('message', (raw: RawData) => {\n const response: Server.Message = JSON.parse(raw.toString());\n if (response.diagnostic) {\n diagnostics?.report({\n ...response.diagnostic,\n });\n }\n });\n\n server.once('error', (err) => {\n reject(\n new ProviderTransferError(err.message, {\n details: {\n error: err.message,\n },\n })\n );\n });\n });\n};\n\nexport const trimTrailingSlash = (input: string): string => {\n return input.replace(/\\/$/, '');\n};\n\nexport const wait = (ms: number) => {\n return new Promise<void>((resolve) => {\n setTimeout(resolve, ms);\n });\n};\n\nexport const waitUntil = async (test: () => boolean, interval: number): Promise<void> => {\n while (!test()) {\n await wait(interval);\n }\n\n return Promise.resolve();\n};\n"],"names":["createDispatcher","ws","retryMessageOptions","retryMessageMaxRetries","retryMessageTimeout","reportInfo","state","dispatch","message","options","Error","Promise","resolve","reject","uuid","randomUUID","payload","numberOfTimesMessageWasSent","attachTransfer","Object","assign","transferID","transfer","id","type","command","messageToSend","action","kind","step","stringifiedPayload","JSON","stringify","send","error","sendPeriodically","ProviderError","interval","setInterval","onResponse","raw","response","parse","toString","clearInterval","details","ProviderTransferError","ProviderValidationError","ProviderInitializationError","data","once","dispatchCommand","dispatchTransferAction","dispatchTransferStep","setTransferProperties","properties","transferKind","connectToWebsocket","address","diagnostics","server","WebSocket","on","_req","res","statusCode","diagnostic","report","err","trimTrailingSlash","input","replace"],"mappings":"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"}
1
+ {"version":3,"file":"utils.mjs","sources":["../../../src/strapi/providers/utils.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport { RawData, WebSocket } from 'ws';\n\nimport type { Client, Server } from '../../../types/remote/protocol';\n\nimport {\n ProviderError,\n ProviderTransferError,\n ProviderInitializationError,\n ProviderValidationError,\n ProviderErrorDetails,\n} from '../../errors/providers';\nimport { IDiagnosticReporter } from '../../utils/diagnostic';\n\ninterface IDispatcherState {\n transfer?: { kind: Client.TransferKind; id: string };\n}\n\ninterface IDispatchOptions {\n attachTransfer?: boolean;\n}\n\ntype Dispatch<T> = Omit<T, 'transferID' | 'uuid'>;\n\nexport const createDispatcher = (\n ws: WebSocket,\n retryMessageOptions = {\n retryMessageMaxRetries: 5,\n retryMessageTimeout: 30000,\n },\n reportInfo?: (message: string) => void\n) => {\n const state: IDispatcherState = {};\n\n type DispatchMessage = Dispatch<Client.Message>;\n\n const dispatch = async <U = null>(\n message: DispatchMessage,\n options: IDispatchOptions = {}\n ): Promise<U | null> => {\n if (!ws) {\n throw new Error('No websocket connection found');\n }\n\n return new Promise<U | null>((resolve, reject) => {\n const uuid = randomUUID();\n const payload = { ...message, uuid };\n let numberOfTimesMessageWasSent = 0;\n\n if (options.attachTransfer) {\n Object.assign(payload, { transferID: state.transfer?.id });\n }\n\n if (message.type === 'command') {\n reportInfo?.(\n `dispatching message command:${(message as Client.CommandMessage).command} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`\n );\n } else if (message.type === 'transfer') {\n const messageToSend = message as Client.TransferMessage;\n reportInfo?.(\n `dispatching message action:${messageToSend.action} ${messageToSend.kind === 'step' ? `step:${messageToSend.step}` : ''} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`\n );\n }\n const stringifiedPayload = JSON.stringify(payload);\n ws.send(stringifiedPayload, (error) => {\n if (error) {\n reject(error);\n }\n });\n const { retryMessageMaxRetries, retryMessageTimeout } = retryMessageOptions;\n const sendPeriodically = () => {\n if (numberOfTimesMessageWasSent <= retryMessageMaxRetries) {\n numberOfTimesMessageWasSent += 1;\n ws.send(stringifiedPayload, (error) => {\n if (error) {\n reject(error);\n }\n });\n } else {\n reject(new ProviderError('error', 'Request timed out'));\n }\n };\n const interval = setInterval(sendPeriodically, retryMessageTimeout);\n\n const onResponse = (raw: RawData) => {\n const response: Server.Message<U> = JSON.parse(raw.toString());\n if (message.type === 'command') {\n reportInfo?.(\n `received response to message command: ${(message as Client.CommandMessage).command} uuid: ${uuid} sent: ${numberOfTimesMessageWasSent}`\n );\n } else if (message.type === 'transfer') {\n const messageToSend = message as Client.TransferMessage;\n reportInfo?.(\n `received response to message action:${messageToSend.action} ${messageToSend.kind === 'step' ? `step:${messageToSend.step}` : ''} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`\n );\n }\n if (response.uuid === uuid) {\n clearInterval(interval);\n if (response.error) {\n const message = response.error.message;\n const details = response.error.details?.details as ProviderErrorDetails;\n const step = response.error.details?.step;\n let error = new ProviderError('error', message, details);\n if (step === 'transfer') {\n error = new ProviderTransferError(message, details);\n } else if (step === 'validation') {\n error = new ProviderValidationError(message, details);\n } else if (step === 'initialization') {\n error = new ProviderInitializationError(message);\n }\n return reject(error);\n }\n resolve(response.data ?? null);\n } else {\n ws.once('message', onResponse);\n }\n };\n\n ws.once('message', onResponse);\n });\n };\n\n const dispatchCommand = <U extends Client.Command>(\n payload: {\n command: U;\n } & ([Client.GetCommandParams<U>] extends [never]\n ? unknown\n : { params?: Client.GetCommandParams<U> })\n ) => {\n return dispatch({ type: 'command', ...payload } as Client.CommandMessage);\n };\n\n const dispatchTransferAction = async <T>(action: Client.Action['action']) => {\n const payload: Dispatch<Client.Action> = { type: 'transfer', kind: 'action', action };\n\n return dispatch<T>(payload, { attachTransfer: true }) ?? Promise.resolve(null);\n };\n\n const dispatchTransferStep = async <\n T,\n A extends Client.TransferPushMessage['action'] = Client.TransferPushMessage['action'],\n S extends Client.TransferPushStep = Client.TransferPushStep,\n >(\n payload: {\n step: S;\n action: A;\n } & (A extends 'stream' ? { data: Client.GetTransferPushStreamData<S> } : unknown)\n ) => {\n const message: Dispatch<Client.TransferPushMessage> = {\n type: 'transfer',\n kind: 'step',\n ...payload,\n };\n\n return dispatch<T>(message, { attachTransfer: true }) ?? Promise.resolve(null);\n };\n\n const setTransferProperties = (\n properties: Exclude<IDispatcherState['transfer'], undefined>\n ): void => {\n state.transfer = { ...properties };\n };\n\n return {\n get transferID() {\n return state.transfer?.id;\n },\n\n get transferKind() {\n return state.transfer?.kind;\n },\n\n setTransferProperties,\n\n dispatch,\n dispatchCommand,\n dispatchTransferAction,\n dispatchTransferStep,\n };\n};\n\ntype WebsocketParams = ConstructorParameters<typeof WebSocket>;\ntype Address = WebsocketParams[0];\ntype Options = WebsocketParams[2];\n\nexport const connectToWebsocket = (\n address: Address,\n options?: Options,\n diagnostics?: IDiagnosticReporter\n): Promise<WebSocket> => {\n return new Promise((resolve, reject) => {\n const server = new WebSocket(address, options);\n server.once('open', () => {\n resolve(server);\n });\n\n server.on('unexpected-response', (_req, res) => {\n if (res.statusCode === 401) {\n return reject(\n new ProviderInitializationError(\n 'Failed to initialize the connection: Authentication Error'\n )\n );\n }\n\n if (res.statusCode === 403) {\n return reject(\n new ProviderInitializationError(\n 'Failed to initialize the connection: Authorization Error'\n )\n );\n }\n\n if (res.statusCode === 404) {\n return reject(\n new ProviderInitializationError(\n 'Failed to initialize the connection: Data transfer is not enabled on the remote host'\n )\n );\n }\n\n return reject(\n new ProviderInitializationError(\n `Failed to initialize the connection: Unexpected server response ${res.statusCode}`\n )\n );\n });\n\n server.on('message', (raw: RawData) => {\n const response: Server.Message = JSON.parse(raw.toString());\n if (response.diagnostic) {\n diagnostics?.report({\n ...response.diagnostic,\n });\n }\n });\n\n server.once('error', (err) => {\n reject(\n new ProviderTransferError(err.message, {\n details: {\n error: err.message,\n },\n })\n );\n });\n });\n};\n\nexport const trimTrailingSlash = (input: string): string => {\n return input.replace(/\\/$/, '');\n};\n\nexport const wait = (ms: number) => {\n return new Promise<void>((resolve) => {\n setTimeout(resolve, ms);\n });\n};\n\nexport const waitUntil = async (test: () => boolean, interval: number): Promise<void> => {\n while (!test()) {\n await wait(interval);\n }\n\n return Promise.resolve();\n};\n"],"names":["createDispatcher","ws","retryMessageOptions","retryMessageMaxRetries","retryMessageTimeout","reportInfo","state","dispatch","message","options","Error","Promise","resolve","reject","uuid","randomUUID","payload","numberOfTimesMessageWasSent","attachTransfer","Object","assign","transferID","transfer","id","type","command","messageToSend","action","kind","step","stringifiedPayload","JSON","stringify","send","error","sendPeriodically","ProviderError","interval","setInterval","onResponse","raw","response","parse","toString","clearInterval","details","ProviderTransferError","ProviderValidationError","ProviderInitializationError","data","once","dispatchCommand","dispatchTransferAction","dispatchTransferStep","setTransferProperties","properties","transferKind","connectToWebsocket","address","diagnostics","server","WebSocket","on","_req","res","statusCode","diagnostic","report","err","trimTrailingSlash","input","replace"],"mappings":";;;;AAwBO,MAAMA,gBAAAA,GAAmB,CAC9BC,EAAAA,EACAC,mBAAAA,GAAsB;IACpBC,sBAAAA,EAAwB,CAAA;IACxBC,mBAAAA,EAAqB;AACvB,CAAC,EACDC,UAAAA,GAAAA;AAEA,IAAA,MAAMC,QAA0B,EAAC;AAIjC,IAAA,MAAMC,QAAAA,GAAW,OACfC,OAAAA,EACAC,OAAAA,GAA4B,EAAE,GAAA;AAE9B,QAAA,IAAI,CAACR,EAAAA,EAAI;AACP,YAAA,MAAM,IAAIS,KAAAA,CAAM,+BAAA,CAAA;AAClB,QAAA;QAEA,OAAO,IAAIC,OAAAA,CAAkB,CAACC,OAAAA,EAASC,MAAAA,GAAAA;AACrC,YAAA,MAAMC,IAAAA,GAAOC,UAAAA,EAAAA;AACb,YAAA,MAAMC,OAAAA,GAAU;AAAE,gBAAA,GAAGR,OAAO;AAAEM,gBAAAA;AAAK,aAAA;AACnC,YAAA,IAAIG,2BAAAA,GAA8B,CAAA;YAElC,IAAIR,OAAAA,CAAQS,cAAc,EAAE;gBAC1BC,MAAAA,CAAOC,MAAM,CAACJ,OAAAA,EAAS;oBAAEK,UAAAA,EAAYf,KAAAA,CAAMgB,QAAQ,EAAEC;AAAG,iBAAA,CAAA;AAC1D,YAAA;YAEA,IAAIf,OAAAA,CAAQgB,IAAI,KAAK,SAAA,EAAW;AAC9BnB,gBAAAA,UAAAA,GACE,CAAC,4BAA4B,EAAGG,OAAAA,CAAkCiB,OAAO,CAAC,MAAM,EAAEX,IAAAA,CAAK,MAAM,EAAEG,2BAAAA,CAAAA,CAA6B,CAAA;AAEhI,YAAA,CAAA,MAAO,IAAIT,OAAAA,CAAQgB,IAAI,KAAK,UAAA,EAAY;AACtC,gBAAA,MAAME,aAAAA,GAAgBlB,OAAAA;gBACtBH,UAAAA,GACE,CAAC,2BAA2B,EAAEqB,aAAAA,CAAcC,MAAM,CAAC,CAAC,EAAED,aAAAA,CAAcE,IAAI,KAAK,MAAA,GAAS,CAAC,KAAK,EAAEF,aAAAA,CAAcG,IAAI,CAAA,CAAE,GAAG,EAAA,CAAG,MAAM,EAAEf,IAAAA,CAAK,MAAM,EAAEG,2BAAAA,CAAAA,CAA6B,CAAA;AAE9K,YAAA;YACA,MAAMa,kBAAAA,GAAqBC,IAAAA,CAAKC,SAAS,CAAChB,OAAAA,CAAAA;YAC1Cf,EAAAA,CAAGgC,IAAI,CAACH,kBAAAA,EAAoB,CAACI,KAAAA,GAAAA;AAC3B,gBAAA,IAAIA,KAAAA,EAAO;oBACTrB,MAAAA,CAAOqB,KAAAA,CAAAA;AACT,gBAAA;AACF,YAAA,CAAA,CAAA;AACA,YAAA,MAAM,EAAE/B,sBAAsB,EAAEC,mBAAmB,EAAE,GAAGF,mBAAAA;AACxD,YAAA,MAAMiC,gBAAAA,GAAmB,IAAA;AACvB,gBAAA,IAAIlB,+BAA+Bd,sBAAAA,EAAwB;oBACzDc,2BAAAA,IAA+B,CAAA;oBAC/BhB,EAAAA,CAAGgC,IAAI,CAACH,kBAAAA,EAAoB,CAACI,KAAAA,GAAAA;AAC3B,wBAAA,IAAIA,KAAAA,EAAO;4BACTrB,MAAAA,CAAOqB,KAAAA,CAAAA;AACT,wBAAA;AACF,oBAAA,CAAA,CAAA;gBACF,CAAA,MAAO;oBACLrB,MAAAA,CAAO,IAAIuB,cAAc,OAAA,EAAS,mBAAA,CAAA,CAAA;AACpC,gBAAA;AACF,YAAA,CAAA;YACA,MAAMC,QAAAA,GAAWC,YAAYH,gBAAAA,EAAkB/B,mBAAAA,CAAAA;AAE/C,YAAA,MAAMmC,aAAa,CAACC,GAAAA,GAAAA;AAClB,gBAAA,MAAMC,QAAAA,GAA8BV,IAAAA,CAAKW,KAAK,CAACF,IAAIG,QAAQ,EAAA,CAAA;gBAC3D,IAAInC,OAAAA,CAAQgB,IAAI,KAAK,SAAA,EAAW;AAC9BnB,oBAAAA,UAAAA,GACE,CAAC,sCAAsC,EAAGG,OAAAA,CAAkCiB,OAAO,CAAC,OAAO,EAAEX,IAAAA,CAAK,OAAO,EAAEG,2BAAAA,CAAAA,CAA6B,CAAA;AAE5I,gBAAA,CAAA,MAAO,IAAIT,OAAAA,CAAQgB,IAAI,KAAK,UAAA,EAAY;AACtC,oBAAA,MAAME,aAAAA,GAAgBlB,OAAAA;oBACtBH,UAAAA,GACE,CAAC,oCAAoC,EAAEqB,aAAAA,CAAcC,MAAM,CAAC,CAAC,EAAED,aAAAA,CAAcE,IAAI,KAAK,MAAA,GAAS,CAAC,KAAK,EAAEF,aAAAA,CAAcG,IAAI,CAAA,CAAE,GAAG,EAAA,CAAG,MAAM,EAAEf,IAAAA,CAAK,MAAM,EAAEG,2BAAAA,CAAAA,CAA6B,CAAA;AAEvL,gBAAA;gBACA,IAAIwB,QAAAA,CAAS3B,IAAI,KAAKA,IAAAA,EAAM;oBAC1B8B,aAAAA,CAAcP,QAAAA,CAAAA;oBACd,IAAII,QAAAA,CAASP,KAAK,EAAE;AAClB,wBAAA,MAAM1B,OAAAA,GAAUiC,QAAAA,CAASP,KAAK,CAAC1B,OAAO;AACtC,wBAAA,MAAMqC,OAAAA,GAAUJ,QAAAA,CAASP,KAAK,CAACW,OAAO,EAAEA,OAAAA;AACxC,wBAAA,MAAMhB,IAAAA,GAAOY,QAAAA,CAASP,KAAK,CAACW,OAAO,EAAEhB,IAAAA;AACrC,wBAAA,IAAIK,KAAAA,GAAQ,IAAIE,aAAAA,CAAc,OAAA,EAAS5B,OAAAA,EAASqC,OAAAA,CAAAA;AAChD,wBAAA,IAAIhB,SAAS,UAAA,EAAY;4BACvBK,KAAAA,GAAQ,IAAIY,sBAAsBtC,OAAAA,EAASqC,OAAAA,CAAAA;wBAC7C,CAAA,MAAO,IAAIhB,SAAS,YAAA,EAAc;4BAChCK,KAAAA,GAAQ,IAAIa,wBAAwBvC,OAAAA,EAASqC,OAAAA,CAAAA;wBAC/C,CAAA,MAAO,IAAIhB,SAAS,gBAAA,EAAkB;AACpCK,4BAAAA,KAAAA,GAAQ,IAAIc,2BAAAA,CAA4BxC,OAAAA,CAAAA;AAC1C,wBAAA;AACA,wBAAA,OAAOK,MAAAA,CAAOqB,KAAAA,CAAAA;AAChB,oBAAA;oBACAtB,OAAAA,CAAQ6B,QAAAA,CAASQ,IAAI,IAAI,IAAA,CAAA;gBAC3B,CAAA,MAAO;oBACLhD,EAAAA,CAAGiD,IAAI,CAAC,SAAA,EAAWX,UAAAA,CAAAA;AACrB,gBAAA;AACF,YAAA,CAAA;YAEAtC,EAAAA,CAAGiD,IAAI,CAAC,SAAA,EAAWX,UAAAA,CAAAA;AACrB,QAAA,CAAA,CAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMY,kBAAkB,CACtBnC,OAAAA,GAAAA;AAMA,QAAA,OAAOT,QAAAA,CAAS;YAAEiB,IAAAA,EAAM,SAAA;AAAW,YAAA,GAAGR;AAAQ,SAAA,CAAA;AAChD,IAAA,CAAA;AAEA,IAAA,MAAMoC,yBAAyB,OAAUzB,MAAAA,GAAAA;AACvC,QAAA,MAAMX,OAAAA,GAAmC;YAAEQ,IAAAA,EAAM,UAAA;YAAYI,IAAAA,EAAM,QAAA;AAAUD,YAAAA;AAAO,SAAA;AAEpF,QAAA,OAAOpB,SAAYS,OAAAA,EAAS;YAAEE,cAAAA,EAAgB;SAAK,CAAA,IAAMP,OAAAA,CAAQC,OAAO,CAAC,IAAA,CAAA;AAC3E,IAAA,CAAA;AAEA,IAAA,MAAMyC,uBAAuB,OAK3BrC,OAAAA,GAAAA;AAKA,QAAA,MAAMR,OAAAA,GAAgD;YACpDgB,IAAAA,EAAM,UAAA;YACNI,IAAAA,EAAM,MAAA;AACN,YAAA,GAAGZ;AACL,SAAA;AAEA,QAAA,OAAOT,SAAYC,OAAAA,EAAS;YAAEU,cAAAA,EAAgB;SAAK,CAAA,IAAMP,OAAAA,CAAQC,OAAO,CAAC,IAAA,CAAA;AAC3E,IAAA,CAAA;AAEA,IAAA,MAAM0C,wBAAwB,CAC5BC,UAAAA,GAAAA;AAEAjD,QAAAA,KAAAA,CAAMgB,QAAQ,GAAG;AAAE,YAAA,GAAGiC;AAAW,SAAA;AACnC,IAAA,CAAA;IAEA,OAAO;AACL,QAAA,IAAIlC,UAAAA,CAAAA,GAAa;YACf,OAAOf,KAAAA,CAAMgB,QAAQ,EAAEC,EAAAA;AACzB,QAAA,CAAA;AAEA,QAAA,IAAIiC,YAAAA,CAAAA,GAAe;YACjB,OAAOlD,KAAAA,CAAMgB,QAAQ,EAAEM,IAAAA;AACzB,QAAA,CAAA;AAEA0B,QAAAA,qBAAAA;AAEA/C,QAAAA,QAAAA;AACA4C,QAAAA,eAAAA;AACAC,QAAAA,sBAAAA;AACAC,QAAAA;AACF,KAAA;AACF;AAMO,MAAMI,kBAAAA,GAAqB,CAChCC,OAAAA,EACAjD,OAAAA,EACAkD,WAAAA,GAAAA;IAEA,OAAO,IAAIhD,OAAAA,CAAQ,CAACC,OAAAA,EAASC,MAAAA,GAAAA;QAC3B,MAAM+C,MAAAA,GAAS,IAAIC,SAAAA,CAAUH,OAAAA,EAASjD,OAAAA,CAAAA;QACtCmD,MAAAA,CAAOV,IAAI,CAAC,MAAA,EAAQ,IAAA;YAClBtC,OAAAA,CAAQgD,MAAAA,CAAAA;AACV,QAAA,CAAA,CAAA;AAEAA,QAAAA,MAAAA,CAAOE,EAAE,CAAC,qBAAA,EAAuB,CAACC,IAAAA,EAAMC,GAAAA,GAAAA;YACtC,IAAIA,GAAAA,CAAIC,UAAU,KAAK,GAAA,EAAK;gBAC1B,OAAOpD,MAAAA,CACL,IAAImC,2BAAAA,CACF,2DAAA,CAAA,CAAA;AAGN,YAAA;YAEA,IAAIgB,GAAAA,CAAIC,UAAU,KAAK,GAAA,EAAK;gBAC1B,OAAOpD,MAAAA,CACL,IAAImC,2BAAAA,CACF,0DAAA,CAAA,CAAA;AAGN,YAAA;YAEA,IAAIgB,GAAAA,CAAIC,UAAU,KAAK,GAAA,EAAK;gBAC1B,OAAOpD,MAAAA,CACL,IAAImC,2BAAAA,CACF,sFAAA,CAAA,CAAA;AAGN,YAAA;YAEA,OAAOnC,MAAAA,CACL,IAAImC,2BAAAA,CACF,CAAC,gEAAgE,EAAEgB,GAAAA,CAAIC,UAAU,CAAA,CAAE,CAAA,CAAA;AAGzF,QAAA,CAAA,CAAA;QAEAL,MAAAA,CAAOE,EAAE,CAAC,SAAA,EAAW,CAACtB,GAAAA,GAAAA;AACpB,YAAA,MAAMC,QAAAA,GAA2BV,IAAAA,CAAKW,KAAK,CAACF,IAAIG,QAAQ,EAAA,CAAA;YACxD,IAAIF,QAAAA,CAASyB,UAAU,EAAE;AACvBP,gBAAAA,WAAAA,EAAaQ,MAAAA,CAAO;AAClB,oBAAA,GAAG1B,SAASyB;AACd,iBAAA,CAAA;AACF,YAAA;AACF,QAAA,CAAA,CAAA;QAEAN,MAAAA,CAAOV,IAAI,CAAC,OAAA,EAAS,CAACkB,GAAAA,GAAAA;AACpBvD,YAAAA,MAAAA,CACE,IAAIiC,qBAAAA,CAAsBsB,GAAAA,CAAI5D,OAAO,EAAE;gBACrCqC,OAAAA,EAAS;AACPX,oBAAAA,KAAAA,EAAOkC,IAAI5D;AACb;AACF,aAAA,CAAA,CAAA;AAEJ,QAAA,CAAA,CAAA;AACF,IAAA,CAAA,CAAA;AACF;AAEO,MAAM6D,oBAAoB,CAACC,KAAAA,GAAAA;IAChC,OAAOA,KAAAA,CAAMC,OAAO,CAAC,KAAA,EAAO,EAAA,CAAA;AAC9B;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"entity.js","sources":["../../../src/strapi/queries/entity.ts"],"sourcesContent":["import { assign, isArray, isEmpty, isObject, map, omit, size } from 'lodash/fp';\n\nimport type { Core, UID, Data, Struct } from '@strapi/types';\nimport * as componentsService from '../../utils/components';\n\nconst sanitizeComponentLikeAttributes = <T extends Struct.Schema>(\n model: T,\n data: Data.Entity<T['uid']>\n) => {\n const { attributes } = model;\n\n const componentLikeAttributesKey = Object.entries(attributes)\n .filter(([, attribute]) => attribute.type === 'component' || attribute.type === 'dynamiczone')\n .map(([key]) => key);\n\n return omit(componentLikeAttributesKey, data);\n};\n\nconst omitInvalidCreationAttributes = omit(['id']);\n\nconst createEntityQuery = (strapi: Core.Strapi): any => {\n const components = {\n async assignToEntity(uid: UID.Schema, data: any) {\n const model = strapi.getModel(uid);\n\n const entityComponents = await componentsService.createComponents(uid, data);\n const dataWithoutComponents = sanitizeComponentLikeAttributes(model, data);\n\n return assign(entityComponents, dataWithoutComponents);\n },\n\n async get<T extends object>(uid: string, entity: T) {\n return componentsService.getComponents(uid as UID.Schema, entity as any);\n },\n\n delete<T extends object>(uid: string, componentsToDelete: T) {\n return componentsService.deleteComponents(uid as UID.Schema, componentsToDelete as any, {\n loadComponents: false,\n });\n },\n };\n\n const query = (uid: UID.Schema) => {\n const create = async <T extends { data: U }, U extends object>(params: T) => {\n const dataWithComponents = await components.assignToEntity(uid, params.data);\n const sanitizedData = omitInvalidCreationAttributes(dataWithComponents);\n\n return strapi.db.query(uid).create({ ...params, data: sanitizedData });\n };\n\n const createMany = async <T extends { data: U[] }, U extends object>(params: T) => {\n return (\n Promise.resolve(params.data)\n // Create components for each entity\n .then(map((data) => components.assignToEntity(uid, data)))\n // Remove unwanted attributes\n .then(map(omitInvalidCreationAttributes))\n // Execute a strapi db createMany query with all the entities + their created components\n .then((data) => strapi.db.query(uid).createMany({ ...params, data }))\n );\n };\n\n const deleteMany = async <T extends object>(params?: T) => {\n const entitiesToDelete = await strapi.db.query(uid).findMany(params ?? {});\n\n if (!entitiesToDelete.length) {\n return null;\n }\n\n const componentsToDelete = await Promise.all(\n entitiesToDelete.map((entityToDelete) => components.get(uid, entityToDelete))\n );\n\n const deletedEntities = await strapi.db.query(uid).deleteMany(params);\n await Promise.all(componentsToDelete.map((compos) => components.delete(uid, compos)));\n\n return deletedEntities;\n };\n\n const getDeepPopulateComponentLikeQuery = (\n contentType: Struct.Schema,\n params = { select: '*' }\n ) => {\n const { attributes } = contentType;\n\n const populate: any = {};\n\n const entries: [string, any][] = Object.entries(attributes);\n\n for (const [key, attribute] of entries) {\n if (attribute.type === 'component') {\n const component = strapi.getModel(attribute.component);\n const subPopulate = getDeepPopulateComponentLikeQuery(component, params);\n\n if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {\n populate[key] = { ...params, populate: subPopulate };\n }\n\n if (isArray(subPopulate) && isEmpty(subPopulate)) {\n populate[key] = { ...params };\n }\n }\n\n if (attribute.type === 'dynamiczone') {\n const { components: componentsUID } = attribute;\n\n const on: any = {};\n\n for (const componentUID of componentsUID) {\n const component = strapi.getModel(componentUID);\n const subPopulate = getDeepPopulateComponentLikeQuery(component, params);\n\n if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {\n on[componentUID] = { ...params, populate: subPopulate };\n }\n\n if (isArray(subPopulate) && isEmpty(subPopulate)) {\n on[componentUID] = { ...params };\n }\n }\n\n populate[key] = size(on) > 0 ? { on } : true;\n }\n }\n\n const values = Object.values(populate);\n\n if (values.every((value) => value === true)) {\n return Object.keys(populate);\n }\n\n return populate;\n };\n\n return {\n create,\n createMany,\n deleteMany,\n getDeepPopulateComponentLikeQuery,\n\n get deepPopulateComponentLikeQuery() {\n const contentType = strapi.getModel(uid);\n\n return getDeepPopulateComponentLikeQuery(contentType);\n },\n };\n };\n\n return query;\n};\n\nexport { createEntityQuery };\n"],"names":["sanitizeComponentLikeAttributes","model","data","attributes","componentLikeAttributesKey","Object","entries","filter","attribute","type","map","key","omit","omitInvalidCreationAttributes","createEntityQuery","strapi","components","assignToEntity","uid","getModel","entityComponents","componentsService","dataWithoutComponents","assign","get","entity","delete","componentsToDelete","loadComponents","query","create","params","dataWithComponents","sanitizedData","db","createMany","Promise","resolve","then","deleteMany","entitiesToDelete","findMany","length","all","entityToDelete","deletedEntities","compos","getDeepPopulateComponentLikeQuery","contentType","select","populate","component","subPopulate","isArray","isObject","size","isEmpty","componentsUID","on","componentUID","values","every","value","keys","deepPopulateComponentLikeQuery"],"mappings":"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"}
1
+ {"version":3,"file":"entity.js","sources":["../../../src/strapi/queries/entity.ts"],"sourcesContent":["import { assign, isArray, isEmpty, isObject, map, omit, size } from 'lodash/fp';\n\nimport type { Core, UID, Data, Struct } from '@strapi/types';\nimport * as componentsService from '../../utils/components';\n\nconst sanitizeComponentLikeAttributes = <T extends Struct.Schema>(\n model: T,\n data: Data.Entity<T['uid']>\n) => {\n const { attributes } = model;\n\n const componentLikeAttributesKey = Object.entries(attributes)\n .filter(([, attribute]) => attribute.type === 'component' || attribute.type === 'dynamiczone')\n .map(([key]) => key);\n\n return omit(componentLikeAttributesKey, data);\n};\n\nconst omitInvalidCreationAttributes = omit(['id']);\n\nconst createEntityQuery = (strapi: Core.Strapi): any => {\n const components = {\n async assignToEntity(uid: UID.Schema, data: any) {\n const model = strapi.getModel(uid);\n\n const entityComponents = await componentsService.createComponents(uid, data);\n const dataWithoutComponents = sanitizeComponentLikeAttributes(model, data);\n\n return assign(entityComponents, dataWithoutComponents);\n },\n\n async get<T extends object>(uid: string, entity: T) {\n return componentsService.getComponents(uid as UID.Schema, entity as any);\n },\n\n delete<T extends object>(uid: string, componentsToDelete: T) {\n return componentsService.deleteComponents(uid as UID.Schema, componentsToDelete as any, {\n loadComponents: false,\n });\n },\n };\n\n const query = (uid: UID.Schema) => {\n const create = async <T extends { data: U }, U extends object>(params: T) => {\n const dataWithComponents = await components.assignToEntity(uid, params.data);\n const sanitizedData = omitInvalidCreationAttributes(dataWithComponents);\n\n return strapi.db.query(uid).create({ ...params, data: sanitizedData });\n };\n\n const createMany = async <T extends { data: U[] }, U extends object>(params: T) => {\n return (\n Promise.resolve(params.data)\n // Create components for each entity\n .then(map((data) => components.assignToEntity(uid, data)))\n // Remove unwanted attributes\n .then(map(omitInvalidCreationAttributes))\n // Execute a strapi db createMany query with all the entities + their created components\n .then((data) => strapi.db.query(uid).createMany({ ...params, data }))\n );\n };\n\n const deleteMany = async <T extends object>(params?: T) => {\n const entitiesToDelete = await strapi.db.query(uid).findMany(params ?? {});\n\n if (!entitiesToDelete.length) {\n return null;\n }\n\n const componentsToDelete = await Promise.all(\n entitiesToDelete.map((entityToDelete) => components.get(uid, entityToDelete))\n );\n\n const deletedEntities = await strapi.db.query(uid).deleteMany(params);\n await Promise.all(componentsToDelete.map((compos) => components.delete(uid, compos)));\n\n return deletedEntities;\n };\n\n const getDeepPopulateComponentLikeQuery = (\n contentType: Struct.Schema,\n params = { select: '*' }\n ) => {\n const { attributes } = contentType;\n\n const populate: any = {};\n\n const entries: [string, any][] = Object.entries(attributes);\n\n for (const [key, attribute] of entries) {\n if (attribute.type === 'component') {\n const component = strapi.getModel(attribute.component);\n const subPopulate = getDeepPopulateComponentLikeQuery(component, params);\n\n if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {\n populate[key] = { ...params, populate: subPopulate };\n }\n\n if (isArray(subPopulate) && isEmpty(subPopulate)) {\n populate[key] = { ...params };\n }\n }\n\n if (attribute.type === 'dynamiczone') {\n const { components: componentsUID } = attribute;\n\n const on: any = {};\n\n for (const componentUID of componentsUID) {\n const component = strapi.getModel(componentUID);\n const subPopulate = getDeepPopulateComponentLikeQuery(component, params);\n\n if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {\n on[componentUID] = { ...params, populate: subPopulate };\n }\n\n if (isArray(subPopulate) && isEmpty(subPopulate)) {\n on[componentUID] = { ...params };\n }\n }\n\n populate[key] = size(on) > 0 ? { on } : true;\n }\n }\n\n const values = Object.values(populate);\n\n if (values.every((value) => value === true)) {\n return Object.keys(populate);\n }\n\n return populate;\n };\n\n return {\n create,\n createMany,\n deleteMany,\n getDeepPopulateComponentLikeQuery,\n\n get deepPopulateComponentLikeQuery() {\n const contentType = strapi.getModel(uid);\n\n return getDeepPopulateComponentLikeQuery(contentType);\n },\n };\n };\n\n return query;\n};\n\nexport { createEntityQuery };\n"],"names":["sanitizeComponentLikeAttributes","model","data","attributes","componentLikeAttributesKey","Object","entries","filter","attribute","type","map","key","omit","omitInvalidCreationAttributes","createEntityQuery","strapi","components","assignToEntity","uid","getModel","entityComponents","componentsService","dataWithoutComponents","assign","get","entity","delete","componentsToDelete","loadComponents","query","create","params","dataWithComponents","sanitizedData","db","createMany","Promise","resolve","then","deleteMany","entitiesToDelete","findMany","length","all","entityToDelete","deletedEntities","compos","getDeepPopulateComponentLikeQuery","contentType","select","populate","component","subPopulate","isArray","isObject","size","isEmpty","componentsUID","on","componentUID","values","every","value","keys","deepPopulateComponentLikeQuery"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { omit, map, isArray, isObject, size, isEmpty, assign } from 'lodash/fp';
2
- import { createComponents, getComponents, deleteComponents } from '../../utils/components.mjs';
1
+ import { omit, isArray, isObject, size, isEmpty, map, assign } from 'lodash/fp';
2
+ import { deleteComponents, getComponents, createComponents } from '../../utils/components.mjs';
3
3
 
4
4
  const sanitizeComponentLikeAttributes = (model, data)=>{
5
5
  const { attributes } = model;
@@ -1 +1 @@
1
- {"version":3,"file":"entity.mjs","sources":["../../../src/strapi/queries/entity.ts"],"sourcesContent":["import { assign, isArray, isEmpty, isObject, map, omit, size } from 'lodash/fp';\n\nimport type { Core, UID, Data, Struct } from '@strapi/types';\nimport * as componentsService from '../../utils/components';\n\nconst sanitizeComponentLikeAttributes = <T extends Struct.Schema>(\n model: T,\n data: Data.Entity<T['uid']>\n) => {\n const { attributes } = model;\n\n const componentLikeAttributesKey = Object.entries(attributes)\n .filter(([, attribute]) => attribute.type === 'component' || attribute.type === 'dynamiczone')\n .map(([key]) => key);\n\n return omit(componentLikeAttributesKey, data);\n};\n\nconst omitInvalidCreationAttributes = omit(['id']);\n\nconst createEntityQuery = (strapi: Core.Strapi): any => {\n const components = {\n async assignToEntity(uid: UID.Schema, data: any) {\n const model = strapi.getModel(uid);\n\n const entityComponents = await componentsService.createComponents(uid, data);\n const dataWithoutComponents = sanitizeComponentLikeAttributes(model, data);\n\n return assign(entityComponents, dataWithoutComponents);\n },\n\n async get<T extends object>(uid: string, entity: T) {\n return componentsService.getComponents(uid as UID.Schema, entity as any);\n },\n\n delete<T extends object>(uid: string, componentsToDelete: T) {\n return componentsService.deleteComponents(uid as UID.Schema, componentsToDelete as any, {\n loadComponents: false,\n });\n },\n };\n\n const query = (uid: UID.Schema) => {\n const create = async <T extends { data: U }, U extends object>(params: T) => {\n const dataWithComponents = await components.assignToEntity(uid, params.data);\n const sanitizedData = omitInvalidCreationAttributes(dataWithComponents);\n\n return strapi.db.query(uid).create({ ...params, data: sanitizedData });\n };\n\n const createMany = async <T extends { data: U[] }, U extends object>(params: T) => {\n return (\n Promise.resolve(params.data)\n // Create components for each entity\n .then(map((data) => components.assignToEntity(uid, data)))\n // Remove unwanted attributes\n .then(map(omitInvalidCreationAttributes))\n // Execute a strapi db createMany query with all the entities + their created components\n .then((data) => strapi.db.query(uid).createMany({ ...params, data }))\n );\n };\n\n const deleteMany = async <T extends object>(params?: T) => {\n const entitiesToDelete = await strapi.db.query(uid).findMany(params ?? {});\n\n if (!entitiesToDelete.length) {\n return null;\n }\n\n const componentsToDelete = await Promise.all(\n entitiesToDelete.map((entityToDelete) => components.get(uid, entityToDelete))\n );\n\n const deletedEntities = await strapi.db.query(uid).deleteMany(params);\n await Promise.all(componentsToDelete.map((compos) => components.delete(uid, compos)));\n\n return deletedEntities;\n };\n\n const getDeepPopulateComponentLikeQuery = (\n contentType: Struct.Schema,\n params = { select: '*' }\n ) => {\n const { attributes } = contentType;\n\n const populate: any = {};\n\n const entries: [string, any][] = Object.entries(attributes);\n\n for (const [key, attribute] of entries) {\n if (attribute.type === 'component') {\n const component = strapi.getModel(attribute.component);\n const subPopulate = getDeepPopulateComponentLikeQuery(component, params);\n\n if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {\n populate[key] = { ...params, populate: subPopulate };\n }\n\n if (isArray(subPopulate) && isEmpty(subPopulate)) {\n populate[key] = { ...params };\n }\n }\n\n if (attribute.type === 'dynamiczone') {\n const { components: componentsUID } = attribute;\n\n const on: any = {};\n\n for (const componentUID of componentsUID) {\n const component = strapi.getModel(componentUID);\n const subPopulate = getDeepPopulateComponentLikeQuery(component, params);\n\n if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {\n on[componentUID] = { ...params, populate: subPopulate };\n }\n\n if (isArray(subPopulate) && isEmpty(subPopulate)) {\n on[componentUID] = { ...params };\n }\n }\n\n populate[key] = size(on) > 0 ? { on } : true;\n }\n }\n\n const values = Object.values(populate);\n\n if (values.every((value) => value === true)) {\n return Object.keys(populate);\n }\n\n return populate;\n };\n\n return {\n create,\n createMany,\n deleteMany,\n getDeepPopulateComponentLikeQuery,\n\n get deepPopulateComponentLikeQuery() {\n const contentType = strapi.getModel(uid);\n\n return getDeepPopulateComponentLikeQuery(contentType);\n },\n };\n };\n\n return query;\n};\n\nexport { createEntityQuery };\n"],"names":["sanitizeComponentLikeAttributes","model","data","attributes","componentLikeAttributesKey","Object","entries","filter","attribute","type","map","key","omit","omitInvalidCreationAttributes","createEntityQuery","strapi","components","assignToEntity","uid","getModel","entityComponents","componentsService","dataWithoutComponents","assign","get","entity","delete","componentsToDelete","loadComponents","query","create","params","dataWithComponents","sanitizedData","db","createMany","Promise","resolve","then","deleteMany","entitiesToDelete","findMany","length","all","entityToDelete","deletedEntities","compos","getDeepPopulateComponentLikeQuery","contentType","select","populate","component","subPopulate","isArray","isObject","size","isEmpty","componentsUID","on","componentUID","values","every","value","keys","deepPopulateComponentLikeQuery"],"mappings":"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"}
1
+ {"version":3,"file":"entity.mjs","sources":["../../../src/strapi/queries/entity.ts"],"sourcesContent":["import { assign, isArray, isEmpty, isObject, map, omit, size } from 'lodash/fp';\n\nimport type { Core, UID, Data, Struct } from '@strapi/types';\nimport * as componentsService from '../../utils/components';\n\nconst sanitizeComponentLikeAttributes = <T extends Struct.Schema>(\n model: T,\n data: Data.Entity<T['uid']>\n) => {\n const { attributes } = model;\n\n const componentLikeAttributesKey = Object.entries(attributes)\n .filter(([, attribute]) => attribute.type === 'component' || attribute.type === 'dynamiczone')\n .map(([key]) => key);\n\n return omit(componentLikeAttributesKey, data);\n};\n\nconst omitInvalidCreationAttributes = omit(['id']);\n\nconst createEntityQuery = (strapi: Core.Strapi): any => {\n const components = {\n async assignToEntity(uid: UID.Schema, data: any) {\n const model = strapi.getModel(uid);\n\n const entityComponents = await componentsService.createComponents(uid, data);\n const dataWithoutComponents = sanitizeComponentLikeAttributes(model, data);\n\n return assign(entityComponents, dataWithoutComponents);\n },\n\n async get<T extends object>(uid: string, entity: T) {\n return componentsService.getComponents(uid as UID.Schema, entity as any);\n },\n\n delete<T extends object>(uid: string, componentsToDelete: T) {\n return componentsService.deleteComponents(uid as UID.Schema, componentsToDelete as any, {\n loadComponents: false,\n });\n },\n };\n\n const query = (uid: UID.Schema) => {\n const create = async <T extends { data: U }, U extends object>(params: T) => {\n const dataWithComponents = await components.assignToEntity(uid, params.data);\n const sanitizedData = omitInvalidCreationAttributes(dataWithComponents);\n\n return strapi.db.query(uid).create({ ...params, data: sanitizedData });\n };\n\n const createMany = async <T extends { data: U[] }, U extends object>(params: T) => {\n return (\n Promise.resolve(params.data)\n // Create components for each entity\n .then(map((data) => components.assignToEntity(uid, data)))\n // Remove unwanted attributes\n .then(map(omitInvalidCreationAttributes))\n // Execute a strapi db createMany query with all the entities + their created components\n .then((data) => strapi.db.query(uid).createMany({ ...params, data }))\n );\n };\n\n const deleteMany = async <T extends object>(params?: T) => {\n const entitiesToDelete = await strapi.db.query(uid).findMany(params ?? {});\n\n if (!entitiesToDelete.length) {\n return null;\n }\n\n const componentsToDelete = await Promise.all(\n entitiesToDelete.map((entityToDelete) => components.get(uid, entityToDelete))\n );\n\n const deletedEntities = await strapi.db.query(uid).deleteMany(params);\n await Promise.all(componentsToDelete.map((compos) => components.delete(uid, compos)));\n\n return deletedEntities;\n };\n\n const getDeepPopulateComponentLikeQuery = (\n contentType: Struct.Schema,\n params = { select: '*' }\n ) => {\n const { attributes } = contentType;\n\n const populate: any = {};\n\n const entries: [string, any][] = Object.entries(attributes);\n\n for (const [key, attribute] of entries) {\n if (attribute.type === 'component') {\n const component = strapi.getModel(attribute.component);\n const subPopulate = getDeepPopulateComponentLikeQuery(component, params);\n\n if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {\n populate[key] = { ...params, populate: subPopulate };\n }\n\n if (isArray(subPopulate) && isEmpty(subPopulate)) {\n populate[key] = { ...params };\n }\n }\n\n if (attribute.type === 'dynamiczone') {\n const { components: componentsUID } = attribute;\n\n const on: any = {};\n\n for (const componentUID of componentsUID) {\n const component = strapi.getModel(componentUID);\n const subPopulate = getDeepPopulateComponentLikeQuery(component, params);\n\n if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {\n on[componentUID] = { ...params, populate: subPopulate };\n }\n\n if (isArray(subPopulate) && isEmpty(subPopulate)) {\n on[componentUID] = { ...params };\n }\n }\n\n populate[key] = size(on) > 0 ? { on } : true;\n }\n }\n\n const values = Object.values(populate);\n\n if (values.every((value) => value === true)) {\n return Object.keys(populate);\n }\n\n return populate;\n };\n\n return {\n create,\n createMany,\n deleteMany,\n getDeepPopulateComponentLikeQuery,\n\n get deepPopulateComponentLikeQuery() {\n const contentType = strapi.getModel(uid);\n\n return getDeepPopulateComponentLikeQuery(contentType);\n },\n };\n };\n\n return query;\n};\n\nexport { createEntityQuery };\n"],"names":["sanitizeComponentLikeAttributes","model","data","attributes","componentLikeAttributesKey","Object","entries","filter","attribute","type","map","key","omit","omitInvalidCreationAttributes","createEntityQuery","strapi","components","assignToEntity","uid","getModel","entityComponents","componentsService","dataWithoutComponents","assign","get","entity","delete","componentsToDelete","loadComponents","query","create","params","dataWithComponents","sanitizedData","db","createMany","Promise","resolve","then","deleteMany","entitiesToDelete","findMany","length","all","entityToDelete","deletedEntities","compos","getDeepPopulateComponentLikeQuery","contentType","select","populate","component","subPopulate","isArray","isObject","size","isEmpty","componentsUID","on","componentUID","values","every","value","keys","deepPopulateComponentLikeQuery"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","sources":["../../../src/strapi/queries/link.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport { clone, isNil } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nimport { ILink } from '../../../types';\n\n// TODO: Remove any types when we'll have types for DB metadata\n\nexport const createLinkQuery = (strapi: Core.Strapi, trx?: Knex.Transaction) => {\n const query = () => {\n const { connection } = strapi.db;\n\n // TODO: Export utils from database and use the addSchema that is already written\n const addSchema = (tableName: string) => {\n const schemaName = connection.client.connectionSettings.schema;\n return schemaName ? `${schemaName}.${tableName}` : tableName;\n };\n\n async function* generateAllForAttribute(uid: string, fieldName: string): AsyncGenerator<ILink> {\n const metadata = strapi.db.metadata.get(uid);\n\n if (!metadata) {\n throw new Error(`No metadata found for ${uid}`);\n }\n\n const attributes = filterValidRelationalAttributes(metadata.attributes);\n\n if (!(fieldName in attributes)) {\n throw new Error(`${fieldName} is not a valid relational attribute name`);\n }\n\n const attribute = attributes[fieldName];\n\n const kind = getLinkKind(attribute, uid);\n const { relation, target } = attribute;\n\n // The relation is stored in the same table\n // TODO: handle manyToOne joinColumn\n if (attribute.joinColumn) {\n const joinColumnName: string = attribute.joinColumn.name;\n\n const qb = connection\n .queryBuilder()\n .select('id', joinColumnName)\n .from(addSchema(metadata.tableName));\n\n if (trx) {\n qb.transacting(trx);\n }\n\n // TODO: stream the query to improve performances\n const entries = await qb;\n\n for (const entry of entries) {\n const ref = entry[joinColumnName];\n\n if (ref !== null) {\n yield {\n kind,\n relation,\n left: { type: uid, ref: entry.id, field: fieldName },\n right: { type: target, ref },\n };\n }\n }\n }\n\n // The relation uses a join table\n if (attribute.joinTable) {\n const {\n name,\n joinColumn,\n inverseJoinColumn,\n orderColumnName,\n morphColumn,\n inverseOrderColumnName,\n } = attribute.joinTable;\n\n const qb = connection.queryBuilder().from(addSchema(name));\n\n type Columns = {\n left: { ref: string | null; order?: string };\n right: { ref: string | null; order?: string; type?: string; field?: string };\n };\n\n const columns: Columns = {\n left: { ref: null },\n right: { ref: null },\n };\n\n const left: Partial<ILink['left']> = { type: uid, field: fieldName };\n const right: Partial<ILink['right']> = {};\n\n if (kind === 'relation.basic' || kind === 'relation.circular') {\n right.type = attribute.target;\n right.field = attribute.inversedBy;\n\n columns.left.ref = joinColumn.name;\n columns.right.ref = inverseJoinColumn.name;\n\n if (orderColumnName) {\n columns.left.order = orderColumnName as string;\n }\n\n if (inverseOrderColumnName) {\n columns.right.order = inverseOrderColumnName as string;\n }\n }\n\n if (kind === 'relation.morph') {\n columns.left.ref = joinColumn.name;\n\n columns.right.ref = morphColumn.idColumn.name;\n columns.right.type = morphColumn.typeColumn.name;\n columns.right.field = 'field';\n columns.right.order = 'order';\n }\n\n const validColumns = [\n // Left\n columns.left.ref,\n columns.left.order,\n // Right\n columns.right.ref,\n columns.right.type,\n columns.right.field,\n columns.right.order,\n ].filter((column: string | null | undefined) => !isNil(column));\n\n qb.select(validColumns);\n\n if (trx) {\n qb.transacting(trx);\n }\n\n // TODO: stream the query to improve performances\n const entries = await qb;\n\n for (const entry of entries) {\n if (columns.left.ref) {\n left.ref = entry[columns.left.ref];\n }\n\n if (columns.right.ref) {\n right.ref = entry[columns.right.ref];\n }\n\n if (columns.left.order) {\n left.pos = entry[columns.left.order as string];\n }\n\n if (columns.right.order) {\n right.pos = entry[columns.right.order as string];\n }\n\n if (columns.right.type) {\n right.type = entry[columns.right.type as string];\n }\n\n if (columns.right.field) {\n right.field = entry[columns.right.field as string];\n }\n\n const link: ILink = {\n kind,\n relation,\n left: clone(left as ILink['left']),\n right: clone(right as ILink['right']),\n };\n\n yield link;\n }\n }\n\n if (attribute.morphColumn) {\n const { typeColumn, idColumn } = attribute.morphColumn;\n\n const qb = connection\n .queryBuilder()\n .select('id', typeColumn.name, idColumn.name)\n .from(addSchema(metadata.tableName))\n .whereNotNull(typeColumn.name)\n .whereNotNull(idColumn.name);\n\n if (trx) {\n qb.transacting(trx);\n }\n\n const entries = await qb;\n\n for (const entry of entries) {\n const ref = entry[idColumn.name];\n\n yield {\n kind,\n relation,\n left: { type: uid, ref: entry.id, field: fieldName },\n right: { type: entry[typeColumn.name], ref },\n };\n }\n }\n }\n\n async function* generateAll(uid: string): AsyncGenerator<ILink> {\n const metadata = strapi.db.metadata.get(uid);\n\n if (!metadata) {\n throw new Error(`No metadata found for ${uid}`);\n }\n\n const attributes = filterValidRelationalAttributes(metadata.attributes);\n\n for (const fieldName of Object.keys(attributes)) {\n for await (const link of generateAllForAttribute(uid, fieldName)) {\n yield link;\n }\n }\n }\n\n const insert = async (link: ILink) => {\n const { kind, left, right } = link;\n\n const metadata = strapi.db.metadata.get(left.type);\n const attribute = metadata.attributes[left.field];\n\n const payload = {};\n\n /**\n * This _should_ only happen for attributes that are added dynamically e.g. review-workflow stages\n * and a user is importing EE data into a CE project.\n */\n if (!attribute) {\n return;\n }\n\n if (attribute.type !== 'relation') {\n throw new Error(`Attribute ${left.field} is not a relation`);\n }\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const joinColumnName = attribute.joinColumn.name;\n\n // Note: this addSchema may not be necessary, but is added for safety\n const qb = connection(addSchema(metadata.tableName))\n .where('id', left.ref)\n .update({ [joinColumnName]: right.ref });\n if (trx) {\n qb.transacting(trx);\n }\n await qb;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n if (joinTable.joinColumn) {\n Object.assign(payload, { [joinTable.joinColumn.name]: left.ref });\n }\n\n const assignInverseColumn = () => {\n if ('inverseJoinColumn' in joinTable && joinTable.inverseJoinColumn) {\n Object.assign(payload, {\n [joinTable.inverseJoinColumn.name]: right.ref,\n });\n }\n };\n\n const assignOrderColumns = () => {\n if ('orderColumnName' in joinTable && joinTable.orderColumnName) {\n Object.assign(payload, { [joinTable.orderColumnName]: left.pos ?? null });\n }\n\n if ('inverseOrderColumnName' in joinTable && joinTable.inverseOrderColumnName) {\n Object.assign(payload, { [joinTable.inverseOrderColumnName]: right.pos ?? null });\n }\n };\n\n const assignMorphColumns = () => {\n if ('morphColumn' in joinTable && joinTable.morphColumn) {\n const { idColumn, typeColumn } = joinTable.morphColumn ?? {};\n\n if (idColumn) {\n Object.assign(payload, { [idColumn.name]: right.ref });\n }\n\n if (typeColumn) {\n Object.assign(payload, { [typeColumn.name]: right.type });\n }\n\n Object.assign(payload, { order: right.pos ?? null, field: right.field ?? null });\n }\n };\n\n if (kind === 'relation.basic' || kind === 'relation.circular') {\n assignInverseColumn();\n }\n\n if (kind === 'relation.morph') {\n assignMorphColumns();\n }\n\n assignOrderColumns();\n const qb = connection.insert(payload).into(addSchema(joinTable.name));\n if (trx) {\n await qb.transacting(trx);\n }\n }\n\n if ('morphColumn' in attribute && attribute.morphColumn) {\n const { morphColumn } = attribute;\n\n const qb = connection(addSchema(metadata.tableName))\n .where('id', left.ref)\n .update({\n [morphColumn.idColumn.name]: right.ref,\n [morphColumn.typeColumn.name]: right.type,\n });\n\n if (trx) {\n qb.transacting(trx);\n }\n\n await qb;\n }\n };\n\n return { generateAll, generateAllForAttribute, insert };\n };\n\n return query;\n};\n\nexport const filterValidRelationalAttributes = (attributes: Record<string, any>) => {\n const isOwner = (attribute: any) => {\n return attribute.owner || (!attribute.mappedBy && !attribute.morphBy);\n };\n\n const isComponentLike = (attribute: any) => attribute.joinTable?.name.endsWith('_cmps');\n\n return Object.entries(attributes)\n .filter(([, attribute]) => {\n return attribute.type === 'relation' && isOwner(attribute) && !isComponentLike(attribute);\n })\n .reduce<Record<string, any>>((acc, [key, attribute]) => ({ ...acc, [key]: attribute }), {});\n};\n\nconst getLinkKind = (attribute: any, uid: string): ILink['kind'] => {\n if (attribute.relation.startsWith('morph')) {\n return 'relation.morph';\n }\n\n if (attribute.target === uid) {\n return 'relation.circular';\n }\n\n return 'relation.basic';\n};\n"],"names":["createLinkQuery","strapi","trx","query","connection","db","addSchema","tableName","schemaName","client","connectionSettings","schema","generateAllForAttribute","uid","fieldName","metadata","get","Error","attributes","filterValidRelationalAttributes","attribute","kind","getLinkKind","relation","target","joinColumn","joinColumnName","name","qb","queryBuilder","select","from","transacting","entries","entry","ref","left","type","id","field","right","joinTable","inverseJoinColumn","orderColumnName","morphColumn","inverseOrderColumnName","columns","inversedBy","order","idColumn","typeColumn","validColumns","filter","column","isNil","pos","link","clone","whereNotNull","generateAll","Object","keys","insert","payload","where","update","assign","assignInverseColumn","assignOrderColumns","assignMorphColumns","into","isOwner","owner","mappedBy","morphBy","isComponentLike","endsWith","reduce","acc","key","startsWith"],"mappings":"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"}
1
+ {"version":3,"file":"link.js","sources":["../../../src/strapi/queries/link.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport { clone, isNil } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nimport { ILink } from '../../../types';\n\n// TODO: Remove any types when we'll have types for DB metadata\n\nexport const createLinkQuery = (strapi: Core.Strapi, trx?: Knex.Transaction) => {\n const query = () => {\n const { connection } = strapi.db;\n\n // TODO: Export utils from database and use the addSchema that is already written\n const addSchema = (tableName: string) => {\n const schemaName = connection.client.connectionSettings.schema;\n return schemaName ? `${schemaName}.${tableName}` : tableName;\n };\n\n async function* generateAllForAttribute(uid: string, fieldName: string): AsyncGenerator<ILink> {\n const metadata = strapi.db.metadata.get(uid);\n\n if (!metadata) {\n throw new Error(`No metadata found for ${uid}`);\n }\n\n const attributes = filterValidRelationalAttributes(metadata.attributes);\n\n if (!(fieldName in attributes)) {\n throw new Error(`${fieldName} is not a valid relational attribute name`);\n }\n\n const attribute = attributes[fieldName];\n\n const kind = getLinkKind(attribute, uid);\n const { relation, target } = attribute;\n\n // The relation is stored in the same table\n // TODO: handle manyToOne joinColumn\n if (attribute.joinColumn) {\n const joinColumnName: string = attribute.joinColumn.name;\n\n const qb = connection\n .queryBuilder()\n .select('id', joinColumnName)\n .from(addSchema(metadata.tableName));\n\n if (trx) {\n qb.transacting(trx);\n }\n\n // TODO: stream the query to improve performances\n const entries = await qb;\n\n for (const entry of entries) {\n const ref = entry[joinColumnName];\n\n if (ref !== null) {\n yield {\n kind,\n relation,\n left: { type: uid, ref: entry.id, field: fieldName },\n right: { type: target, ref },\n };\n }\n }\n }\n\n // The relation uses a join table\n if (attribute.joinTable) {\n const {\n name,\n joinColumn,\n inverseJoinColumn,\n orderColumnName,\n morphColumn,\n inverseOrderColumnName,\n } = attribute.joinTable;\n\n const qb = connection.queryBuilder().from(addSchema(name));\n\n type Columns = {\n left: { ref: string | null; order?: string };\n right: { ref: string | null; order?: string; type?: string; field?: string };\n };\n\n const columns: Columns = {\n left: { ref: null },\n right: { ref: null },\n };\n\n const left: Partial<ILink['left']> = { type: uid, field: fieldName };\n const right: Partial<ILink['right']> = {};\n\n if (kind === 'relation.basic' || kind === 'relation.circular') {\n right.type = attribute.target;\n right.field = attribute.inversedBy;\n\n columns.left.ref = joinColumn.name;\n columns.right.ref = inverseJoinColumn.name;\n\n if (orderColumnName) {\n columns.left.order = orderColumnName as string;\n }\n\n if (inverseOrderColumnName) {\n columns.right.order = inverseOrderColumnName as string;\n }\n }\n\n if (kind === 'relation.morph') {\n columns.left.ref = joinColumn.name;\n\n columns.right.ref = morphColumn.idColumn.name;\n columns.right.type = morphColumn.typeColumn.name;\n columns.right.field = 'field';\n columns.right.order = 'order';\n }\n\n const validColumns = [\n // Left\n columns.left.ref,\n columns.left.order,\n // Right\n columns.right.ref,\n columns.right.type,\n columns.right.field,\n columns.right.order,\n ].filter((column: string | null | undefined) => !isNil(column));\n\n qb.select(validColumns);\n\n if (trx) {\n qb.transacting(trx);\n }\n\n // TODO: stream the query to improve performances\n const entries = await qb;\n\n for (const entry of entries) {\n if (columns.left.ref) {\n left.ref = entry[columns.left.ref];\n }\n\n if (columns.right.ref) {\n right.ref = entry[columns.right.ref];\n }\n\n if (columns.left.order) {\n left.pos = entry[columns.left.order as string];\n }\n\n if (columns.right.order) {\n right.pos = entry[columns.right.order as string];\n }\n\n if (columns.right.type) {\n right.type = entry[columns.right.type as string];\n }\n\n if (columns.right.field) {\n right.field = entry[columns.right.field as string];\n }\n\n const link: ILink = {\n kind,\n relation,\n left: clone(left as ILink['left']),\n right: clone(right as ILink['right']),\n };\n\n yield link;\n }\n }\n\n if (attribute.morphColumn) {\n const { typeColumn, idColumn } = attribute.morphColumn;\n\n const qb = connection\n .queryBuilder()\n .select('id', typeColumn.name, idColumn.name)\n .from(addSchema(metadata.tableName))\n .whereNotNull(typeColumn.name)\n .whereNotNull(idColumn.name);\n\n if (trx) {\n qb.transacting(trx);\n }\n\n const entries = await qb;\n\n for (const entry of entries) {\n const ref = entry[idColumn.name];\n\n yield {\n kind,\n relation,\n left: { type: uid, ref: entry.id, field: fieldName },\n right: { type: entry[typeColumn.name], ref },\n };\n }\n }\n }\n\n async function* generateAll(uid: string): AsyncGenerator<ILink> {\n const metadata = strapi.db.metadata.get(uid);\n\n if (!metadata) {\n throw new Error(`No metadata found for ${uid}`);\n }\n\n const attributes = filterValidRelationalAttributes(metadata.attributes);\n\n for (const fieldName of Object.keys(attributes)) {\n for await (const link of generateAllForAttribute(uid, fieldName)) {\n yield link;\n }\n }\n }\n\n const insert = async (link: ILink) => {\n const { kind, left, right } = link;\n\n const metadata = strapi.db.metadata.get(left.type);\n const attribute = metadata.attributes[left.field];\n\n const payload = {};\n\n /**\n * This _should_ only happen for attributes that are added dynamically e.g. review-workflow stages\n * and a user is importing EE data into a CE project.\n */\n if (!attribute) {\n return;\n }\n\n if (attribute.type !== 'relation') {\n throw new Error(`Attribute ${left.field} is not a relation`);\n }\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const joinColumnName = attribute.joinColumn.name;\n\n // Note: this addSchema may not be necessary, but is added for safety\n const qb = connection(addSchema(metadata.tableName))\n .where('id', left.ref)\n .update({ [joinColumnName]: right.ref });\n if (trx) {\n qb.transacting(trx);\n }\n await qb;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n if (joinTable.joinColumn) {\n Object.assign(payload, { [joinTable.joinColumn.name]: left.ref });\n }\n\n const assignInverseColumn = () => {\n if ('inverseJoinColumn' in joinTable && joinTable.inverseJoinColumn) {\n Object.assign(payload, {\n [joinTable.inverseJoinColumn.name]: right.ref,\n });\n }\n };\n\n const assignOrderColumns = () => {\n if ('orderColumnName' in joinTable && joinTable.orderColumnName) {\n Object.assign(payload, { [joinTable.orderColumnName]: left.pos ?? null });\n }\n\n if ('inverseOrderColumnName' in joinTable && joinTable.inverseOrderColumnName) {\n Object.assign(payload, { [joinTable.inverseOrderColumnName]: right.pos ?? null });\n }\n };\n\n const assignMorphColumns = () => {\n if ('morphColumn' in joinTable && joinTable.morphColumn) {\n const { idColumn, typeColumn } = joinTable.morphColumn ?? {};\n\n if (idColumn) {\n Object.assign(payload, { [idColumn.name]: right.ref });\n }\n\n if (typeColumn) {\n Object.assign(payload, { [typeColumn.name]: right.type });\n }\n\n Object.assign(payload, { order: right.pos ?? null, field: right.field ?? null });\n }\n };\n\n if (kind === 'relation.basic' || kind === 'relation.circular') {\n assignInverseColumn();\n }\n\n if (kind === 'relation.morph') {\n assignMorphColumns();\n }\n\n assignOrderColumns();\n const qb = connection.insert(payload).into(addSchema(joinTable.name));\n if (trx) {\n await qb.transacting(trx);\n }\n }\n\n if ('morphColumn' in attribute && attribute.morphColumn) {\n const { morphColumn } = attribute;\n\n const qb = connection(addSchema(metadata.tableName))\n .where('id', left.ref)\n .update({\n [morphColumn.idColumn.name]: right.ref,\n [morphColumn.typeColumn.name]: right.type,\n });\n\n if (trx) {\n qb.transacting(trx);\n }\n\n await qb;\n }\n };\n\n return { generateAll, generateAllForAttribute, insert };\n };\n\n return query;\n};\n\nexport const filterValidRelationalAttributes = (attributes: Record<string, any>) => {\n const isOwner = (attribute: any) => {\n return attribute.owner || (!attribute.mappedBy && !attribute.morphBy);\n };\n\n const isComponentLike = (attribute: any) => attribute.joinTable?.name.endsWith('_cmps');\n\n return Object.entries(attributes)\n .filter(([, attribute]) => {\n return attribute.type === 'relation' && isOwner(attribute) && !isComponentLike(attribute);\n })\n .reduce<Record<string, any>>((acc, [key, attribute]) => ({ ...acc, [key]: attribute }), {});\n};\n\nconst getLinkKind = (attribute: any, uid: string): ILink['kind'] => {\n if (attribute.relation.startsWith('morph')) {\n return 'relation.morph';\n }\n\n if (attribute.target === uid) {\n return 'relation.circular';\n }\n\n return 'relation.basic';\n};\n"],"names":["createLinkQuery","strapi","trx","query","connection","db","addSchema","tableName","schemaName","client","connectionSettings","schema","generateAllForAttribute","uid","fieldName","metadata","get","Error","attributes","filterValidRelationalAttributes","attribute","kind","getLinkKind","relation","target","joinColumn","joinColumnName","name","qb","queryBuilder","select","from","transacting","entries","entry","ref","left","type","id","field","right","joinTable","inverseJoinColumn","orderColumnName","morphColumn","inverseOrderColumnName","columns","inversedBy","order","idColumn","typeColumn","validColumns","filter","column","isNil","pos","link","clone","whereNotNull","generateAll","Object","keys","insert","payload","where","update","assign","assignInverseColumn","assignOrderColumns","assignMorphColumns","into","isOwner","owner","mappedBy","morphBy","isComponentLike","endsWith","reduce","acc","key","startsWith"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"link.mjs","sources":["../../../src/strapi/queries/link.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport { clone, isNil } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nimport { ILink } from '../../../types';\n\n// TODO: Remove any types when we'll have types for DB metadata\n\nexport const createLinkQuery = (strapi: Core.Strapi, trx?: Knex.Transaction) => {\n const query = () => {\n const { connection } = strapi.db;\n\n // TODO: Export utils from database and use the addSchema that is already written\n const addSchema = (tableName: string) => {\n const schemaName = connection.client.connectionSettings.schema;\n return schemaName ? `${schemaName}.${tableName}` : tableName;\n };\n\n async function* generateAllForAttribute(uid: string, fieldName: string): AsyncGenerator<ILink> {\n const metadata = strapi.db.metadata.get(uid);\n\n if (!metadata) {\n throw new Error(`No metadata found for ${uid}`);\n }\n\n const attributes = filterValidRelationalAttributes(metadata.attributes);\n\n if (!(fieldName in attributes)) {\n throw new Error(`${fieldName} is not a valid relational attribute name`);\n }\n\n const attribute = attributes[fieldName];\n\n const kind = getLinkKind(attribute, uid);\n const { relation, target } = attribute;\n\n // The relation is stored in the same table\n // TODO: handle manyToOne joinColumn\n if (attribute.joinColumn) {\n const joinColumnName: string = attribute.joinColumn.name;\n\n const qb = connection\n .queryBuilder()\n .select('id', joinColumnName)\n .from(addSchema(metadata.tableName));\n\n if (trx) {\n qb.transacting(trx);\n }\n\n // TODO: stream the query to improve performances\n const entries = await qb;\n\n for (const entry of entries) {\n const ref = entry[joinColumnName];\n\n if (ref !== null) {\n yield {\n kind,\n relation,\n left: { type: uid, ref: entry.id, field: fieldName },\n right: { type: target, ref },\n };\n }\n }\n }\n\n // The relation uses a join table\n if (attribute.joinTable) {\n const {\n name,\n joinColumn,\n inverseJoinColumn,\n orderColumnName,\n morphColumn,\n inverseOrderColumnName,\n } = attribute.joinTable;\n\n const qb = connection.queryBuilder().from(addSchema(name));\n\n type Columns = {\n left: { ref: string | null; order?: string };\n right: { ref: string | null; order?: string; type?: string; field?: string };\n };\n\n const columns: Columns = {\n left: { ref: null },\n right: { ref: null },\n };\n\n const left: Partial<ILink['left']> = { type: uid, field: fieldName };\n const right: Partial<ILink['right']> = {};\n\n if (kind === 'relation.basic' || kind === 'relation.circular') {\n right.type = attribute.target;\n right.field = attribute.inversedBy;\n\n columns.left.ref = joinColumn.name;\n columns.right.ref = inverseJoinColumn.name;\n\n if (orderColumnName) {\n columns.left.order = orderColumnName as string;\n }\n\n if (inverseOrderColumnName) {\n columns.right.order = inverseOrderColumnName as string;\n }\n }\n\n if (kind === 'relation.morph') {\n columns.left.ref = joinColumn.name;\n\n columns.right.ref = morphColumn.idColumn.name;\n columns.right.type = morphColumn.typeColumn.name;\n columns.right.field = 'field';\n columns.right.order = 'order';\n }\n\n const validColumns = [\n // Left\n columns.left.ref,\n columns.left.order,\n // Right\n columns.right.ref,\n columns.right.type,\n columns.right.field,\n columns.right.order,\n ].filter((column: string | null | undefined) => !isNil(column));\n\n qb.select(validColumns);\n\n if (trx) {\n qb.transacting(trx);\n }\n\n // TODO: stream the query to improve performances\n const entries = await qb;\n\n for (const entry of entries) {\n if (columns.left.ref) {\n left.ref = entry[columns.left.ref];\n }\n\n if (columns.right.ref) {\n right.ref = entry[columns.right.ref];\n }\n\n if (columns.left.order) {\n left.pos = entry[columns.left.order as string];\n }\n\n if (columns.right.order) {\n right.pos = entry[columns.right.order as string];\n }\n\n if (columns.right.type) {\n right.type = entry[columns.right.type as string];\n }\n\n if (columns.right.field) {\n right.field = entry[columns.right.field as string];\n }\n\n const link: ILink = {\n kind,\n relation,\n left: clone(left as ILink['left']),\n right: clone(right as ILink['right']),\n };\n\n yield link;\n }\n }\n\n if (attribute.morphColumn) {\n const { typeColumn, idColumn } = attribute.morphColumn;\n\n const qb = connection\n .queryBuilder()\n .select('id', typeColumn.name, idColumn.name)\n .from(addSchema(metadata.tableName))\n .whereNotNull(typeColumn.name)\n .whereNotNull(idColumn.name);\n\n if (trx) {\n qb.transacting(trx);\n }\n\n const entries = await qb;\n\n for (const entry of entries) {\n const ref = entry[idColumn.name];\n\n yield {\n kind,\n relation,\n left: { type: uid, ref: entry.id, field: fieldName },\n right: { type: entry[typeColumn.name], ref },\n };\n }\n }\n }\n\n async function* generateAll(uid: string): AsyncGenerator<ILink> {\n const metadata = strapi.db.metadata.get(uid);\n\n if (!metadata) {\n throw new Error(`No metadata found for ${uid}`);\n }\n\n const attributes = filterValidRelationalAttributes(metadata.attributes);\n\n for (const fieldName of Object.keys(attributes)) {\n for await (const link of generateAllForAttribute(uid, fieldName)) {\n yield link;\n }\n }\n }\n\n const insert = async (link: ILink) => {\n const { kind, left, right } = link;\n\n const metadata = strapi.db.metadata.get(left.type);\n const attribute = metadata.attributes[left.field];\n\n const payload = {};\n\n /**\n * This _should_ only happen for attributes that are added dynamically e.g. review-workflow stages\n * and a user is importing EE data into a CE project.\n */\n if (!attribute) {\n return;\n }\n\n if (attribute.type !== 'relation') {\n throw new Error(`Attribute ${left.field} is not a relation`);\n }\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const joinColumnName = attribute.joinColumn.name;\n\n // Note: this addSchema may not be necessary, but is added for safety\n const qb = connection(addSchema(metadata.tableName))\n .where('id', left.ref)\n .update({ [joinColumnName]: right.ref });\n if (trx) {\n qb.transacting(trx);\n }\n await qb;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n if (joinTable.joinColumn) {\n Object.assign(payload, { [joinTable.joinColumn.name]: left.ref });\n }\n\n const assignInverseColumn = () => {\n if ('inverseJoinColumn' in joinTable && joinTable.inverseJoinColumn) {\n Object.assign(payload, {\n [joinTable.inverseJoinColumn.name]: right.ref,\n });\n }\n };\n\n const assignOrderColumns = () => {\n if ('orderColumnName' in joinTable && joinTable.orderColumnName) {\n Object.assign(payload, { [joinTable.orderColumnName]: left.pos ?? null });\n }\n\n if ('inverseOrderColumnName' in joinTable && joinTable.inverseOrderColumnName) {\n Object.assign(payload, { [joinTable.inverseOrderColumnName]: right.pos ?? null });\n }\n };\n\n const assignMorphColumns = () => {\n if ('morphColumn' in joinTable && joinTable.morphColumn) {\n const { idColumn, typeColumn } = joinTable.morphColumn ?? {};\n\n if (idColumn) {\n Object.assign(payload, { [idColumn.name]: right.ref });\n }\n\n if (typeColumn) {\n Object.assign(payload, { [typeColumn.name]: right.type });\n }\n\n Object.assign(payload, { order: right.pos ?? null, field: right.field ?? null });\n }\n };\n\n if (kind === 'relation.basic' || kind === 'relation.circular') {\n assignInverseColumn();\n }\n\n if (kind === 'relation.morph') {\n assignMorphColumns();\n }\n\n assignOrderColumns();\n const qb = connection.insert(payload).into(addSchema(joinTable.name));\n if (trx) {\n await qb.transacting(trx);\n }\n }\n\n if ('morphColumn' in attribute && attribute.morphColumn) {\n const { morphColumn } = attribute;\n\n const qb = connection(addSchema(metadata.tableName))\n .where('id', left.ref)\n .update({\n [morphColumn.idColumn.name]: right.ref,\n [morphColumn.typeColumn.name]: right.type,\n });\n\n if (trx) {\n qb.transacting(trx);\n }\n\n await qb;\n }\n };\n\n return { generateAll, generateAllForAttribute, insert };\n };\n\n return query;\n};\n\nexport const filterValidRelationalAttributes = (attributes: Record<string, any>) => {\n const isOwner = (attribute: any) => {\n return attribute.owner || (!attribute.mappedBy && !attribute.morphBy);\n };\n\n const isComponentLike = (attribute: any) => attribute.joinTable?.name.endsWith('_cmps');\n\n return Object.entries(attributes)\n .filter(([, attribute]) => {\n return attribute.type === 'relation' && isOwner(attribute) && !isComponentLike(attribute);\n })\n .reduce<Record<string, any>>((acc, [key, attribute]) => ({ ...acc, [key]: attribute }), {});\n};\n\nconst getLinkKind = (attribute: any, uid: string): ILink['kind'] => {\n if (attribute.relation.startsWith('morph')) {\n return 'relation.morph';\n }\n\n if (attribute.target === uid) {\n return 'relation.circular';\n }\n\n return 'relation.basic';\n};\n"],"names":["createLinkQuery","strapi","trx","query","connection","db","addSchema","tableName","schemaName","client","connectionSettings","schema","generateAllForAttribute","uid","fieldName","metadata","get","Error","attributes","filterValidRelationalAttributes","attribute","kind","getLinkKind","relation","target","joinColumn","joinColumnName","name","qb","queryBuilder","select","from","transacting","entries","entry","ref","left","type","id","field","right","joinTable","inverseJoinColumn","orderColumnName","morphColumn","inverseOrderColumnName","columns","inversedBy","order","idColumn","typeColumn","validColumns","filter","column","isNil","pos","link","clone","whereNotNull","generateAll","Object","keys","insert","payload","where","update","assign","assignInverseColumn","assignOrderColumns","assignMorphColumns","into","isOwner","owner","mappedBy","morphBy","isComponentLike","endsWith","reduce","acc","key","startsWith"],"mappings":"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"}
1
+ {"version":3,"file":"link.mjs","sources":["../../../src/strapi/queries/link.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport { clone, isNil } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nimport { ILink } from '../../../types';\n\n// TODO: Remove any types when we'll have types for DB metadata\n\nexport const createLinkQuery = (strapi: Core.Strapi, trx?: Knex.Transaction) => {\n const query = () => {\n const { connection } = strapi.db;\n\n // TODO: Export utils from database and use the addSchema that is already written\n const addSchema = (tableName: string) => {\n const schemaName = connection.client.connectionSettings.schema;\n return schemaName ? `${schemaName}.${tableName}` : tableName;\n };\n\n async function* generateAllForAttribute(uid: string, fieldName: string): AsyncGenerator<ILink> {\n const metadata = strapi.db.metadata.get(uid);\n\n if (!metadata) {\n throw new Error(`No metadata found for ${uid}`);\n }\n\n const attributes = filterValidRelationalAttributes(metadata.attributes);\n\n if (!(fieldName in attributes)) {\n throw new Error(`${fieldName} is not a valid relational attribute name`);\n }\n\n const attribute = attributes[fieldName];\n\n const kind = getLinkKind(attribute, uid);\n const { relation, target } = attribute;\n\n // The relation is stored in the same table\n // TODO: handle manyToOne joinColumn\n if (attribute.joinColumn) {\n const joinColumnName: string = attribute.joinColumn.name;\n\n const qb = connection\n .queryBuilder()\n .select('id', joinColumnName)\n .from(addSchema(metadata.tableName));\n\n if (trx) {\n qb.transacting(trx);\n }\n\n // TODO: stream the query to improve performances\n const entries = await qb;\n\n for (const entry of entries) {\n const ref = entry[joinColumnName];\n\n if (ref !== null) {\n yield {\n kind,\n relation,\n left: { type: uid, ref: entry.id, field: fieldName },\n right: { type: target, ref },\n };\n }\n }\n }\n\n // The relation uses a join table\n if (attribute.joinTable) {\n const {\n name,\n joinColumn,\n inverseJoinColumn,\n orderColumnName,\n morphColumn,\n inverseOrderColumnName,\n } = attribute.joinTable;\n\n const qb = connection.queryBuilder().from(addSchema(name));\n\n type Columns = {\n left: { ref: string | null; order?: string };\n right: { ref: string | null; order?: string; type?: string; field?: string };\n };\n\n const columns: Columns = {\n left: { ref: null },\n right: { ref: null },\n };\n\n const left: Partial<ILink['left']> = { type: uid, field: fieldName };\n const right: Partial<ILink['right']> = {};\n\n if (kind === 'relation.basic' || kind === 'relation.circular') {\n right.type = attribute.target;\n right.field = attribute.inversedBy;\n\n columns.left.ref = joinColumn.name;\n columns.right.ref = inverseJoinColumn.name;\n\n if (orderColumnName) {\n columns.left.order = orderColumnName as string;\n }\n\n if (inverseOrderColumnName) {\n columns.right.order = inverseOrderColumnName as string;\n }\n }\n\n if (kind === 'relation.morph') {\n columns.left.ref = joinColumn.name;\n\n columns.right.ref = morphColumn.idColumn.name;\n columns.right.type = morphColumn.typeColumn.name;\n columns.right.field = 'field';\n columns.right.order = 'order';\n }\n\n const validColumns = [\n // Left\n columns.left.ref,\n columns.left.order,\n // Right\n columns.right.ref,\n columns.right.type,\n columns.right.field,\n columns.right.order,\n ].filter((column: string | null | undefined) => !isNil(column));\n\n qb.select(validColumns);\n\n if (trx) {\n qb.transacting(trx);\n }\n\n // TODO: stream the query to improve performances\n const entries = await qb;\n\n for (const entry of entries) {\n if (columns.left.ref) {\n left.ref = entry[columns.left.ref];\n }\n\n if (columns.right.ref) {\n right.ref = entry[columns.right.ref];\n }\n\n if (columns.left.order) {\n left.pos = entry[columns.left.order as string];\n }\n\n if (columns.right.order) {\n right.pos = entry[columns.right.order as string];\n }\n\n if (columns.right.type) {\n right.type = entry[columns.right.type as string];\n }\n\n if (columns.right.field) {\n right.field = entry[columns.right.field as string];\n }\n\n const link: ILink = {\n kind,\n relation,\n left: clone(left as ILink['left']),\n right: clone(right as ILink['right']),\n };\n\n yield link;\n }\n }\n\n if (attribute.morphColumn) {\n const { typeColumn, idColumn } = attribute.morphColumn;\n\n const qb = connection\n .queryBuilder()\n .select('id', typeColumn.name, idColumn.name)\n .from(addSchema(metadata.tableName))\n .whereNotNull(typeColumn.name)\n .whereNotNull(idColumn.name);\n\n if (trx) {\n qb.transacting(trx);\n }\n\n const entries = await qb;\n\n for (const entry of entries) {\n const ref = entry[idColumn.name];\n\n yield {\n kind,\n relation,\n left: { type: uid, ref: entry.id, field: fieldName },\n right: { type: entry[typeColumn.name], ref },\n };\n }\n }\n }\n\n async function* generateAll(uid: string): AsyncGenerator<ILink> {\n const metadata = strapi.db.metadata.get(uid);\n\n if (!metadata) {\n throw new Error(`No metadata found for ${uid}`);\n }\n\n const attributes = filterValidRelationalAttributes(metadata.attributes);\n\n for (const fieldName of Object.keys(attributes)) {\n for await (const link of generateAllForAttribute(uid, fieldName)) {\n yield link;\n }\n }\n }\n\n const insert = async (link: ILink) => {\n const { kind, left, right } = link;\n\n const metadata = strapi.db.metadata.get(left.type);\n const attribute = metadata.attributes[left.field];\n\n const payload = {};\n\n /**\n * This _should_ only happen for attributes that are added dynamically e.g. review-workflow stages\n * and a user is importing EE data into a CE project.\n */\n if (!attribute) {\n return;\n }\n\n if (attribute.type !== 'relation') {\n throw new Error(`Attribute ${left.field} is not a relation`);\n }\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const joinColumnName = attribute.joinColumn.name;\n\n // Note: this addSchema may not be necessary, but is added for safety\n const qb = connection(addSchema(metadata.tableName))\n .where('id', left.ref)\n .update({ [joinColumnName]: right.ref });\n if (trx) {\n qb.transacting(trx);\n }\n await qb;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n if (joinTable.joinColumn) {\n Object.assign(payload, { [joinTable.joinColumn.name]: left.ref });\n }\n\n const assignInverseColumn = () => {\n if ('inverseJoinColumn' in joinTable && joinTable.inverseJoinColumn) {\n Object.assign(payload, {\n [joinTable.inverseJoinColumn.name]: right.ref,\n });\n }\n };\n\n const assignOrderColumns = () => {\n if ('orderColumnName' in joinTable && joinTable.orderColumnName) {\n Object.assign(payload, { [joinTable.orderColumnName]: left.pos ?? null });\n }\n\n if ('inverseOrderColumnName' in joinTable && joinTable.inverseOrderColumnName) {\n Object.assign(payload, { [joinTable.inverseOrderColumnName]: right.pos ?? null });\n }\n };\n\n const assignMorphColumns = () => {\n if ('morphColumn' in joinTable && joinTable.morphColumn) {\n const { idColumn, typeColumn } = joinTable.morphColumn ?? {};\n\n if (idColumn) {\n Object.assign(payload, { [idColumn.name]: right.ref });\n }\n\n if (typeColumn) {\n Object.assign(payload, { [typeColumn.name]: right.type });\n }\n\n Object.assign(payload, { order: right.pos ?? null, field: right.field ?? null });\n }\n };\n\n if (kind === 'relation.basic' || kind === 'relation.circular') {\n assignInverseColumn();\n }\n\n if (kind === 'relation.morph') {\n assignMorphColumns();\n }\n\n assignOrderColumns();\n const qb = connection.insert(payload).into(addSchema(joinTable.name));\n if (trx) {\n await qb.transacting(trx);\n }\n }\n\n if ('morphColumn' in attribute && attribute.morphColumn) {\n const { morphColumn } = attribute;\n\n const qb = connection(addSchema(metadata.tableName))\n .where('id', left.ref)\n .update({\n [morphColumn.idColumn.name]: right.ref,\n [morphColumn.typeColumn.name]: right.type,\n });\n\n if (trx) {\n qb.transacting(trx);\n }\n\n await qb;\n }\n };\n\n return { generateAll, generateAllForAttribute, insert };\n };\n\n return query;\n};\n\nexport const filterValidRelationalAttributes = (attributes: Record<string, any>) => {\n const isOwner = (attribute: any) => {\n return attribute.owner || (!attribute.mappedBy && !attribute.morphBy);\n };\n\n const isComponentLike = (attribute: any) => attribute.joinTable?.name.endsWith('_cmps');\n\n return Object.entries(attributes)\n .filter(([, attribute]) => {\n return attribute.type === 'relation' && isOwner(attribute) && !isComponentLike(attribute);\n })\n .reduce<Record<string, any>>((acc, [key, attribute]) => ({ ...acc, [key]: attribute }), {});\n};\n\nconst getLinkKind = (attribute: any, uid: string): ILink['kind'] => {\n if (attribute.relation.startsWith('morph')) {\n return 'relation.morph';\n }\n\n if (attribute.target === uid) {\n return 'relation.circular';\n }\n\n return 'relation.basic';\n};\n"],"names":["createLinkQuery","strapi","trx","query","connection","db","addSchema","tableName","schemaName","client","connectionSettings","schema","generateAllForAttribute","uid","fieldName","metadata","get","Error","attributes","filterValidRelationalAttributes","attribute","kind","getLinkKind","relation","target","joinColumn","joinColumnName","name","qb","queryBuilder","select","from","transacting","entries","entry","ref","left","type","id","field","right","joinTable","inverseJoinColumn","orderColumnName","morphColumn","inverseOrderColumnName","columns","inversedBy","order","idColumn","typeColumn","validColumns","filter","column","isNil","pos","link","clone","whereNotNull","generateAll","Object","keys","insert","payload","where","update","assign","assignInverseColumn","assignOrderColumns","assignMorphColumns","into","isOwner","owner","mappedBy","morphBy","isComponentLike","endsWith","reduce","acc","key","startsWith"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../src/strapi/remote/constants.ts"],"sourcesContent":["export const TRANSFER_PATH = '/transfer/runner' as const;\nexport const TRANSFER_METHODS = ['push', 'pull'] as const;\n\nexport type TransferPath = typeof TRANSFER_PATH;\nexport type TransferMethod = (typeof TRANSFER_METHODS)[number];\n"],"names":["TRANSFER_PATH","TRANSFER_METHODS"],"mappings":";;AAAO,MAAMA,gBAAgB;MAChBC,gBAAmB,GAAA;AAAC,IAAA,MAAA;AAAQ,IAAA;;;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../src/strapi/remote/constants.ts"],"sourcesContent":["export const TRANSFER_PATH = '/transfer/runner' as const;\nexport const TRANSFER_METHODS = ['push', 'pull'] as const;\n\nexport type TransferPath = typeof TRANSFER_PATH;\nexport type TransferMethod = (typeof TRANSFER_METHODS)[number];\n"],"names":["TRANSFER_PATH","TRANSFER_METHODS"],"mappings":";;AAAO,MAAMA,gBAAgB;MAChBC,gBAAAA,GAAmB;AAAC,IAAA,MAAA;AAAQ,IAAA;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sources":["../../../src/strapi/remote/constants.ts"],"sourcesContent":["export const TRANSFER_PATH = '/transfer/runner' as const;\nexport const TRANSFER_METHODS = ['push', 'pull'] as const;\n\nexport type TransferPath = typeof TRANSFER_PATH;\nexport type TransferMethod = (typeof TRANSFER_METHODS)[number];\n"],"names":["TRANSFER_PATH","TRANSFER_METHODS"],"mappings":"AAAO,MAAMA,gBAAgB;MAChBC,gBAAmB,GAAA;AAAC,IAAA,MAAA;AAAQ,IAAA;;;;;"}
1
+ {"version":3,"file":"constants.mjs","sources":["../../../src/strapi/remote/constants.ts"],"sourcesContent":["export const TRANSFER_PATH = '/transfer/runner' as const;\nexport const TRANSFER_METHODS = ['push', 'pull'] as const;\n\nexport type TransferPath = typeof TRANSFER_PATH;\nexport type TransferMethod = (typeof TRANSFER_METHODS)[number];\n"],"names":["TRANSFER_PATH","TRANSFER_METHODS"],"mappings":"AAAO,MAAMA,gBAAgB;MAChBC,gBAAAA,GAAmB;AAAC,IAAA,MAAA;AAAQ,IAAA;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"default.js","sources":["../../../../src/strapi/remote/flows/default.ts"],"sourcesContent":["import type { Step } from '.';\n\nexport default [\n {\n kind: 'action',\n action: 'bootstrap',\n },\n {\n kind: 'action',\n action: 'init',\n },\n {\n kind: 'action',\n action: 'beforeTransfer',\n },\n {\n kind: 'transfer',\n stage: 'schemas',\n },\n {\n kind: 'transfer',\n stage: 'entities',\n },\n {\n kind: 'transfer',\n stage: 'assets',\n },\n {\n kind: 'transfer',\n stage: 'links',\n },\n {\n kind: 'transfer',\n stage: 'configuration',\n },\n {\n kind: 'action',\n action: 'close',\n },\n] as readonly Step[];\n"],"names":["kind","action","stage"],"mappings":";;AAEA,4BAAe;AACb,IAAA;QACEA,IAAM,EAAA,QAAA;QACNC,MAAQ,EAAA;AACV,KAAA;AACA,IAAA;QACED,IAAM,EAAA,QAAA;QACNC,MAAQ,EAAA;AACV,KAAA;AACA,IAAA;QACED,IAAM,EAAA,QAAA;QACNC,MAAQ,EAAA;AACV,KAAA;AACA,IAAA;QACED,IAAM,EAAA,UAAA;QACNE,KAAO,EAAA;AACT,KAAA;AACA,IAAA;QACEF,IAAM,EAAA,UAAA;QACNE,KAAO,EAAA;AACT,KAAA;AACA,IAAA;QACEF,IAAM,EAAA,UAAA;QACNE,KAAO,EAAA;AACT,KAAA;AACA,IAAA;QACEF,IAAM,EAAA,UAAA;QACNE,KAAO,EAAA;AACT,KAAA;AACA,IAAA;QACEF,IAAM,EAAA,UAAA;QACNE,KAAO,EAAA;AACT,KAAA;AACA,IAAA;QACEF,IAAM,EAAA,QAAA;QACNC,MAAQ,EAAA;AACV;CACD;;;;"}
1
+ {"version":3,"file":"default.js","sources":["../../../../src/strapi/remote/flows/default.ts"],"sourcesContent":["import type { Step } from '.';\n\nexport default [\n {\n kind: 'action',\n action: 'bootstrap',\n },\n {\n kind: 'action',\n action: 'init',\n },\n {\n kind: 'action',\n action: 'beforeTransfer',\n },\n {\n kind: 'transfer',\n stage: 'schemas',\n },\n {\n kind: 'transfer',\n stage: 'entities',\n },\n {\n kind: 'transfer',\n stage: 'assets',\n },\n {\n kind: 'transfer',\n stage: 'links',\n },\n {\n kind: 'transfer',\n stage: 'configuration',\n },\n {\n kind: 'action',\n action: 'close',\n },\n] as readonly Step[];\n"],"names":["kind","action","stage"],"mappings":";;AAEA,4BAAe;AACb,IAAA;QACEA,IAAAA,EAAM,QAAA;QACNC,MAAAA,EAAQ;AACV,KAAA;AACA,IAAA;QACED,IAAAA,EAAM,QAAA;QACNC,MAAAA,EAAQ;AACV,KAAA;AACA,IAAA;QACED,IAAAA,EAAM,QAAA;QACNC,MAAAA,EAAQ;AACV,KAAA;AACA,IAAA;QACED,IAAAA,EAAM,UAAA;QACNE,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEF,IAAAA,EAAM,UAAA;QACNE,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEF,IAAAA,EAAM,UAAA;QACNE,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEF,IAAAA,EAAM,UAAA;QACNE,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEF,IAAAA,EAAM,UAAA;QACNE,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEF,IAAAA,EAAM,QAAA;QACNC,MAAAA,EAAQ;AACV;CACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"default.mjs","sources":["../../../../src/strapi/remote/flows/default.ts"],"sourcesContent":["import type { Step } from '.';\n\nexport default [\n {\n kind: 'action',\n action: 'bootstrap',\n },\n {\n kind: 'action',\n action: 'init',\n },\n {\n kind: 'action',\n action: 'beforeTransfer',\n },\n {\n kind: 'transfer',\n stage: 'schemas',\n },\n {\n kind: 'transfer',\n stage: 'entities',\n },\n {\n kind: 'transfer',\n stage: 'assets',\n },\n {\n kind: 'transfer',\n stage: 'links',\n },\n {\n kind: 'transfer',\n stage: 'configuration',\n },\n {\n kind: 'action',\n action: 'close',\n },\n] as readonly Step[];\n"],"names":["kind","action","stage"],"mappings":"AAEA,4BAAe;AACb,IAAA;QACEA,IAAM,EAAA,QAAA;QACNC,MAAQ,EAAA;AACV,KAAA;AACA,IAAA;QACED,IAAM,EAAA,QAAA;QACNC,MAAQ,EAAA;AACV,KAAA;AACA,IAAA;QACED,IAAM,EAAA,QAAA;QACNC,MAAQ,EAAA;AACV,KAAA;AACA,IAAA;QACED,IAAM,EAAA,UAAA;QACNE,KAAO,EAAA;AACT,KAAA;AACA,IAAA;QACEF,IAAM,EAAA,UAAA;QACNE,KAAO,EAAA;AACT,KAAA;AACA,IAAA;QACEF,IAAM,EAAA,UAAA;QACNE,KAAO,EAAA;AACT,KAAA;AACA,IAAA;QACEF,IAAM,EAAA,UAAA;QACNE,KAAO,EAAA;AACT,KAAA;AACA,IAAA;QACEF,IAAM,EAAA,UAAA;QACNE,KAAO,EAAA;AACT,KAAA;AACA,IAAA;QACEF,IAAM,EAAA,QAAA;QACNC,MAAQ,EAAA;AACV;CACD;;;;"}
1
+ {"version":3,"file":"default.mjs","sources":["../../../../src/strapi/remote/flows/default.ts"],"sourcesContent":["import type { Step } from '.';\n\nexport default [\n {\n kind: 'action',\n action: 'bootstrap',\n },\n {\n kind: 'action',\n action: 'init',\n },\n {\n kind: 'action',\n action: 'beforeTransfer',\n },\n {\n kind: 'transfer',\n stage: 'schemas',\n },\n {\n kind: 'transfer',\n stage: 'entities',\n },\n {\n kind: 'transfer',\n stage: 'assets',\n },\n {\n kind: 'transfer',\n stage: 'links',\n },\n {\n kind: 'transfer',\n stage: 'configuration',\n },\n {\n kind: 'action',\n action: 'close',\n },\n] as readonly Step[];\n"],"names":["kind","action","stage"],"mappings":"AAEA,4BAAe;AACb,IAAA;QACEA,IAAAA,EAAM,QAAA;QACNC,MAAAA,EAAQ;AACV,KAAA;AACA,IAAA;QACED,IAAAA,EAAM,QAAA;QACNC,MAAAA,EAAQ;AACV,KAAA;AACA,IAAA;QACED,IAAAA,EAAM,QAAA;QACNC,MAAAA,EAAQ;AACV,KAAA;AACA,IAAA;QACED,IAAAA,EAAM,UAAA;QACNE,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEF,IAAAA,EAAM,UAAA;QACNE,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEF,IAAAA,EAAM,UAAA;QACNE,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEF,IAAAA,EAAM,UAAA;QACNE,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEF,IAAAA,EAAM,UAAA;QACNE,KAAAA,EAAO;AACT,KAAA;AACA,IAAA;QACEF,IAAAA,EAAM,QAAA;QACNC,MAAAA,EAAQ;AACV;CACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/strapi/remote/flows/index.ts"],"sourcesContent":["import type { TransferStage } from '../../../../types';\n\nexport type Step =\n | { kind: 'action'; action: string }\n | { kind: 'transfer'; stage: TransferStage; locked?: boolean };\n\nexport { default as DEFAULT_TRANSFER_FLOW } from './default';\n\ninterface IState {\n step: Step | null;\n}\n\nexport interface TransferFlow {\n has(step: Step): boolean;\n can(step: Step): boolean;\n cannot(step: Step): boolean;\n set(step: Step): this;\n get(): Step | null;\n}\n\nexport const createFlow = (flow: readonly Step[]): TransferFlow => {\n const state: IState = { step: null };\n\n /**\n * Equality check between two steps\n */\n const stepEqual = (stepA: Step, stepB: Step): boolean => {\n if (stepA.kind === 'action' && stepB.kind === 'action') {\n return stepA.action === stepB.action;\n }\n\n if (stepA.kind === 'transfer' && stepB.kind === 'transfer') {\n return stepA.stage === stepB.stage;\n }\n\n return false;\n };\n\n /**\n * Find the index for a given step\n */\n const findStepIndex = (step: Step) => flow.findIndex((flowStep) => stepEqual(step, flowStep));\n\n return {\n has(step: Step) {\n return findStepIndex(step) !== -1;\n },\n\n can(step: Step) {\n if (state.step === null) {\n return true;\n }\n\n const indexesDifference = findStepIndex(step) - findStepIndex(state.step);\n\n // It's possible to send multiple time the same transfer step in a row\n if (indexesDifference === 0 && step.kind === 'transfer') {\n return true;\n }\n\n return indexesDifference > 0;\n },\n\n cannot(step: Step) {\n return !this.can(step);\n },\n\n set(step: Step) {\n const canSwitch = this.can(step);\n\n if (!canSwitch) {\n throw new Error('Impossible to proceed to the given step');\n }\n\n state.step = step;\n\n return this;\n },\n\n get() {\n return state.step;\n },\n };\n};\n"],"names":["createFlow","flow","state","step","stepEqual","stepA","stepB","kind","action","stage","findStepIndex","findIndex","flowStep","has","can","indexesDifference","cannot","set","canSwitch","Error","get"],"mappings":";;AAoBO,MAAMA,aAAa,CAACC,IAAAA,GAAAA;AACzB,IAAA,MAAMC,KAAgB,GAAA;QAAEC,IAAM,EAAA;AAAK,KAAA;AAEnC;;MAGA,MAAMC,SAAY,GAAA,CAACC,KAAaC,EAAAA,KAAAA,GAAAA;AAC9B,QAAA,IAAID,MAAME,IAAI,KAAK,YAAYD,KAAMC,CAAAA,IAAI,KAAK,QAAU,EAAA;AACtD,YAAA,OAAOF,KAAMG,CAAAA,MAAM,KAAKF,KAAAA,CAAME,MAAM;AACtC;AAEA,QAAA,IAAIH,MAAME,IAAI,KAAK,cAAcD,KAAMC,CAAAA,IAAI,KAAK,UAAY,EAAA;AAC1D,YAAA,OAAOF,KAAMI,CAAAA,KAAK,KAAKH,KAAAA,CAAMG,KAAK;AACpC;QAEA,OAAO,KAAA;AACT,KAAA;AAEA;;MAGA,MAAMC,aAAgB,GAAA,CAACP,IAAeF,GAAAA,IAAAA,CAAKU,SAAS,CAAC,CAACC,QAAaR,GAAAA,SAAAA,CAAUD,IAAMS,EAAAA,QAAAA,CAAAA,CAAAA;IAEnF,OAAO;AACLC,QAAAA,GAAAA,CAAAA,CAAIV,IAAU,EAAA;YACZ,OAAOO,aAAAA,CAAcP,UAAU,CAAC,CAAA;AAClC,SAAA;AAEAW,QAAAA,GAAAA,CAAAA,CAAIX,IAAU,EAAA;YACZ,IAAID,KAAAA,CAAMC,IAAI,KAAK,IAAM,EAAA;gBACvB,OAAO,IAAA;AACT;AAEA,YAAA,MAAMY,iBAAoBL,GAAAA,aAAAA,CAAcP,IAAQO,CAAAA,GAAAA,aAAAA,CAAcR,MAAMC,IAAI,CAAA;;AAGxE,YAAA,IAAIY,iBAAsB,KAAA,CAAA,IAAKZ,IAAKI,CAAAA,IAAI,KAAK,UAAY,EAAA;gBACvD,OAAO,IAAA;AACT;AAEA,YAAA,OAAOQ,iBAAoB,GAAA,CAAA;AAC7B,SAAA;AAEAC,QAAAA,MAAAA,CAAAA,CAAOb,IAAU,EAAA;AACf,YAAA,OAAO,CAAC,IAAI,CAACW,GAAG,CAACX,IAAAA,CAAAA;AACnB,SAAA;AAEAc,QAAAA,GAAAA,CAAAA,CAAId,IAAU,EAAA;AACZ,YAAA,MAAMe,SAAY,GAAA,IAAI,CAACJ,GAAG,CAACX,IAAAA,CAAAA;AAE3B,YAAA,IAAI,CAACe,SAAW,EAAA;AACd,gBAAA,MAAM,IAAIC,KAAM,CAAA,yCAAA,CAAA;AAClB;AAEAjB,YAAAA,KAAAA,CAAMC,IAAI,GAAGA,IAAAA;AAEb,YAAA,OAAO,IAAI;AACb,SAAA;AAEAiB,QAAAA,GAAAA,CAAAA,GAAAA;AACE,YAAA,OAAOlB,MAAMC,IAAI;AACnB;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/strapi/remote/flows/index.ts"],"sourcesContent":["import type { TransferStage } from '../../../../types';\n\nexport type Step =\n | { kind: 'action'; action: string }\n | { kind: 'transfer'; stage: TransferStage; locked?: boolean };\n\nexport { default as DEFAULT_TRANSFER_FLOW } from './default';\n\ninterface IState {\n step: Step | null;\n}\n\nexport interface TransferFlow {\n has(step: Step): boolean;\n can(step: Step): boolean;\n cannot(step: Step): boolean;\n set(step: Step): this;\n get(): Step | null;\n}\n\nexport const createFlow = (flow: readonly Step[]): TransferFlow => {\n const state: IState = { step: null };\n\n /**\n * Equality check between two steps\n */\n const stepEqual = (stepA: Step, stepB: Step): boolean => {\n if (stepA.kind === 'action' && stepB.kind === 'action') {\n return stepA.action === stepB.action;\n }\n\n if (stepA.kind === 'transfer' && stepB.kind === 'transfer') {\n return stepA.stage === stepB.stage;\n }\n\n return false;\n };\n\n /**\n * Find the index for a given step\n */\n const findStepIndex = (step: Step) => flow.findIndex((flowStep) => stepEqual(step, flowStep));\n\n return {\n has(step: Step) {\n return findStepIndex(step) !== -1;\n },\n\n can(step: Step) {\n if (state.step === null) {\n return true;\n }\n\n const indexesDifference = findStepIndex(step) - findStepIndex(state.step);\n\n // It's possible to send multiple time the same transfer step in a row\n if (indexesDifference === 0 && step.kind === 'transfer') {\n return true;\n }\n\n return indexesDifference > 0;\n },\n\n cannot(step: Step) {\n return !this.can(step);\n },\n\n set(step: Step) {\n const canSwitch = this.can(step);\n\n if (!canSwitch) {\n throw new Error('Impossible to proceed to the given step');\n }\n\n state.step = step;\n\n return this;\n },\n\n get() {\n return state.step;\n },\n };\n};\n"],"names":["createFlow","flow","state","step","stepEqual","stepA","stepB","kind","action","stage","findStepIndex","findIndex","flowStep","has","can","indexesDifference","cannot","set","canSwitch","Error","get"],"mappings":";;AAoBO,MAAMA,aAAa,CAACC,IAAAA,GAAAA;AACzB,IAAA,MAAMC,KAAAA,GAAgB;QAAEC,IAAAA,EAAM;AAAK,KAAA;AAEnC;;MAGA,MAAMC,SAAAA,GAAY,CAACC,KAAAA,EAAaC,KAAAA,GAAAA;AAC9B,QAAA,IAAID,MAAME,IAAI,KAAK,YAAYD,KAAAA,CAAMC,IAAI,KAAK,QAAA,EAAU;AACtD,YAAA,OAAOF,KAAAA,CAAMG,MAAM,KAAKF,KAAAA,CAAME,MAAM;AACtC,QAAA;AAEA,QAAA,IAAIH,MAAME,IAAI,KAAK,cAAcD,KAAAA,CAAMC,IAAI,KAAK,UAAA,EAAY;AAC1D,YAAA,OAAOF,KAAAA,CAAMI,KAAK,KAAKH,KAAAA,CAAMG,KAAK;AACpC,QAAA;QAEA,OAAO,KAAA;AACT,IAAA,CAAA;AAEA;;MAGA,MAAMC,aAAAA,GAAgB,CAACP,IAAAA,GAAeF,IAAAA,CAAKU,SAAS,CAAC,CAACC,QAAAA,GAAaR,SAAAA,CAAUD,IAAAA,EAAMS,QAAAA,CAAAA,CAAAA;IAEnF,OAAO;AACLC,QAAAA,GAAAA,CAAAA,CAAIV,IAAU,EAAA;YACZ,OAAOO,aAAAA,CAAcP,UAAU,EAAC;AAClC,QAAA,CAAA;AAEAW,QAAAA,GAAAA,CAAAA,CAAIX,IAAU,EAAA;YACZ,IAAID,KAAAA,CAAMC,IAAI,KAAK,IAAA,EAAM;gBACvB,OAAO,IAAA;AACT,YAAA;AAEA,YAAA,MAAMY,iBAAAA,GAAoBL,aAAAA,CAAcP,IAAAA,CAAAA,GAAQO,aAAAA,CAAcR,MAAMC,IAAI,CAAA;;AAGxE,YAAA,IAAIY,iBAAAA,KAAsB,CAAA,IAAKZ,IAAAA,CAAKI,IAAI,KAAK,UAAA,EAAY;gBACvD,OAAO,IAAA;AACT,YAAA;AAEA,YAAA,OAAOQ,iBAAAA,GAAoB,CAAA;AAC7B,QAAA,CAAA;AAEAC,QAAAA,MAAAA,CAAAA,CAAOb,IAAU,EAAA;AACf,YAAA,OAAO,CAAC,IAAI,CAACW,GAAG,CAACX,IAAAA,CAAAA;AACnB,QAAA,CAAA;AAEAc,QAAAA,GAAAA,CAAAA,CAAId,IAAU,EAAA;AACZ,YAAA,MAAMe,SAAAA,GAAY,IAAI,CAACJ,GAAG,CAACX,IAAAA,CAAAA;AAE3B,YAAA,IAAI,CAACe,SAAAA,EAAW;AACd,gBAAA,MAAM,IAAIC,KAAAA,CAAM,yCAAA,CAAA;AAClB,YAAA;AAEAjB,YAAAA,KAAAA,CAAMC,IAAI,GAAGA,IAAAA;AAEb,YAAA,OAAO,IAAI;AACb,QAAA,CAAA;AAEAiB,QAAAA,GAAAA,CAAAA,GAAAA;AACE,YAAA,OAAOlB,MAAMC,IAAI;AACnB,QAAA;AACF,KAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../src/strapi/remote/flows/index.ts"],"sourcesContent":["import type { TransferStage } from '../../../../types';\n\nexport type Step =\n | { kind: 'action'; action: string }\n | { kind: 'transfer'; stage: TransferStage; locked?: boolean };\n\nexport { default as DEFAULT_TRANSFER_FLOW } from './default';\n\ninterface IState {\n step: Step | null;\n}\n\nexport interface TransferFlow {\n has(step: Step): boolean;\n can(step: Step): boolean;\n cannot(step: Step): boolean;\n set(step: Step): this;\n get(): Step | null;\n}\n\nexport const createFlow = (flow: readonly Step[]): TransferFlow => {\n const state: IState = { step: null };\n\n /**\n * Equality check between two steps\n */\n const stepEqual = (stepA: Step, stepB: Step): boolean => {\n if (stepA.kind === 'action' && stepB.kind === 'action') {\n return stepA.action === stepB.action;\n }\n\n if (stepA.kind === 'transfer' && stepB.kind === 'transfer') {\n return stepA.stage === stepB.stage;\n }\n\n return false;\n };\n\n /**\n * Find the index for a given step\n */\n const findStepIndex = (step: Step) => flow.findIndex((flowStep) => stepEqual(step, flowStep));\n\n return {\n has(step: Step) {\n return findStepIndex(step) !== -1;\n },\n\n can(step: Step) {\n if (state.step === null) {\n return true;\n }\n\n const indexesDifference = findStepIndex(step) - findStepIndex(state.step);\n\n // It's possible to send multiple time the same transfer step in a row\n if (indexesDifference === 0 && step.kind === 'transfer') {\n return true;\n }\n\n return indexesDifference > 0;\n },\n\n cannot(step: Step) {\n return !this.can(step);\n },\n\n set(step: Step) {\n const canSwitch = this.can(step);\n\n if (!canSwitch) {\n throw new Error('Impossible to proceed to the given step');\n }\n\n state.step = step;\n\n return this;\n },\n\n get() {\n return state.step;\n },\n };\n};\n"],"names":["createFlow","flow","state","step","stepEqual","stepA","stepB","kind","action","stage","findStepIndex","findIndex","flowStep","has","can","indexesDifference","cannot","set","canSwitch","Error","get"],"mappings":"AAoBO,MAAMA,aAAa,CAACC,IAAAA,GAAAA;AACzB,IAAA,MAAMC,KAAgB,GAAA;QAAEC,IAAM,EAAA;AAAK,KAAA;AAEnC;;MAGA,MAAMC,SAAY,GAAA,CAACC,KAAaC,EAAAA,KAAAA,GAAAA;AAC9B,QAAA,IAAID,MAAME,IAAI,KAAK,YAAYD,KAAMC,CAAAA,IAAI,KAAK,QAAU,EAAA;AACtD,YAAA,OAAOF,KAAMG,CAAAA,MAAM,KAAKF,KAAAA,CAAME,MAAM;AACtC;AAEA,QAAA,IAAIH,MAAME,IAAI,KAAK,cAAcD,KAAMC,CAAAA,IAAI,KAAK,UAAY,EAAA;AAC1D,YAAA,OAAOF,KAAMI,CAAAA,KAAK,KAAKH,KAAAA,CAAMG,KAAK;AACpC;QAEA,OAAO,KAAA;AACT,KAAA;AAEA;;MAGA,MAAMC,aAAgB,GAAA,CAACP,IAAeF,GAAAA,IAAAA,CAAKU,SAAS,CAAC,CAACC,QAAaR,GAAAA,SAAAA,CAAUD,IAAMS,EAAAA,QAAAA,CAAAA,CAAAA;IAEnF,OAAO;AACLC,QAAAA,GAAAA,CAAAA,CAAIV,IAAU,EAAA;YACZ,OAAOO,aAAAA,CAAcP,UAAU,CAAC,CAAA;AAClC,SAAA;AAEAW,QAAAA,GAAAA,CAAAA,CAAIX,IAAU,EAAA;YACZ,IAAID,KAAAA,CAAMC,IAAI,KAAK,IAAM,EAAA;gBACvB,OAAO,IAAA;AACT;AAEA,YAAA,MAAMY,iBAAoBL,GAAAA,aAAAA,CAAcP,IAAQO,CAAAA,GAAAA,aAAAA,CAAcR,MAAMC,IAAI,CAAA;;AAGxE,YAAA,IAAIY,iBAAsB,KAAA,CAAA,IAAKZ,IAAKI,CAAAA,IAAI,KAAK,UAAY,EAAA;gBACvD,OAAO,IAAA;AACT;AAEA,YAAA,OAAOQ,iBAAoB,GAAA,CAAA;AAC7B,SAAA;AAEAC,QAAAA,MAAAA,CAAAA,CAAOb,IAAU,EAAA;AACf,YAAA,OAAO,CAAC,IAAI,CAACW,GAAG,CAACX,IAAAA,CAAAA;AACnB,SAAA;AAEAc,QAAAA,GAAAA,CAAAA,CAAId,IAAU,EAAA;AACZ,YAAA,MAAMe,SAAY,GAAA,IAAI,CAACJ,GAAG,CAACX,IAAAA,CAAAA;AAE3B,YAAA,IAAI,CAACe,SAAW,EAAA;AACd,gBAAA,MAAM,IAAIC,KAAM,CAAA,yCAAA,CAAA;AAClB;AAEAjB,YAAAA,KAAAA,CAAMC,IAAI,GAAGA,IAAAA;AAEb,YAAA,OAAO,IAAI;AACb,SAAA;AAEAiB,QAAAA,GAAAA,CAAAA,GAAAA;AACE,YAAA,OAAOlB,MAAMC,IAAI;AACnB;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/strapi/remote/flows/index.ts"],"sourcesContent":["import type { TransferStage } from '../../../../types';\n\nexport type Step =\n | { kind: 'action'; action: string }\n | { kind: 'transfer'; stage: TransferStage; locked?: boolean };\n\nexport { default as DEFAULT_TRANSFER_FLOW } from './default';\n\ninterface IState {\n step: Step | null;\n}\n\nexport interface TransferFlow {\n has(step: Step): boolean;\n can(step: Step): boolean;\n cannot(step: Step): boolean;\n set(step: Step): this;\n get(): Step | null;\n}\n\nexport const createFlow = (flow: readonly Step[]): TransferFlow => {\n const state: IState = { step: null };\n\n /**\n * Equality check between two steps\n */\n const stepEqual = (stepA: Step, stepB: Step): boolean => {\n if (stepA.kind === 'action' && stepB.kind === 'action') {\n return stepA.action === stepB.action;\n }\n\n if (stepA.kind === 'transfer' && stepB.kind === 'transfer') {\n return stepA.stage === stepB.stage;\n }\n\n return false;\n };\n\n /**\n * Find the index for a given step\n */\n const findStepIndex = (step: Step) => flow.findIndex((flowStep) => stepEqual(step, flowStep));\n\n return {\n has(step: Step) {\n return findStepIndex(step) !== -1;\n },\n\n can(step: Step) {\n if (state.step === null) {\n return true;\n }\n\n const indexesDifference = findStepIndex(step) - findStepIndex(state.step);\n\n // It's possible to send multiple time the same transfer step in a row\n if (indexesDifference === 0 && step.kind === 'transfer') {\n return true;\n }\n\n return indexesDifference > 0;\n },\n\n cannot(step: Step) {\n return !this.can(step);\n },\n\n set(step: Step) {\n const canSwitch = this.can(step);\n\n if (!canSwitch) {\n throw new Error('Impossible to proceed to the given step');\n }\n\n state.step = step;\n\n return this;\n },\n\n get() {\n return state.step;\n },\n };\n};\n"],"names":["createFlow","flow","state","step","stepEqual","stepA","stepB","kind","action","stage","findStepIndex","findIndex","flowStep","has","can","indexesDifference","cannot","set","canSwitch","Error","get"],"mappings":"AAoBO,MAAMA,aAAa,CAACC,IAAAA,GAAAA;AACzB,IAAA,MAAMC,KAAAA,GAAgB;QAAEC,IAAAA,EAAM;AAAK,KAAA;AAEnC;;MAGA,MAAMC,SAAAA,GAAY,CAACC,KAAAA,EAAaC,KAAAA,GAAAA;AAC9B,QAAA,IAAID,MAAME,IAAI,KAAK,YAAYD,KAAAA,CAAMC,IAAI,KAAK,QAAA,EAAU;AACtD,YAAA,OAAOF,KAAAA,CAAMG,MAAM,KAAKF,KAAAA,CAAME,MAAM;AACtC,QAAA;AAEA,QAAA,IAAIH,MAAME,IAAI,KAAK,cAAcD,KAAAA,CAAMC,IAAI,KAAK,UAAA,EAAY;AAC1D,YAAA,OAAOF,KAAAA,CAAMI,KAAK,KAAKH,KAAAA,CAAMG,KAAK;AACpC,QAAA;QAEA,OAAO,KAAA;AACT,IAAA,CAAA;AAEA;;MAGA,MAAMC,aAAAA,GAAgB,CAACP,IAAAA,GAAeF,IAAAA,CAAKU,SAAS,CAAC,CAACC,QAAAA,GAAaR,SAAAA,CAAUD,IAAAA,EAAMS,QAAAA,CAAAA,CAAAA;IAEnF,OAAO;AACLC,QAAAA,GAAAA,CAAAA,CAAIV,IAAU,EAAA;YACZ,OAAOO,aAAAA,CAAcP,UAAU,EAAC;AAClC,QAAA,CAAA;AAEAW,QAAAA,GAAAA,CAAAA,CAAIX,IAAU,EAAA;YACZ,IAAID,KAAAA,CAAMC,IAAI,KAAK,IAAA,EAAM;gBACvB,OAAO,IAAA;AACT,YAAA;AAEA,YAAA,MAAMY,iBAAAA,GAAoBL,aAAAA,CAAcP,IAAAA,CAAAA,GAAQO,aAAAA,CAAcR,MAAMC,IAAI,CAAA;;AAGxE,YAAA,IAAIY,iBAAAA,KAAsB,CAAA,IAAKZ,IAAAA,CAAKI,IAAI,KAAK,UAAA,EAAY;gBACvD,OAAO,IAAA;AACT,YAAA;AAEA,YAAA,OAAOQ,iBAAAA,GAAoB,CAAA;AAC7B,QAAA,CAAA;AAEAC,QAAAA,MAAAA,CAAAA,CAAOb,IAAU,EAAA;AACf,YAAA,OAAO,CAAC,IAAI,CAACW,GAAG,CAACX,IAAAA,CAAAA;AACnB,QAAA,CAAA;AAEAc,QAAAA,GAAAA,CAAAA,CAAId,IAAU,EAAA;AACZ,YAAA,MAAMe,SAAAA,GAAY,IAAI,CAACJ,GAAG,CAACX,IAAAA,CAAAA;AAE3B,YAAA,IAAI,CAACe,SAAAA,EAAW;AACd,gBAAA,MAAM,IAAIC,KAAAA,CAAM,yCAAA,CAAA;AAClB,YAAA;AAEAjB,YAAAA,KAAAA,CAAMC,IAAI,GAAGA,IAAAA;AAEb,YAAA,OAAO,IAAI;AACb,QAAA,CAAA;AAEAiB,QAAAA,GAAAA,CAAAA,GAAAA;AACE,YAAA,OAAOlB,MAAMC,IAAI;AACnB,QAAA;AACF,KAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../src/strapi/remote/handlers/constants.ts"],"sourcesContent":["export const VALID_TRANSFER_COMMANDS = ['init', 'end', 'status'] as const;\nexport type ValidTransferCommand = (typeof VALID_TRANSFER_COMMANDS)[number];\n"],"names":["VALID_TRANSFER_COMMANDS"],"mappings":";;MAAaA,uBAA0B,GAAA;AAAC,IAAA,MAAA;AAAQ,IAAA,KAAA;AAAO,IAAA;;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../src/strapi/remote/handlers/constants.ts"],"sourcesContent":["export const VALID_TRANSFER_COMMANDS = ['init', 'end', 'status'] as const;\nexport type ValidTransferCommand = (typeof VALID_TRANSFER_COMMANDS)[number];\n"],"names":["VALID_TRANSFER_COMMANDS"],"mappings":";;MAAaA,uBAAAA,GAA0B;AAAC,IAAA,MAAA;AAAQ,IAAA,KAAA;AAAO,IAAA;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sources":["../../../../src/strapi/remote/handlers/constants.ts"],"sourcesContent":["export const VALID_TRANSFER_COMMANDS = ['init', 'end', 'status'] as const;\nexport type ValidTransferCommand = (typeof VALID_TRANSFER_COMMANDS)[number];\n"],"names":["VALID_TRANSFER_COMMANDS"],"mappings":"MAAaA,uBAA0B,GAAA;AAAC,IAAA,MAAA;AAAQ,IAAA,KAAA;AAAO,IAAA;;;;;"}
1
+ {"version":3,"file":"constants.mjs","sources":["../../../../src/strapi/remote/handlers/constants.ts"],"sourcesContent":["export const VALID_TRANSFER_COMMANDS = ['init', 'end', 'status'] as const;\nexport type ValidTransferCommand = (typeof VALID_TRANSFER_COMMANDS)[number];\n"],"names":["VALID_TRANSFER_COMMANDS"],"mappings":"MAAaA,uBAAAA,GAA0B;AAAC,IAAA,MAAA;AAAQ,IAAA,KAAA;AAAO,IAAA;;;;;"}