actions/create-or-append-to-a-text-file/create-or-append-to-a-text-file.mjs
import dropbox from "../../dropbox.app.mjs"; export default { name: "Create or Append to a Text File", description: "Adds a new line to an existing text file, or creates a file if it doesn't exist. [See the documentation](https://dropbox.github.io/dropbox-sdk-js/Dropbox.html#filesUpload__anchor)", key: "dropbox-create-or-append-to-a-text-file", version: "0.0.13", annotations: { destructiveHint: false, openWorldHint: true, readOnlyHint: false, }, type: "action", props: { dropbox, name: { type: "string", label: "File Name", description: "Your new file name", }, path: { propDefinition: [ dropbox, "path", () => ({ filter: ({ metadata: { metadata: { [".tag"]: type } } }) => type === "folder", }), ], optional: true, description: "Type the folder name to search for it in the user's Dropbox. If not filled, it will be created in the root folder.", }, content: { type: "string", label: "Content", description: "The content to be written", }, }, methods: { async getFileInfo(path, content) { let file; try { file = await this.dropbox.downloadFile({ path, }); } catch { file = null; } return { fileExists: !!(file?.result?.fileBinary), content: file?.result?.fileBinary ? `${file.result.fileBinary.toString()}\n${content}` : content, }; }, getArgs(fileExists, content, normalizedPath) { return { contents: Buffer.from(content), path: normalizedPath, autorename: !fileExists, mode: fileExists ? { ".tag": "overwrite", } : undefined, }; }, }, async run({ $ }) { const { name, content, path, } = this; const normalizedPath = this.dropbox.getNormalizedPath(path, true) + name; const { fileExists, content: normalizedContent, } = await this.getFileInfo(normalizedPath, content); const res = await this.dropbox.uploadFile(this.getArgs( fileExists, normalizedContent, normalizedPath, )); $.export("$summary", fileExists ? `Text successfully appended to the file "${name}"` : `Text file successfully created in the path "${path?.label || path}"`); return res; }, };