@strapi/data-transfer 5.47.1 → 5.48.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.
- package/dist/directory/providers/destination/index.d.ts +1 -1
- package/dist/directory/providers/destination/index.d.ts.map +1 -1
- package/dist/directory/providers/destination/index.js.map +1 -1
- package/dist/directory/providers/destination/index.mjs.map +1 -1
- package/dist/directory/providers/source/index.d.ts +1 -1
- package/dist/directory/providers/source/index.d.ts.map +1 -1
- package/dist/directory/providers/source/index.js.map +1 -1
- package/dist/directory/providers/source/index.mjs.map +1 -1
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/index.mjs.map +1 -1
- package/dist/engine/validation/provider.d.ts +1 -1
- package/dist/engine/validation/provider.d.ts.map +1 -1
- package/dist/engine/validation/provider.js.map +1 -1
- package/dist/engine/validation/provider.mjs.map +1 -1
- package/dist/errors/providers.d.ts +1 -1
- package/dist/errors/providers.d.ts.map +1 -1
- package/dist/errors/providers.js.map +1 -1
- package/dist/errors/providers.mjs.map +1 -1
- package/dist/file/providers/destination/index.d.ts +1 -1
- package/dist/file/providers/destination/index.d.ts.map +1 -1
- package/dist/file/providers/destination/index.js.map +1 -1
- package/dist/file/providers/destination/index.mjs.map +1 -1
- package/dist/file/providers/source/index.d.ts +1 -1
- package/dist/file/providers/source/index.d.ts.map +1 -1
- package/dist/file/providers/source/index.js.map +1 -1
- package/dist/file/providers/source/index.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/assets-destination-writable.d.ts +9 -4
- package/dist/strapi/providers/local-destination/assets-destination-writable.d.ts.map +1 -1
- package/dist/strapi/providers/local-destination/assets-destination-writable.js +67 -49
- package/dist/strapi/providers/local-destination/assets-destination-writable.js.map +1 -1
- package/dist/strapi/providers/local-destination/assets-destination-writable.mjs +67 -49
- package/dist/strapi/providers/local-destination/assets-destination-writable.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/index.d.ts +1 -1
- package/dist/strapi/providers/local-destination/index.d.ts.map +1 -1
- package/dist/strapi/providers/local-destination/index.js.map +1 -1
- package/dist/strapi/providers/local-destination/index.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/configuration.d.ts +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/configuration.d.ts.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/configuration.js.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/configuration.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/entities.d.ts +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/entities.d.ts.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/entities.js +13 -25
- package/dist/strapi/providers/local-destination/strategies/restore/entities.js.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/entities.mjs +14 -26
- package/dist/strapi/providers/local-destination/strategies/restore/entities.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/index.js +0 -4
- package/dist/strapi/providers/local-destination/strategies/restore/index.js.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/index.mjs +0 -4
- package/dist/strapi/providers/local-destination/strategies/restore/index.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/links.d.ts +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/links.d.ts.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/links.js +22 -3
- package/dist/strapi/providers/local-destination/strategies/restore/links.js.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/links.mjs +22 -3
- package/dist/strapi/providers/local-destination/strategies/restore/links.mjs.map +1 -1
- package/dist/strapi/providers/local-source/assets.d.ts +1 -1
- package/dist/strapi/providers/local-source/assets.d.ts.map +1 -1
- package/dist/strapi/providers/local-source/assets.js.map +1 -1
- package/dist/strapi/providers/local-source/assets.mjs.map +1 -1
- package/dist/strapi/providers/local-source/configuration.js.map +1 -1
- package/dist/strapi/providers/local-source/configuration.mjs.map +1 -1
- package/dist/strapi/providers/local-source/entities.d.ts +3 -1
- package/dist/strapi/providers/local-source/entities.d.ts.map +1 -1
- package/dist/strapi/providers/local-source/entities.js +7 -3
- package/dist/strapi/providers/local-source/entities.js.map +1 -1
- package/dist/strapi/providers/local-source/entities.mjs +7 -3
- package/dist/strapi/providers/local-source/entities.mjs.map +1 -1
- package/dist/strapi/providers/local-source/estimate-asset-totals.d.ts +1 -1
- package/dist/strapi/providers/local-source/estimate-asset-totals.d.ts.map +1 -1
- package/dist/strapi/providers/local-source/estimate-asset-totals.js.map +1 -1
- package/dist/strapi/providers/local-source/estimate-asset-totals.mjs.map +1 -1
- package/dist/strapi/providers/local-source/index.d.ts +2 -2
- package/dist/strapi/providers/local-source/index.d.ts.map +1 -1
- package/dist/strapi/providers/local-source/index.js +6 -1
- package/dist/strapi/providers/local-source/index.js.map +1 -1
- package/dist/strapi/providers/local-source/index.mjs +6 -1
- package/dist/strapi/providers/local-source/index.mjs.map +1 -1
- package/dist/strapi/providers/local-source/links.js.map +1 -1
- package/dist/strapi/providers/local-source/links.mjs.map +1 -1
- package/dist/strapi/providers/remote-destination/index.d.ts +2 -2
- package/dist/strapi/providers/remote-destination/index.d.ts.map +1 -1
- package/dist/strapi/providers/remote-destination/index.js +24 -3
- package/dist/strapi/providers/remote-destination/index.js.map +1 -1
- package/dist/strapi/providers/remote-destination/index.mjs +25 -4
- package/dist/strapi/providers/remote-destination/index.mjs.map +1 -1
- package/dist/strapi/providers/remote-source/index.d.ts +2 -2
- package/dist/strapi/providers/remote-source/index.d.ts.map +1 -1
- package/dist/strapi/providers/remote-source/index.js.map +1 -1
- package/dist/strapi/providers/remote-source/index.mjs.map +1 -1
- package/dist/strapi/providers/utils.d.ts +2 -2
- package/dist/strapi/providers/utils.d.ts.map +1 -1
- package/dist/strapi/providers/utils.js.map +1 -1
- package/dist/strapi/providers/utils.mjs.map +1 -1
- package/dist/strapi/queries/link.d.ts +1 -1
- package/dist/strapi/queries/link.d.ts.map +1 -1
- package/dist/strapi/queries/link.js.map +1 -1
- package/dist/strapi/queries/link.mjs.map +1 -1
- package/dist/strapi/remote/flows/index.d.ts +1 -1
- package/dist/strapi/remote/flows/index.d.ts.map +1 -1
- package/dist/strapi/remote/flows/index.js.map +1 -1
- package/dist/strapi/remote/flows/index.mjs.map +1 -1
- package/dist/strapi/remote/handlers/pull.d.ts +1 -1
- package/dist/strapi/remote/handlers/pull.d.ts.map +1 -1
- package/dist/strapi/remote/handlers/pull.js +3 -3
- package/dist/strapi/remote/handlers/pull.js.map +1 -1
- package/dist/strapi/remote/handlers/pull.mjs +3 -3
- package/dist/strapi/remote/handlers/pull.mjs.map +1 -1
- package/dist/strapi/remote/handlers/push.d.ts +1 -1
- package/dist/strapi/remote/handlers/push.d.ts.map +1 -1
- package/dist/strapi/remote/handlers/push.js +7 -1
- package/dist/strapi/remote/handlers/push.js.map +1 -1
- package/dist/strapi/remote/handlers/push.mjs +7 -1
- package/dist/strapi/remote/handlers/push.mjs.map +1 -1
- package/dist/strapi/remote/handlers/utils.d.ts +1 -1
- package/dist/strapi/remote/handlers/utils.d.ts.map +1 -1
- package/dist/strapi/remote/handlers/utils.js.map +1 -1
- package/dist/strapi/remote/handlers/utils.mjs.map +1 -1
- package/dist/types/common-entities.d.ts +152 -0
- package/dist/types/common-entities.d.ts.map +1 -0
- package/dist/types/encryption.d.ts +11 -0
- package/dist/types/encryption.d.ts.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/providers.d.ts +50 -0
- package/dist/types/providers.d.ts.map +1 -0
- package/dist/types/remote/index.d.ts +2 -0
- package/dist/types/remote/index.d.ts.map +1 -0
- package/dist/types/remote/protocol/auth.d.ts +5 -0
- package/dist/types/remote/protocol/auth.d.ts.map +1 -0
- package/dist/types/remote/protocol/client/commands.d.ts +37 -0
- package/dist/types/remote/protocol/client/commands.d.ts.map +1 -0
- package/dist/types/remote/protocol/client/index.d.ts +9 -0
- package/dist/types/remote/protocol/client/index.d.ts.map +1 -0
- package/dist/types/remote/protocol/client/transfer/action.d.ts +5 -0
- package/dist/types/remote/protocol/client/transfer/action.d.ts.map +1 -0
- package/dist/types/remote/protocol/client/transfer/index.d.ts +12 -0
- package/dist/types/remote/protocol/client/transfer/index.d.ts.map +1 -0
- package/dist/types/remote/protocol/client/transfer/pull.d.ts +25 -0
- package/dist/types/remote/protocol/client/transfer/pull.d.ts.map +1 -0
- package/dist/types/remote/protocol/client/transfer/push.d.ts +29 -0
- package/dist/types/remote/protocol/client/transfer/push.d.ts.map +1 -0
- package/dist/types/remote/protocol/client/transfer/utils.d.ts +49 -0
- package/dist/types/remote/protocol/client/transfer/utils.d.ts.map +1 -0
- package/dist/types/remote/protocol/index.d.ts +4 -0
- package/dist/types/remote/protocol/index.d.ts.map +1 -0
- package/dist/types/remote/protocol/server/error.d.ts +18 -0
- package/dist/types/remote/protocol/server/error.d.ts.map +1 -0
- package/dist/types/remote/protocol/server/index.d.ts +3 -0
- package/dist/types/remote/protocol/server/index.d.ts.map +1 -0
- package/dist/types/remote/protocol/server/messaging.d.ts +37 -0
- package/dist/types/remote/protocol/server/messaging.d.ts.map +1 -0
- package/dist/types/transfer-engine.d.ts +149 -0
- package/dist/types/transfer-engine.d.ts.map +1 -0
- package/dist/types/utils.d.ts +83 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/utils/components.d.ts +21 -1
- package/dist/utils/components.d.ts.map +1 -1
- package/dist/utils/components.js +69 -21
- package/dist/utils/components.js.map +1 -1
- package/dist/utils/components.mjs +70 -22
- package/dist/utils/components.mjs.map +1 -1
- package/dist/utils/encryption/decrypt.d.ts +1 -1
- package/dist/utils/encryption/decrypt.d.ts.map +1 -1
- package/dist/utils/encryption/decrypt.js.map +1 -1
- package/dist/utils/encryption/decrypt.mjs.map +1 -1
- package/dist/utils/encryption/encrypt.d.ts +1 -1
- package/dist/utils/encryption/encrypt.d.ts.map +1 -1
- package/dist/utils/encryption/encrypt.js.map +1 -1
- package/dist/utils/encryption/encrypt.mjs.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +1 -1
- package/dist/utils/middleware.d.ts +1 -1
- package/dist/utils/middleware.d.ts.map +1 -1
- package/dist/utils/middleware.js.map +1 -1
- package/dist/utils/middleware.mjs.map +1 -1
- package/dist/utils/transaction.d.ts +1 -1
- package/dist/utils/transaction.d.ts.map +1 -1
- package/dist/utils/transaction.js.map +1 -1
- package/dist/utils/transaction.mjs.map +1 -1
- package/dist/utils/transfer-asset-chunk.d.ts +22 -0
- package/dist/utils/transfer-asset-chunk.d.ts.map +1 -1
- package/dist/utils/transfer-asset-chunk.js +25 -0
- package/dist/utils/transfer-asset-chunk.js.map +1 -1
- package/dist/utils/transfer-asset-chunk.mjs +25 -1
- package/dist/utils/transfer-asset-chunk.mjs.map +1 -1
- package/package.json +8 -8
|
@@ -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';\nimport { stringifyTransferWebSocketPayload } from '../../utils/transfer-websocket-json';\n\ninterface IDispatcherState {\n transfer?: { kind: Client.TransferKind; id: string };\n}\n\nexport interface RetryMessageOptions {\n retryMessageMaxRetries: number;\n retryMessageTimeout: number;\n}\n\ninterface IDispatchOptions {\n attachTransfer?: boolean;\n /** Merged onto the dispatcher's default `retryMessageOptions` for this message only. */\n retryOverrides?: Partial<RetryMessageOptions>;\n}\n\ntype Dispatch<T> = Omit<T, 'transferID' | 'uuid'>;\n\nexport const createDispatcher = (\n ws: WebSocket,\n retryMessageOptions: 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 = stringifyTransferWebSocketPayload(\n payload as Record<string, unknown>\n );\n ws.send(stringifiedPayload, (error) => {\n if (error) {\n reject(error);\n }\n });\n const { retryMessageMaxRetries, retryMessageTimeout } = {\n ...retryMessageOptions,\n ...options.retryOverrides,\n };\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 dispatchOptions?: Omit<IDispatchOptions, 'attachTransfer'>\n ) => {\n const message: Dispatch<Client.TransferPushMessage> = {\n type: 'transfer',\n kind: 'step',\n ...payload,\n };\n\n return (\n dispatch<T>(message, { attachTransfer: true, ...dispatchOptions }) ?? Promise.resolve(null)\n );\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","stringifyTransferWebSocketPayload","send","error","retryOverrides","sendPeriodically","ProviderError","interval","setInterval","onResponse","raw","response","JSON","parse","toString","clearInterval","details","ProviderTransferError","ProviderValidationError","ProviderInitializationError","data","once","dispatchCommand","dispatchTransferAction","dispatchTransferStep","dispatchOptions","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';\nimport { stringifyTransferWebSocketPayload } from '../../utils/transfer-websocket-json';\n\ninterface IDispatcherState {\n transfer?: { kind: Client.TransferKind; id: string };\n}\n\nexport interface RetryMessageOptions {\n retryMessageMaxRetries: number;\n retryMessageTimeout: number;\n}\n\ninterface IDispatchOptions {\n attachTransfer?: boolean;\n /** Merged onto the dispatcher's default `retryMessageOptions` for this message only. */\n retryOverrides?: Partial<RetryMessageOptions>;\n}\n\ntype Dispatch<T> = Omit<T, 'transferID' | 'uuid'>;\n\nexport const createDispatcher = (\n ws: WebSocket,\n retryMessageOptions: 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 = stringifyTransferWebSocketPayload(\n payload as Record<string, unknown>\n );\n ws.send(stringifiedPayload, (error) => {\n if (error) {\n reject(error);\n }\n });\n const { retryMessageMaxRetries, retryMessageTimeout } = {\n ...retryMessageOptions,\n ...options.retryOverrides,\n };\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 dispatchOptions?: Omit<IDispatchOptions, 'attachTransfer'>\n ) => {\n const message: Dispatch<Client.TransferPushMessage> = {\n type: 'transfer',\n kind: 'step',\n ...payload,\n };\n\n return (\n dispatch<T>(message, { attachTransfer: true, ...dispatchOptions }) ?? Promise.resolve(null)\n );\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","stringifyTransferWebSocketPayload","send","error","retryOverrides","sendPeriodically","ProviderError","interval","setInterval","onResponse","raw","response","JSON","parse","toString","clearInterval","details","ProviderTransferError","ProviderValidationError","ProviderInitializationError","data","once","dispatchCommand","dispatchTransferAction","dispatchTransferStep","dispatchOptions","setTransferProperties","properties","transferKind","connectToWebsocket","address","diagnostics","server","WebSocket","on","_req","res","statusCode","diagnostic","report","err","trimTrailingSlash","input","replace"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Knex } from 'knex';
|
|
2
2
|
import type { Core } from '@strapi/types';
|
|
3
|
-
import { ILink } from '
|
|
3
|
+
import { ILink } from '../../types';
|
|
4
4
|
export declare const createLinkQuery: (strapi: Core.Strapi, trx?: Knex.Transaction) => () => {
|
|
5
5
|
generateAll: (uid: string) => AsyncGenerator<ILink>;
|
|
6
6
|
generateAllForAttribute: (uid: string, fieldName: string) => AsyncGenerator<ILink>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/strapi/queries/link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/strapi/queries/link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,eAAO,MAAM,eAAe,WAAY,KAAK,MAAM,QAAQ,KAAK,WAAW;uBAmMtC,MAAM,KAAG,eAAe,KAAK,CAAC;mCAzLlB,MAAM,aAAa,MAAM,KAAG,eAAe,KAAK,CAAC;mBAyMlE,KAAK;CA+GpC,CAAC;AAEF,eAAO,MAAM,+BAA+B,eAAgB,OAAO,MAAM,EAAE,GAAG,CAAC,wBAY9E,CAAC"}
|
|
@@ -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":"index.d.ts","sourceRoot":"","sources":["../../../../src/strapi/remote/flows/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/strapi/remote/flows/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEjE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAM7D,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;IACzB,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;IACzB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;IAC5B,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,GAAG,IAAI,IAAI,GAAG,IAAI,CAAC;CACpB;AAED,eAAO,MAAM,UAAU,SAAU,SAAS,IAAI,EAAE,KAAG,YA+DlD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/strapi/remote/flows/index.ts"],"sourcesContent":["import type { TransferStage } from '
|
|
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 '
|
|
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;;;;"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { Readable } from 'stream';
|
|
4
4
|
import { Handler } from './abstract';
|
|
5
5
|
import { ILocalStrapiSourceProvider } from '../../providers';
|
|
6
|
-
import type { TransferStage, Protocol } from '
|
|
6
|
+
import type { TransferStage, Protocol } from '../../../types';
|
|
7
7
|
declare const VALID_TRANSFER_ACTIONS: readonly ["bootstrap", "close", "getMetadata", "getSchemas"];
|
|
8
8
|
type PullTransferAction = (typeof VALID_TRANSFER_ACTIONS)[number];
|
|
9
9
|
export interface PullHandler extends Handler {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../../src/strapi/remote/handlers/pull.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAIlC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAMrC,OAAO,EAGL,0BAA0B,EAC3B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAA+B,aAAa,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../../src/strapi/remote/handlers/pull.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAIlC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAMrC,OAAO,EAGL,0BAA0B,EAC3B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAA+B,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI3F,QAAA,MAAM,sBAAsB,8DAA+D,CAAC;AAE5F,KAAK,kBAAkB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,QAAQ,CAAC,EAAE,0BAA0B,CAAC;IAEtC,OAAO,CAAC,EAAE;SAAG,KAAK,IAAI,aAAa,CAAC,CAAC,EAAE,QAAQ;KAAE,CAAC;IAClD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,kBAAkB,CAAC;IAEhF,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACpF,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC1E,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAErF,2BAA2B,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC/D;AAED,eAAO,MAAM,oBAAoB,8FA2X9B,CAAC"}
|
|
@@ -9,12 +9,12 @@ require('fs-extra');
|
|
|
9
9
|
var providers = require('../../../errors/providers.js');
|
|
10
10
|
require('../../queries/entity.js');
|
|
11
11
|
require('lodash/fp');
|
|
12
|
-
require('node:events');
|
|
13
|
-
require('node:stream/promises');
|
|
14
|
-
require('events');
|
|
15
12
|
require('lodash');
|
|
16
13
|
require('@strapi/utils');
|
|
17
14
|
require('../../providers/local-destination/strategies/restore/configuration.js');
|
|
15
|
+
require('node:events');
|
|
16
|
+
require('node:stream/promises');
|
|
17
|
+
require('events');
|
|
18
18
|
var index = require('../../providers/local-source/index.js');
|
|
19
19
|
require('ws');
|
|
20
20
|
var estimateAssetTotals = require('../../providers/local-source/estimate-asset-totals.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sources":["../../../../src/strapi/remote/handlers/pull.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport { randomUUID, createHash } from 'crypto';\nimport type { Core } from '@strapi/types';\n\nimport { Handler } from './abstract';\nimport { handlerControllerFactory, isDataTransferMessage } from './utils';\nimport {\n createTransferAssetStreamChunk,\n transferAssetStreamChunkByteLength,\n} from '../../../utils/transfer-asset-chunk';\nimport {\n createLocalStrapiSourceProvider,\n estimateAssetTotals,\n ILocalStrapiSourceProvider,\n} from '../../providers';\nimport { ProviderTransferError } from '../../../errors/providers';\nimport type { IAsset, StageTotalsEstimate, TransferStage, Protocol } from '../../../../types';\nimport { Client } from '../../../../types/remote/protocol';\n\nconst TRANSFER_KIND = 'pull';\nconst VALID_TRANSFER_ACTIONS = ['bootstrap', 'close', 'getMetadata', 'getSchemas'] as const;\n\ntype PullTransferAction = (typeof VALID_TRANSFER_ACTIONS)[number];\n\nexport interface PullHandler extends Handler {\n provider?: ILocalStrapiSourceProvider;\n\n streams?: { [stage in TransferStage]?: Readable };\n checksumsEnabled?: boolean;\n\n assertValidTransferAction(action: string): asserts action is PullTransferAction;\n\n onTransferMessage(msg: Protocol.Client.TransferMessage): Promise<unknown> | unknown;\n onTransferAction(msg: Protocol.Client.Action): Promise<unknown> | unknown;\n onTransferStep(msg: Protocol.Client.TransferPullMessage): Promise<unknown> | unknown;\n\n createReadableStreamForStep(step: TransferStage): Promise<void>;\n\n flush(stage: TransferStage, id: string): Promise<void> | void;\n}\n\nexport const createPullController = handlerControllerFactory<Partial<PullHandler>>((proto) => ({\n isTransferStarted(this: PullHandler) {\n return proto.isTransferStarted.call(this) && this.provider !== undefined;\n },\n\n verifyAuth(this: PullHandler) {\n return proto.verifyAuth.call(this, TRANSFER_KIND);\n },\n\n cleanup(this: PullHandler) {\n proto.cleanup.call(this);\n\n this.streams = {};\n this.checksumsEnabled = false;\n\n delete this.provider;\n },\n\n onInfo(message) {\n this.diagnostics?.report({\n details: {\n message,\n origin: 'pull-handler',\n createdAt: new Date(),\n },\n kind: 'info',\n });\n },\n onWarning(message) {\n this.diagnostics?.report({\n details: {\n message,\n createdAt: new Date(),\n origin: 'pull-handler',\n },\n kind: 'warning',\n });\n },\n\n onError(error) {\n this.diagnostics?.report({\n details: {\n message: error.message,\n error,\n createdAt: new Date(),\n name: error.name,\n severity: 'fatal',\n },\n kind: 'error',\n });\n },\n\n assertValidTransferAction(this: PullHandler, action) {\n // Abstract the constant to string[] to allow looser check on the given action\n const validActions = VALID_TRANSFER_ACTIONS as unknown as string[];\n\n if (validActions.includes(action)) {\n return;\n }\n\n throw new ProviderTransferError(`Invalid action provided: \"${action}\"`, {\n action,\n validActions: Object.keys(VALID_TRANSFER_ACTIONS),\n });\n },\n\n async onMessage(this: PullHandler, raw) {\n const msg = JSON.parse(raw.toString());\n\n if (!isDataTransferMessage(msg)) {\n return;\n }\n\n if (!msg.uuid) {\n await this.respond(undefined, new Error('Missing uuid in message'));\n }\n\n if (proto.hasUUID(msg.uuid)) {\n const previousResponse = proto.response;\n if (previousResponse?.uuid === msg.uuid) {\n await this.respond(previousResponse?.uuid, previousResponse.e, previousResponse.data);\n }\n return;\n }\n\n const { uuid, type } = msg;\n proto.addUUID(uuid);\n // Regular command message (init, end, status)\n if (type === 'command') {\n const { command } = msg;\n this.onInfo(`received command:${command} uuid:${uuid}`);\n await this.executeAndRespond(uuid, () => {\n this.assertValidTransferCommand(command);\n\n // The status command don't have params\n if (command === 'status') {\n return this.status();\n }\n\n return this[command](msg.params);\n });\n }\n\n // Transfer message (the transfer must be init first)\n else if (type === 'transfer') {\n this.onInfo(`received transfer action:${msg.action} step:${msg.kind} uuid:${uuid}`);\n await this.executeAndRespond(uuid, async () => {\n await this.verifyAuth();\n\n this.assertValidTransfer();\n\n return this.onTransferMessage(msg);\n });\n }\n\n // Invalid messages\n else {\n await this.respond(uuid, new Error('Bad Request'));\n }\n },\n\n async onTransferMessage(this: PullHandler, msg) {\n const { kind } = msg;\n\n if (kind === 'action') {\n return this.onTransferAction(msg);\n }\n\n if (kind === 'step') {\n return this.onTransferStep(msg as Protocol.Client.TransferPullMessage);\n }\n },\n\n async onTransferAction(this: PullHandler, msg) {\n const { action } = msg;\n\n this.assertValidTransferAction(action);\n\n if (action === 'bootstrap') {\n return this.provider?.[action](this.diagnostics);\n }\n return this.provider?.[action]();\n },\n\n async flush(this: PullHandler, stage: Client.TransferPullStep, id) {\n type Stage = typeof stage;\n const batchSize = 1024 * 1024;\n let batch = [] as Client.GetTransferPullStreamData<Stage>;\n const stream = this.streams?.[stage];\n\n const batchLength = () => Buffer.byteLength(JSON.stringify(batch));\n\n const maybeConfirm = async (data: any) => {\n try {\n await this.confirm(data);\n } catch (error) {\n // Handle the error, log it, or take other appropriate actions\n\n strapi?.log.error(\n `[Data transfer] Message confirmation failed: ${(error as Error)?.message}`\n );\n this.onError(error as Error);\n }\n };\n\n const sendBatch = async () => {\n await this.confirm({\n type: 'transfer',\n data: batch,\n ended: false,\n error: null,\n id,\n });\n batch = [];\n };\n\n try {\n if (!stream) {\n throw new ProviderTransferError(`No available stream found for ${stage}`);\n }\n\n for await (const chunk of stream) {\n if (stage !== 'assets') {\n batch.push(chunk);\n if (batchLength() >= batchSize) {\n await sendBatch();\n }\n } else {\n await this.confirm({\n type: 'transfer',\n data: [chunk],\n ended: false,\n error: null,\n id,\n });\n }\n }\n\n if (batch.length > 0 && stage !== 'assets') {\n await sendBatch();\n }\n await this.confirm({ type: 'transfer', data: null, ended: true, error: null, id });\n } catch (e) {\n // TODO: if this confirm fails, can we abort the whole transfer?\n await maybeConfirm({ type: 'transfer', data: null, ended: true, error: e, id });\n }\n },\n\n async onTransferStep(this: PullHandler, msg) {\n const { step, action } = msg;\n\n if (action === 'start') {\n if (this.streams?.[step] instanceof Readable) {\n throw new Error('Stream already created, something went wrong');\n }\n\n const flushUUID = randomUUID();\n\n let totals: StageTotalsEstimate | undefined;\n if (step === 'assets') {\n totals = await estimateAssetTotals(strapi as Core.Strapi);\n }\n await this.createReadableStreamForStep(step);\n Promise.resolve(this.flush(step, flushUUID)).catch((err: unknown) => {\n this.onError(err instanceof Error ? err : new Error(String(err)));\n });\n\n return {\n ok: true,\n id: flushUUID,\n ...(totals !== undefined ? { totals } : {}),\n };\n }\n\n if (action === 'end') {\n const stream = this.streams?.[step];\n\n if (stream?.readableEnded === false) {\n await new Promise((resolve) => {\n stream?.on('close', resolve).destroy();\n });\n }\n\n delete this.streams?.[step];\n\n return { ok: true };\n }\n },\n\n async createReadableStreamForStep(this: PullHandler, step: Exclude<TransferStage, 'schemas'>) {\n const mapper = {\n entities: () => this.provider?.createEntitiesReadStream(),\n links: () => this.provider?.createLinksReadStream(),\n configuration: () => this.provider?.createConfigurationReadStream(),\n assets: () => {\n const assets = this.provider?.createAssetsReadStream();\n let batch: Protocol.Client.TransferAssetFlow[] = [];\n const checksumsEnabled = this.checksumsEnabled === true;\n\n const batchLength = () => {\n return batch.reduce((acc, chunk) => acc + transferAssetStreamChunkByteLength(chunk), 0);\n };\n\n const BATCH_MAX_SIZE = 1024 * 1024; // 1MB\n\n if (!assets) {\n throw new Error('Assets read stream could not be created');\n }\n /**\n * Generates batches of 1MB of data from the assets stream to avoid\n * sending too many small chunks\n *\n * @param stream Assets stream from the local source provider\n */\n async function* generator(stream: Readable) {\n let hasStarted = false;\n let assetID = '';\n let assetChecksum: ReturnType<typeof createHash> | undefined;\n\n for await (const chunk of stream) {\n const { stream: assetStream, ...assetData } = chunk as IAsset;\n if (!hasStarted) {\n assetID = randomUUID();\n assetChecksum = checksumsEnabled ? createHash('sha256') : undefined;\n // Start the transfer of a new asset\n batch.push({ action: 'start', assetID, data: assetData });\n hasStarted = true;\n }\n\n for await (const assetChunk of assetStream) {\n assetChecksum?.update(assetChunk);\n batch.push(createTransferAssetStreamChunk(assetID, assetChunk));\n\n // if the batch size is bigger than BATCH_MAX_SIZE stream the batch\n if (batchLength() >= BATCH_MAX_SIZE) {\n yield batch;\n batch = [];\n }\n }\n\n // All the asset data has been streamed and gets ready for the next one\n hasStarted = false;\n batch.push({\n action: 'end',\n assetID,\n ...(assetChecksum\n ? { checksum: { algorithm: 'sha256' as const, value: assetChecksum.digest('hex') } }\n : {}),\n });\n yield batch;\n batch = [];\n }\n }\n\n return Readable.from(generator(assets));\n },\n };\n\n if (!(step in mapper)) {\n throw new Error('Invalid transfer step, impossible to create a stream');\n }\n\n if (!this.streams) {\n throw new Error('Invalid transfer state');\n }\n\n this.streams[step] = await mapper[step]();\n },\n\n // Commands\n async init(this: PullHandler, params?: Protocol.Client.GetCommandParams<'init'>) {\n if (this.transferID || this.provider) {\n throw new Error('Transfer already in progress');\n }\n await this.verifyAuth();\n\n this.transferID = randomUUID();\n this.startedAt = Date.now();\n this.checksumsEnabled = params?.checksums === true;\n\n this.streams = {};\n\n this.provider = createLocalStrapiSourceProvider({\n autoDestroy: false,\n getStrapi: () => strapi as Core.Strapi,\n });\n\n return { transferID: this.transferID, checksums: true };\n },\n\n async end(\n this: PullHandler,\n params: Protocol.Client.GetCommandParams<'end'>\n ): Promise<Protocol.Server.Payload<Protocol.Server.EndMessage>> {\n await this.verifyAuth();\n\n if (this.transferID !== params?.transferID) {\n throw new ProviderTransferError('Bad transfer ID provided');\n }\n\n this.cleanup();\n\n return { ok: true };\n },\n\n async status(this: PullHandler) {\n const isStarted = this.isTransferStarted();\n\n if (!isStarted) {\n const startedAt = this.startedAt as number;\n return {\n active: true,\n kind: TRANSFER_KIND,\n startedAt,\n elapsed: Date.now() - startedAt,\n };\n }\n return { active: false, kind: null, elapsed: null, startedAt: null };\n },\n}));\n"],"names":["TRANSFER_KIND","VALID_TRANSFER_ACTIONS","createPullController","handlerControllerFactory","proto","isTransferStarted","call","provider","undefined","verifyAuth","cleanup","streams","checksumsEnabled","onInfo","message","diagnostics","report","details","origin","createdAt","Date","kind","onWarning","onError","error","name","severity","assertValidTransferAction","action","validActions","includes","ProviderTransferError","Object","keys","onMessage","raw","msg","JSON","parse","toString","isDataTransferMessage","uuid","respond","Error","hasUUID","previousResponse","response","e","data","type","addUUID","command","executeAndRespond","assertValidTransferCommand","status","params","assertValidTransfer","onTransferMessage","onTransferAction","onTransferStep","flush","stage","id","batchSize","batch","stream","batchLength","Buffer","byteLength","stringify","maybeConfirm","confirm","strapi","log","sendBatch","ended","chunk","push","length","step","Readable","flushUUID","randomUUID","totals","estimateAssetTotals","createReadableStreamForStep","Promise","resolve","catch","err","String","ok","readableEnded","on","destroy","mapper","entities","createEntitiesReadStream","links","createLinksReadStream","configuration","createConfigurationReadStream","assets","createAssetsReadStream","reduce","acc","transferAssetStreamChunkByteLength","BATCH_MAX_SIZE","generator","hasStarted","assetID","assetChecksum","assetStream","assetData","createHash","assetChunk","update","createTransferAssetStreamChunk","checksum","algorithm","value","digest","from","init","transferID","startedAt","now","checksums","createLocalStrapiSourceProvider","autoDestroy","getStrapi","end","isStarted","active","elapsed"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pull.js","sources":["../../../../src/strapi/remote/handlers/pull.ts"],"sourcesContent":["import { Readable } from 'stream';\nimport { randomUUID, createHash } from 'crypto';\nimport type { Core } from '@strapi/types';\n\nimport { Handler } from './abstract';\nimport { handlerControllerFactory, isDataTransferMessage } from './utils';\nimport {\n createTransferAssetStreamChunk,\n transferAssetStreamChunkByteLength,\n} from '../../../utils/transfer-asset-chunk';\nimport {\n createLocalStrapiSourceProvider,\n estimateAssetTotals,\n ILocalStrapiSourceProvider,\n} from '../../providers';\nimport { ProviderTransferError } from '../../../errors/providers';\nimport type { IAsset, StageTotalsEstimate, TransferStage, Protocol } from '../../../types';\nimport { Client } from '../../../types/remote/protocol';\n\nconst TRANSFER_KIND = 'pull';\nconst VALID_TRANSFER_ACTIONS = ['bootstrap', 'close', 'getMetadata', 'getSchemas'] as const;\n\ntype PullTransferAction = (typeof VALID_TRANSFER_ACTIONS)[number];\n\nexport interface PullHandler extends Handler {\n provider?: ILocalStrapiSourceProvider;\n\n streams?: { [stage in TransferStage]?: Readable };\n checksumsEnabled?: boolean;\n\n assertValidTransferAction(action: string): asserts action is PullTransferAction;\n\n onTransferMessage(msg: Protocol.Client.TransferMessage): Promise<unknown> | unknown;\n onTransferAction(msg: Protocol.Client.Action): Promise<unknown> | unknown;\n onTransferStep(msg: Protocol.Client.TransferPullMessage): Promise<unknown> | unknown;\n\n createReadableStreamForStep(step: TransferStage): Promise<void>;\n\n flush(stage: TransferStage, id: string): Promise<void> | void;\n}\n\nexport const createPullController = handlerControllerFactory<Partial<PullHandler>>((proto) => ({\n isTransferStarted(this: PullHandler) {\n return proto.isTransferStarted.call(this) && this.provider !== undefined;\n },\n\n verifyAuth(this: PullHandler) {\n return proto.verifyAuth.call(this, TRANSFER_KIND);\n },\n\n cleanup(this: PullHandler) {\n proto.cleanup.call(this);\n\n this.streams = {};\n this.checksumsEnabled = false;\n\n delete this.provider;\n },\n\n onInfo(message) {\n this.diagnostics?.report({\n details: {\n message,\n origin: 'pull-handler',\n createdAt: new Date(),\n },\n kind: 'info',\n });\n },\n onWarning(message) {\n this.diagnostics?.report({\n details: {\n message,\n createdAt: new Date(),\n origin: 'pull-handler',\n },\n kind: 'warning',\n });\n },\n\n onError(error) {\n this.diagnostics?.report({\n details: {\n message: error.message,\n error,\n createdAt: new Date(),\n name: error.name,\n severity: 'fatal',\n },\n kind: 'error',\n });\n },\n\n assertValidTransferAction(this: PullHandler, action) {\n // Abstract the constant to string[] to allow looser check on the given action\n const validActions = VALID_TRANSFER_ACTIONS as unknown as string[];\n\n if (validActions.includes(action)) {\n return;\n }\n\n throw new ProviderTransferError(`Invalid action provided: \"${action}\"`, {\n action,\n validActions: Object.keys(VALID_TRANSFER_ACTIONS),\n });\n },\n\n async onMessage(this: PullHandler, raw) {\n const msg = JSON.parse(raw.toString());\n\n if (!isDataTransferMessage(msg)) {\n return;\n }\n\n if (!msg.uuid) {\n await this.respond(undefined, new Error('Missing uuid in message'));\n }\n\n if (proto.hasUUID(msg.uuid)) {\n const previousResponse = proto.response;\n if (previousResponse?.uuid === msg.uuid) {\n await this.respond(previousResponse?.uuid, previousResponse.e, previousResponse.data);\n }\n return;\n }\n\n const { uuid, type } = msg;\n proto.addUUID(uuid);\n // Regular command message (init, end, status)\n if (type === 'command') {\n const { command } = msg;\n this.onInfo(`received command:${command} uuid:${uuid}`);\n await this.executeAndRespond(uuid, () => {\n this.assertValidTransferCommand(command);\n\n // The status command don't have params\n if (command === 'status') {\n return this.status();\n }\n\n return this[command](msg.params);\n });\n }\n\n // Transfer message (the transfer must be init first)\n else if (type === 'transfer') {\n this.onInfo(`received transfer action:${msg.action} step:${msg.kind} uuid:${uuid}`);\n await this.executeAndRespond(uuid, async () => {\n await this.verifyAuth();\n\n this.assertValidTransfer();\n\n return this.onTransferMessage(msg);\n });\n }\n\n // Invalid messages\n else {\n await this.respond(uuid, new Error('Bad Request'));\n }\n },\n\n async onTransferMessage(this: PullHandler, msg) {\n const { kind } = msg;\n\n if (kind === 'action') {\n return this.onTransferAction(msg);\n }\n\n if (kind === 'step') {\n return this.onTransferStep(msg as Protocol.Client.TransferPullMessage);\n }\n },\n\n async onTransferAction(this: PullHandler, msg) {\n const { action } = msg;\n\n this.assertValidTransferAction(action);\n\n if (action === 'bootstrap') {\n return this.provider?.[action](this.diagnostics);\n }\n return this.provider?.[action]();\n },\n\n async flush(this: PullHandler, stage: Client.TransferPullStep, id) {\n type Stage = typeof stage;\n const batchSize = 1024 * 1024;\n let batch = [] as Client.GetTransferPullStreamData<Stage>;\n const stream = this.streams?.[stage];\n\n const batchLength = () => Buffer.byteLength(JSON.stringify(batch));\n\n const maybeConfirm = async (data: any) => {\n try {\n await this.confirm(data);\n } catch (error) {\n // Handle the error, log it, or take other appropriate actions\n\n strapi?.log.error(\n `[Data transfer] Message confirmation failed: ${(error as Error)?.message}`\n );\n this.onError(error as Error);\n }\n };\n\n const sendBatch = async () => {\n await this.confirm({\n type: 'transfer',\n data: batch,\n ended: false,\n error: null,\n id,\n });\n batch = [];\n };\n\n try {\n if (!stream) {\n throw new ProviderTransferError(`No available stream found for ${stage}`);\n }\n\n for await (const chunk of stream) {\n if (stage !== 'assets') {\n batch.push(chunk);\n if (batchLength() >= batchSize) {\n await sendBatch();\n }\n } else {\n await this.confirm({\n type: 'transfer',\n data: [chunk],\n ended: false,\n error: null,\n id,\n });\n }\n }\n\n if (batch.length > 0 && stage !== 'assets') {\n await sendBatch();\n }\n await this.confirm({ type: 'transfer', data: null, ended: true, error: null, id });\n } catch (e) {\n // TODO: if this confirm fails, can we abort the whole transfer?\n await maybeConfirm({ type: 'transfer', data: null, ended: true, error: e, id });\n }\n },\n\n async onTransferStep(this: PullHandler, msg) {\n const { step, action } = msg;\n\n if (action === 'start') {\n if (this.streams?.[step] instanceof Readable) {\n throw new Error('Stream already created, something went wrong');\n }\n\n const flushUUID = randomUUID();\n\n let totals: StageTotalsEstimate | undefined;\n if (step === 'assets') {\n totals = await estimateAssetTotals(strapi as Core.Strapi);\n }\n await this.createReadableStreamForStep(step);\n Promise.resolve(this.flush(step, flushUUID)).catch((err: unknown) => {\n this.onError(err instanceof Error ? err : new Error(String(err)));\n });\n\n return {\n ok: true,\n id: flushUUID,\n ...(totals !== undefined ? { totals } : {}),\n };\n }\n\n if (action === 'end') {\n const stream = this.streams?.[step];\n\n if (stream?.readableEnded === false) {\n await new Promise((resolve) => {\n stream?.on('close', resolve).destroy();\n });\n }\n\n delete this.streams?.[step];\n\n return { ok: true };\n }\n },\n\n async createReadableStreamForStep(this: PullHandler, step: Exclude<TransferStage, 'schemas'>) {\n const mapper = {\n entities: () => this.provider?.createEntitiesReadStream(),\n links: () => this.provider?.createLinksReadStream(),\n configuration: () => this.provider?.createConfigurationReadStream(),\n assets: () => {\n const assets = this.provider?.createAssetsReadStream();\n let batch: Protocol.Client.TransferAssetFlow[] = [];\n const checksumsEnabled = this.checksumsEnabled === true;\n\n const batchLength = () => {\n return batch.reduce((acc, chunk) => acc + transferAssetStreamChunkByteLength(chunk), 0);\n };\n\n const BATCH_MAX_SIZE = 1024 * 1024; // 1MB\n\n if (!assets) {\n throw new Error('Assets read stream could not be created');\n }\n /**\n * Generates batches of 1MB of data from the assets stream to avoid\n * sending too many small chunks\n *\n * @param stream Assets stream from the local source provider\n */\n async function* generator(stream: Readable) {\n let hasStarted = false;\n let assetID = '';\n let assetChecksum: ReturnType<typeof createHash> | undefined;\n\n for await (const chunk of stream) {\n const { stream: assetStream, ...assetData } = chunk as IAsset;\n if (!hasStarted) {\n assetID = randomUUID();\n assetChecksum = checksumsEnabled ? createHash('sha256') : undefined;\n // Start the transfer of a new asset\n batch.push({ action: 'start', assetID, data: assetData });\n hasStarted = true;\n }\n\n for await (const assetChunk of assetStream) {\n assetChecksum?.update(assetChunk);\n batch.push(createTransferAssetStreamChunk(assetID, assetChunk));\n\n // if the batch size is bigger than BATCH_MAX_SIZE stream the batch\n if (batchLength() >= BATCH_MAX_SIZE) {\n yield batch;\n batch = [];\n }\n }\n\n // All the asset data has been streamed and gets ready for the next one\n hasStarted = false;\n batch.push({\n action: 'end',\n assetID,\n ...(assetChecksum\n ? { checksum: { algorithm: 'sha256' as const, value: assetChecksum.digest('hex') } }\n : {}),\n });\n yield batch;\n batch = [];\n }\n }\n\n return Readable.from(generator(assets));\n },\n };\n\n if (!(step in mapper)) {\n throw new Error('Invalid transfer step, impossible to create a stream');\n }\n\n if (!this.streams) {\n throw new Error('Invalid transfer state');\n }\n\n this.streams[step] = await mapper[step]();\n },\n\n // Commands\n async init(this: PullHandler, params?: Protocol.Client.GetCommandParams<'init'>) {\n if (this.transferID || this.provider) {\n throw new Error('Transfer already in progress');\n }\n await this.verifyAuth();\n\n this.transferID = randomUUID();\n this.startedAt = Date.now();\n this.checksumsEnabled = params?.checksums === true;\n\n this.streams = {};\n\n this.provider = createLocalStrapiSourceProvider({\n autoDestroy: false,\n getStrapi: () => strapi as Core.Strapi,\n });\n\n return { transferID: this.transferID, checksums: true };\n },\n\n async end(\n this: PullHandler,\n params: Protocol.Client.GetCommandParams<'end'>\n ): Promise<Protocol.Server.Payload<Protocol.Server.EndMessage>> {\n await this.verifyAuth();\n\n if (this.transferID !== params?.transferID) {\n throw new ProviderTransferError('Bad transfer ID provided');\n }\n\n this.cleanup();\n\n return { ok: true };\n },\n\n async status(this: PullHandler) {\n const isStarted = this.isTransferStarted();\n\n if (!isStarted) {\n const startedAt = this.startedAt as number;\n return {\n active: true,\n kind: TRANSFER_KIND,\n startedAt,\n elapsed: Date.now() - startedAt,\n };\n }\n return { active: false, kind: null, elapsed: null, startedAt: null };\n },\n}));\n"],"names":["TRANSFER_KIND","VALID_TRANSFER_ACTIONS","createPullController","handlerControllerFactory","proto","isTransferStarted","call","provider","undefined","verifyAuth","cleanup","streams","checksumsEnabled","onInfo","message","diagnostics","report","details","origin","createdAt","Date","kind","onWarning","onError","error","name","severity","assertValidTransferAction","action","validActions","includes","ProviderTransferError","Object","keys","onMessage","raw","msg","JSON","parse","toString","isDataTransferMessage","uuid","respond","Error","hasUUID","previousResponse","response","e","data","type","addUUID","command","executeAndRespond","assertValidTransferCommand","status","params","assertValidTransfer","onTransferMessage","onTransferAction","onTransferStep","flush","stage","id","batchSize","batch","stream","batchLength","Buffer","byteLength","stringify","maybeConfirm","confirm","strapi","log","sendBatch","ended","chunk","push","length","step","Readable","flushUUID","randomUUID","totals","estimateAssetTotals","createReadableStreamForStep","Promise","resolve","catch","err","String","ok","readableEnded","on","destroy","mapper","entities","createEntitiesReadStream","links","createLinksReadStream","configuration","createConfigurationReadStream","assets","createAssetsReadStream","reduce","acc","transferAssetStreamChunkByteLength","BATCH_MAX_SIZE","generator","hasStarted","assetID","assetChecksum","assetStream","assetData","createHash","assetChunk","update","createTransferAssetStreamChunk","checksum","algorithm","value","digest","from","init","transferID","startedAt","now","checksums","createLocalStrapiSourceProvider","autoDestroy","getStrapi","end","isStarted","active","elapsed"],"mappings":"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"}
|
|
@@ -7,12 +7,12 @@ import 'fs-extra';
|
|
|
7
7
|
import { ProviderTransferError } from '../../../errors/providers.mjs';
|
|
8
8
|
import '../../queries/entity.mjs';
|
|
9
9
|
import 'lodash/fp';
|
|
10
|
-
import 'node:events';
|
|
11
|
-
import 'node:stream/promises';
|
|
12
|
-
import 'events';
|
|
13
10
|
import 'lodash';
|
|
14
11
|
import '@strapi/utils';
|
|
15
12
|
import '../../providers/local-destination/strategies/restore/configuration.mjs';
|
|
13
|
+
import 'node:events';
|
|
14
|
+
import 'node:stream/promises';
|
|
15
|
+
import 'events';
|
|
16
16
|
import { createLocalStrapiSourceProvider } from '../../providers/local-source/index.mjs';
|
|
17
17
|
import 'ws';
|
|
18
18
|
import { estimateAssetTotals } from '../../providers/local-source/estimate-asset-totals.mjs';
|