Skip to content

Repository files navigation

Image of node-temp logo

Temporary files, directories, and streams for Node.js.

Handles generating a unique file/directory name under the appropriate system temporary directory, changing the file to an appropriate mode, and supports automatic removal (if asked)

temp has a similar API to the fs module.

Node.js Compatibility

Supports v6.0.0+.

Build Status

Please let me know if you have problems running it on a later version of Node.js or have platform-specific problems.

Installation

Install it using npm:

$ npm install temp

Or get it directly from: http://github.com/bruce/node-temp

Synopsis

You can create temporary files with open and openSync, temporary directories with mkdir and mkdirSync, or you can get a unique name in the system temporary directory with path.

See the API section for more details on the API of temp.

Working copies of the following examples can be found under the examples directory.

Temporary Files (open and openSync)

To create a temporary file use open or openSync, passing them an optional prefix, suffix, or both (see below for details on affixes). The object passed to the callback (or returned) has path and fd keys:

{path: "/path/to/file",,fd: theFileDescriptor}

In this example we write to a temporary file and call out to grep and wc -l to determine the number of time foo occurs in the text. The temporary file is chmod'd 0600 and cleaned up automatically when the process at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// Fake datavarmyData="foo\nbar\nfoo\nbaz";// Process the data (note: error handling omitted)temp.open('myprefix',function(err,info){if(!err){fs.write(info.fd,myData,(err)=>{console.log(err);});fs.close(info.fd,function(err){exec("grep foo '"+info.path+"' | wc -l",function(err,stdout){util.puts(stdout.trim());});});}});

Want Cleanup? Make sure you ask for it. (track)

As noted in the example above, if you want temp to track the files and directories it creates and handle removing those files and directories on exit, you must call track(). The track() function is chainable, and it's recommended that you call it when requiring the module.

vartemp=require("temp").track();

Why is this necessary? In pre-0.6 versions of temp, tracking was automatic. While this works great for scripts and Grunt tasks, it's not so great for long-running server processes. Since that's arguably what Node.js is for, you have to opt-in to tracking.

But it's easy.

Cleanup anytime (cleanup, cleanupSync)

When tracking, you can run cleanup() and cleanupSync() anytime (cleanupSync() will be run for you on process exit). An object will be returned (or passed to the callback) with cleanup counts and the file/directory tracking lists will be reset.

>temp.cleanupSync();{files: 1,dirs: 0}
>temp.cleanup(function(err,stats){console.log(stats);});{files: 1,dirs: 0}

Note: If you're not tracking, an error ("not tracking") will be passed to the callback.

Temporary Directories (mkdir, mkdirSync)

To create a temporary directory, use mkdir or mkdirSync, passing it an optional prefix, suffix, or both (see below for details on affixes).

In this example we create a temporary directory, write to a file within it, call out to an external program to create a PDF, and read the result. While the external process creates a lot of additional files, the temporary directory is removed automatically at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),path=require('path'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// For use with ConTeXt, http://wiki.contextgarden.netvarmyData="\\starttext\nHello World\n\\stoptext";temp.mkdir('pdfcreator',function(err,dirPath){varinputPath=path.join(dirPath,'input.tex')fs.writeFile(inputPath,myData,function(err){if(err)throwerr;process.chdir(dirPath);exec("texexec '"+inputPath+"'",function(err){if(err)throwerr;fs.readFile(path.join(dirPath,'input.pdf'),function(err,data){if(err)throwerr;sys.print(data);});});});});

Temporary Streams (createWriteStream)

To create a temporary WriteStream, use 'createWriteStream', which sits on top of fs.createWriteStream. The return value is a fs.WriteStream with a path property containing the temporary file path for the stream. The path is registered for removal when temp.cleanup is called (because temp.track() is called).

vartemp=require('temp');// Automatically track and cleanup files at exittemp.track();varstream=temp.createWriteStream();// stream.path contains the temporary file path for the streamstream.write("Some data");// Maybe do some other thingsstream.end();

Affixes (options)

You can provide custom prefixes and suffixes when creating temporary files and directories. If you provide a string, it is used as the prefix for the temporary name. If you provide an object with prefix, suffix and dir keys, they are used for the temporary name.

Here are some examples:

  • "aprefix": A simple prefix, prepended to the filename; this is shorthand for:
  • {prefix: "aprefix"}: A simple prefix, prepended to the filename
  • {suffix: ".asuffix"}: A suffix, appended to the filename (especially useful when the file needs to be named with specific extension for use with an external program).
  • {prefix: "myprefix", suffix: "mysuffix"}: Customize both affixes
  • {dir: path.join(os.tmpdir(), "myapp")}: default prefix and suffix within a new temporary directory.
  • null: Use the defaults for files and directories (prefixes "f-" and "d-", respectively, no suffixes).

In this simple example we read a pdf, write it to a temporary file with a .pdf extension, and close it.

varfs=require('fs'),temp=require('temp');fs.readFile('/path/to/source.pdf',function(err,data){temp.open({suffix: '.pdf'},function(err,info){if(err)throwerr;fs.write(info.fd,data,(err)=>{console.log(err)});fs.close(info.fd,function(err){if(err)throwerr;// Do something with the file});});});

Just a path, please (path)

If you just want a unique name in your temporary directory, use path:

varfs=require('fs');vartempName=temp.path({suffix: '.pdf'});// Do something with tempName

Note: The file isn't created for you, and the mode is not changed -- and it will not be removed automatically at exit. If you use path, it's all up to you.

API

interfaceOpenFile{path: string;fd: number;}interfaceStats{files: number;dirs: number;}interfaceAffixOptions{prefix?: string;suffix?: string;dir?: string;}functiontrack(value?: boolean): typeoftemp;functionmkdir(affixes: string|AffixOptions|undefined,callback: (err: any,dirPath: string)=>void): void;functionmkdir(affixes?: string|AffixOptions): Promise<string>;functionmkdirSync(affixes?: string|AffixOptions): string;functionopen(affixes: string|AffixOptions|undefined,callback: (err: any,result: OpenFile)=>void): void;functionopen(affixes?: string|AffixOptions): Promise<OpenFile>;functionopenSync(affixes?: string|AffixOptions): OpenFile;functionpath(affixes?: string|AffixOptions,defaultPrefix?: string): string;functioncleanup(callback: (err: any,result: Stats)=>void): void;functioncleanup(): Promise<Stats>;functioncleanupSync(): boolean|Stats;functioncreateWriteStream(affixes?: string|AffixOptions): fs.WriteStream;

Testing

$ npm test

Contributing

You can find the repository at: http://github.com/bruce/node-temp

Issues/Feature Requests can be submitted at: http://github.com/bruce/node-temp/issues

I'd really like to hear your feedback, and I'd love to receive your pull-requests!

Copyright

Copyright (c) 2010-2014 Bruce Williams. This software is licensed under the MIT License, see LICENSE for details.

About

Temporary File, Directory, and Stream support for Node.js

Resources

Stars

450 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - bruce/node-temp: Temporary File, Directory, and Stream support for Node.js · GitHub
Skip to content

Repository files navigation

Image of node-temp logo

Temporary files, directories, and streams for Node.js.

Handles generating a unique file/directory name under the appropriate system temporary directory, changing the file to an appropriate mode, and supports automatic removal (if asked)

temp has a similar API to the fs module.

Node.js Compatibility

Supports v6.0.0+.

Build Status

Please let me know if you have problems running it on a later version of Node.js or have platform-specific problems.

Installation

Install it using npm:

$ npm install temp

Or get it directly from: http://github.com/bruce/node-temp

Synopsis

You can create temporary files with open and openSync, temporary directories with mkdir and mkdirSync, or you can get a unique name in the system temporary directory with path.

See the API section for more details on the API of temp.

Working copies of the following examples can be found under the examples directory.

Temporary Files (open and openSync)

To create a temporary file use open or openSync, passing them an optional prefix, suffix, or both (see below for details on affixes). The object passed to the callback (or returned) has path and fd keys:

{path: "/path/to/file",,fd: theFileDescriptor}

In this example we write to a temporary file and call out to grep and wc -l to determine the number of time foo occurs in the text. The temporary file is chmod'd 0600 and cleaned up automatically when the process at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// Fake datavarmyData="foo\nbar\nfoo\nbaz";// Process the data (note: error handling omitted)temp.open('myprefix',function(err,info){if(!err){fs.write(info.fd,myData,(err)=>{console.log(err);});fs.close(info.fd,function(err){exec("grep foo '"+info.path+"' | wc -l",function(err,stdout){util.puts(stdout.trim());});});}});

Want Cleanup? Make sure you ask for it. (track)

As noted in the example above, if you want temp to track the files and directories it creates and handle removing those files and directories on exit, you must call track(). The track() function is chainable, and it's recommended that you call it when requiring the module.

vartemp=require("temp").track();

Why is this necessary? In pre-0.6 versions of temp, tracking was automatic. While this works great for scripts and Grunt tasks, it's not so great for long-running server processes. Since that's arguably what Node.js is for, you have to opt-in to tracking.

But it's easy.

Cleanup anytime (cleanup, cleanupSync)

When tracking, you can run cleanup() and cleanupSync() anytime (cleanupSync() will be run for you on process exit). An object will be returned (or passed to the callback) with cleanup counts and the file/directory tracking lists will be reset.

>temp.cleanupSync();{files: 1,dirs: 0}
>temp.cleanup(function(err,stats){console.log(stats);});{files: 1,dirs: 0}

Note: If you're not tracking, an error ("not tracking") will be passed to the callback.

Temporary Directories (mkdir, mkdirSync)

To create a temporary directory, use mkdir or mkdirSync, passing it an optional prefix, suffix, or both (see below for details on affixes).

In this example we create a temporary directory, write to a file within it, call out to an external program to create a PDF, and read the result. While the external process creates a lot of additional files, the temporary directory is removed automatically at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),path=require('path'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// For use with ConTeXt, http://wiki.contextgarden.netvarmyData="\\starttext\nHello World\n\\stoptext";temp.mkdir('pdfcreator',function(err,dirPath){varinputPath=path.join(dirPath,'input.tex')fs.writeFile(inputPath,myData,function(err){if(err)throwerr;process.chdir(dirPath);exec("texexec '"+inputPath+"'",function(err){if(err)throwerr;fs.readFile(path.join(dirPath,'input.pdf'),function(err,data){if(err)throwerr;sys.print(data);});});});});

Temporary Streams (createWriteStream)

To create a temporary WriteStream, use 'createWriteStream', which sits on top of fs.createWriteStream. The return value is a fs.WriteStream with a path property containing the temporary file path for the stream. The path is registered for removal when temp.cleanup is called (because temp.track() is called).

vartemp=require('temp');// Automatically track and cleanup files at exittemp.track();varstream=temp.createWriteStream();// stream.path contains the temporary file path for the streamstream.write("Some data");// Maybe do some other thingsstream.end();

Affixes (options)

You can provide custom prefixes and suffixes when creating temporary files and directories. If you provide a string, it is used as the prefix for the temporary name. If you provide an object with prefix, suffix and dir keys, they are used for the temporary name.

Here are some examples:

  • "aprefix": A simple prefix, prepended to the filename; this is shorthand for:
  • {prefix: "aprefix"}: A simple prefix, prepended to the filename
  • {suffix: ".asuffix"}: A suffix, appended to the filename (especially useful when the file needs to be named with specific extension for use with an external program).
  • {prefix: "myprefix", suffix: "mysuffix"}: Customize both affixes
  • {dir: path.join(os.tmpdir(), "myapp")}: default prefix and suffix within a new temporary directory.
  • null: Use the defaults for files and directories (prefixes "f-" and "d-", respectively, no suffixes).

In this simple example we read a pdf, write it to a temporary file with a .pdf extension, and close it.

varfs=require('fs'),temp=require('temp');fs.readFile('/path/to/source.pdf',function(err,data){temp.open({suffix: '.pdf'},function(err,info){if(err)throwerr;fs.write(info.fd,data,(err)=>{console.log(err)});fs.close(info.fd,function(err){if(err)throwerr;// Do something with the file});});});

Just a path, please (path)

If you just want a unique name in your temporary directory, use path:

varfs=require('fs');vartempName=temp.path({suffix: '.pdf'});// Do something with tempName

Note: The file isn't created for you, and the mode is not changed -- and it will not be removed automatically at exit. If you use path, it's all up to you.

API

interfaceOpenFile{path: string;fd: number;}interfaceStats{files: number;dirs: number;}interfaceAffixOptions{prefix?: string;suffix?: string;dir?: string;}functiontrack(value?: boolean): typeoftemp;functionmkdir(affixes: string|AffixOptions|undefined,callback: (err: any,dirPath: string)=>void): void;functionmkdir(affixes?: string|AffixOptions): Promise<string>;functionmkdirSync(affixes?: string|AffixOptions): string;functionopen(affixes: string|AffixOptions|undefined,callback: (err: any,result: OpenFile)=>void): void;functionopen(affixes?: string|AffixOptions): Promise<OpenFile>;functionopenSync(affixes?: string|AffixOptions): OpenFile;functionpath(affixes?: string|AffixOptions,defaultPrefix?: string): string;functioncleanup(callback: (err: any,result: Stats)=>void): void;functioncleanup(): Promise<Stats>;functioncleanupSync(): boolean|Stats;functioncreateWriteStream(affixes?: string|AffixOptions): fs.WriteStream;

Testing

$ npm test

Contributing

You can find the repository at: http://github.com/bruce/node-temp

Issues/Feature Requests can be submitted at: http://github.com/bruce/node-temp/issues

I'd really like to hear your feedback, and I'd love to receive your pull-requests!

Copyright

Copyright (c) 2010-2014 Bruce Williams. This software is licensed under the MIT License, see LICENSE for details.

About

Temporary File, Directory, and Stream support for Node.js

Resources

Stars

450 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - bruce/node-temp: Temporary File, Directory, and Stream support for Node.js · GitHub
Skip to content

Repository files navigation

Image of node-temp logo

Temporary files, directories, and streams for Node.js.

Handles generating a unique file/directory name under the appropriate system temporary directory, changing the file to an appropriate mode, and supports automatic removal (if asked)

temp has a similar API to the fs module.

Node.js Compatibility

Supports v6.0.0+.

Build Status

Please let me know if you have problems running it on a later version of Node.js or have platform-specific problems.

Installation

Install it using npm:

$ npm install temp

Or get it directly from: http://github.com/bruce/node-temp

Synopsis

You can create temporary files with open and openSync, temporary directories with mkdir and mkdirSync, or you can get a unique name in the system temporary directory with path.

See the API section for more details on the API of temp.

Working copies of the following examples can be found under the examples directory.

Temporary Files (open and openSync)

To create a temporary file use open or openSync, passing them an optional prefix, suffix, or both (see below for details on affixes). The object passed to the callback (or returned) has path and fd keys:

{path: "/path/to/file",,fd: theFileDescriptor}

In this example we write to a temporary file and call out to grep and wc -l to determine the number of time foo occurs in the text. The temporary file is chmod'd 0600 and cleaned up automatically when the process at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// Fake datavarmyData="foo\nbar\nfoo\nbaz";// Process the data (note: error handling omitted)temp.open('myprefix',function(err,info){if(!err){fs.write(info.fd,myData,(err)=>{console.log(err);});fs.close(info.fd,function(err){exec("grep foo '"+info.path+"' | wc -l",function(err,stdout){util.puts(stdout.trim());});});}});

Want Cleanup? Make sure you ask for it. (track)

As noted in the example above, if you want temp to track the files and directories it creates and handle removing those files and directories on exit, you must call track(). The track() function is chainable, and it's recommended that you call it when requiring the module.

vartemp=require("temp").track();

Why is this necessary? In pre-0.6 versions of temp, tracking was automatic. While this works great for scripts and Grunt tasks, it's not so great for long-running server processes. Since that's arguably what Node.js is for, you have to opt-in to tracking.

But it's easy.

Cleanup anytime (cleanup, cleanupSync)

When tracking, you can run cleanup() and cleanupSync() anytime (cleanupSync() will be run for you on process exit). An object will be returned (or passed to the callback) with cleanup counts and the file/directory tracking lists will be reset.

>temp.cleanupSync();{files: 1,dirs: 0}
>temp.cleanup(function(err,stats){console.log(stats);});{files: 1,dirs: 0}

Note: If you're not tracking, an error ("not tracking") will be passed to the callback.

Temporary Directories (mkdir, mkdirSync)

To create a temporary directory, use mkdir or mkdirSync, passing it an optional prefix, suffix, or both (see below for details on affixes).

In this example we create a temporary directory, write to a file within it, call out to an external program to create a PDF, and read the result. While the external process creates a lot of additional files, the temporary directory is removed automatically at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),path=require('path'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// For use with ConTeXt, http://wiki.contextgarden.netvarmyData="\\starttext\nHello World\n\\stoptext";temp.mkdir('pdfcreator',function(err,dirPath){varinputPath=path.join(dirPath,'input.tex')fs.writeFile(inputPath,myData,function(err){if(err)throwerr;process.chdir(dirPath);exec("texexec '"+inputPath+"'",function(err){if(err)throwerr;fs.readFile(path.join(dirPath,'input.pdf'),function(err,data){if(err)throwerr;sys.print(data);});});});});

Temporary Streams (createWriteStream)

To create a temporary WriteStream, use 'createWriteStream', which sits on top of fs.createWriteStream. The return value is a fs.WriteStream with a path property containing the temporary file path for the stream. The path is registered for removal when temp.cleanup is called (because temp.track() is called).

vartemp=require('temp');// Automatically track and cleanup files at exittemp.track();varstream=temp.createWriteStream();// stream.path contains the temporary file path for the streamstream.write("Some data");// Maybe do some other thingsstream.end();

Affixes (options)

You can provide custom prefixes and suffixes when creating temporary files and directories. If you provide a string, it is used as the prefix for the temporary name. If you provide an object with prefix, suffix and dir keys, they are used for the temporary name.

Here are some examples:

  • "aprefix": A simple prefix, prepended to the filename; this is shorthand for:
  • {prefix: "aprefix"}: A simple prefix, prepended to the filename
  • {suffix: ".asuffix"}: A suffix, appended to the filename (especially useful when the file needs to be named with specific extension for use with an external program).
  • {prefix: "myprefix", suffix: "mysuffix"}: Customize both affixes
  • {dir: path.join(os.tmpdir(), "myapp")}: default prefix and suffix within a new temporary directory.
  • null: Use the defaults for files and directories (prefixes "f-" and "d-", respectively, no suffixes).

In this simple example we read a pdf, write it to a temporary file with a .pdf extension, and close it.

varfs=require('fs'),temp=require('temp');fs.readFile('/path/to/source.pdf',function(err,data){temp.open({suffix: '.pdf'},function(err,info){if(err)throwerr;fs.write(info.fd,data,(err)=>{console.log(err)});fs.close(info.fd,function(err){if(err)throwerr;// Do something with the file});});});

Just a path, please (path)

If you just want a unique name in your temporary directory, use path:

varfs=require('fs');vartempName=temp.path({suffix: '.pdf'});// Do something with tempName

Note: The file isn't created for you, and the mode is not changed -- and it will not be removed automatically at exit. If you use path, it's all up to you.

API

interfaceOpenFile{path: string;fd: number;}interfaceStats{files: number;dirs: number;}interfaceAffixOptions{prefix?: string;suffix?: string;dir?: string;}functiontrack(value?: boolean): typeoftemp;functionmkdir(affixes: string|AffixOptions|undefined,callback: (err: any,dirPath: string)=>void): void;functionmkdir(affixes?: string|AffixOptions): Promise<string>;functionmkdirSync(affixes?: string|AffixOptions): string;functionopen(affixes: string|AffixOptions|undefined,callback: (err: any,result: OpenFile)=>void): void;functionopen(affixes?: string|AffixOptions): Promise<OpenFile>;functionopenSync(affixes?: string|AffixOptions): OpenFile;functionpath(affixes?: string|AffixOptions,defaultPrefix?: string): string;functioncleanup(callback: (err: any,result: Stats)=>void): void;functioncleanup(): Promise<Stats>;functioncleanupSync(): boolean|Stats;functioncreateWriteStream(affixes?: string|AffixOptions): fs.WriteStream;

Testing

$ npm test

Contributing

You can find the repository at: http://github.com/bruce/node-temp

Issues/Feature Requests can be submitted at: http://github.com/bruce/node-temp/issues

I'd really like to hear your feedback, and I'd love to receive your pull-requests!

Copyright

Copyright (c) 2010-2014 Bruce Williams. This software is licensed under the MIT License, see LICENSE for details.

About

Temporary File, Directory, and Stream support for Node.js

Resources

Stars

450 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - bruce/node-temp: Temporary File, Directory, and Stream support for Node.js · GitHub
Skip to content

Repository files navigation

Image of node-temp logo

Temporary files, directories, and streams for Node.js.

Handles generating a unique file/directory name under the appropriate system temporary directory, changing the file to an appropriate mode, and supports automatic removal (if asked)

temp has a similar API to the fs module.

Node.js Compatibility

Supports v6.0.0+.

Build Status

Please let me know if you have problems running it on a later version of Node.js or have platform-specific problems.

Installation

Install it using npm:

$ npm install temp

Or get it directly from: http://github.com/bruce/node-temp

Synopsis

You can create temporary files with open and openSync, temporary directories with mkdir and mkdirSync, or you can get a unique name in the system temporary directory with path.

See the API section for more details on the API of temp.

Working copies of the following examples can be found under the examples directory.

Temporary Files (open and openSync)

To create a temporary file use open or openSync, passing them an optional prefix, suffix, or both (see below for details on affixes). The object passed to the callback (or returned) has path and fd keys:

{path: "/path/to/file",,fd: theFileDescriptor}

In this example we write to a temporary file and call out to grep and wc -l to determine the number of time foo occurs in the text. The temporary file is chmod'd 0600 and cleaned up automatically when the process at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// Fake datavarmyData="foo\nbar\nfoo\nbaz";// Process the data (note: error handling omitted)temp.open('myprefix',function(err,info){if(!err){fs.write(info.fd,myData,(err)=>{console.log(err);});fs.close(info.fd,function(err){exec("grep foo '"+info.path+"' | wc -l",function(err,stdout){util.puts(stdout.trim());});});}});

Want Cleanup? Make sure you ask for it. (track)

As noted in the example above, if you want temp to track the files and directories it creates and handle removing those files and directories on exit, you must call track(). The track() function is chainable, and it's recommended that you call it when requiring the module.

vartemp=require("temp").track();

Why is this necessary? In pre-0.6 versions of temp, tracking was automatic. While this works great for scripts and Grunt tasks, it's not so great for long-running server processes. Since that's arguably what Node.js is for, you have to opt-in to tracking.

But it's easy.

Cleanup anytime (cleanup, cleanupSync)

When tracking, you can run cleanup() and cleanupSync() anytime (cleanupSync() will be run for you on process exit). An object will be returned (or passed to the callback) with cleanup counts and the file/directory tracking lists will be reset.

>temp.cleanupSync();{files: 1,dirs: 0}
>temp.cleanup(function(err,stats){console.log(stats);});{files: 1,dirs: 0}

Note: If you're not tracking, an error ("not tracking") will be passed to the callback.

Temporary Directories (mkdir, mkdirSync)

To create a temporary directory, use mkdir or mkdirSync, passing it an optional prefix, suffix, or both (see below for details on affixes).

In this example we create a temporary directory, write to a file within it, call out to an external program to create a PDF, and read the result. While the external process creates a lot of additional files, the temporary directory is removed automatically at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),path=require('path'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// For use with ConTeXt, http://wiki.contextgarden.netvarmyData="\\starttext\nHello World\n\\stoptext";temp.mkdir('pdfcreator',function(err,dirPath){varinputPath=path.join(dirPath,'input.tex')fs.writeFile(inputPath,myData,function(err){if(err)throwerr;process.chdir(dirPath);exec("texexec '"+inputPath+"'",function(err){if(err)throwerr;fs.readFile(path.join(dirPath,'input.pdf'),function(err,data){if(err)throwerr;sys.print(data);});});});});

Temporary Streams (createWriteStream)

To create a temporary WriteStream, use 'createWriteStream', which sits on top of fs.createWriteStream. The return value is a fs.WriteStream with a path property containing the temporary file path for the stream. The path is registered for removal when temp.cleanup is called (because temp.track() is called).

vartemp=require('temp');// Automatically track and cleanup files at exittemp.track();varstream=temp.createWriteStream();// stream.path contains the temporary file path for the streamstream.write("Some data");// Maybe do some other thingsstream.end();

Affixes (options)

You can provide custom prefixes and suffixes when creating temporary files and directories. If you provide a string, it is used as the prefix for the temporary name. If you provide an object with prefix, suffix and dir keys, they are used for the temporary name.

Here are some examples:

  • "aprefix": A simple prefix, prepended to the filename; this is shorthand for:
  • {prefix: "aprefix"}: A simple prefix, prepended to the filename
  • {suffix: ".asuffix"}: A suffix, appended to the filename (especially useful when the file needs to be named with specific extension for use with an external program).
  • {prefix: "myprefix", suffix: "mysuffix"}: Customize both affixes
  • {dir: path.join(os.tmpdir(), "myapp")}: default prefix and suffix within a new temporary directory.
  • null: Use the defaults for files and directories (prefixes "f-" and "d-", respectively, no suffixes).

In this simple example we read a pdf, write it to a temporary file with a .pdf extension, and close it.

varfs=require('fs'),temp=require('temp');fs.readFile('/path/to/source.pdf',function(err,data){temp.open({suffix: '.pdf'},function(err,info){if(err)throwerr;fs.write(info.fd,data,(err)=>{console.log(err)});fs.close(info.fd,function(err){if(err)throwerr;// Do something with the file});});});

Just a path, please (path)

If you just want a unique name in your temporary directory, use path:

varfs=require('fs');vartempName=temp.path({suffix: '.pdf'});// Do something with tempName

Note: The file isn't created for you, and the mode is not changed -- and it will not be removed automatically at exit. If you use path, it's all up to you.

API

interfaceOpenFile{path: string;fd: number;}interfaceStats{files: number;dirs: number;}interfaceAffixOptions{prefix?: string;suffix?: string;dir?: string;}functiontrack(value?: boolean): typeoftemp;functionmkdir(affixes: string|AffixOptions|undefined,callback: (err: any,dirPath: string)=>void): void;functionmkdir(affixes?: string|AffixOptions): Promise<string>;functionmkdirSync(affixes?: string|AffixOptions): string;functionopen(affixes: string|AffixOptions|undefined,callback: (err: any,result: OpenFile)=>void): void;functionopen(affixes?: string|AffixOptions): Promise<OpenFile>;functionopenSync(affixes?: string|AffixOptions): OpenFile;functionpath(affixes?: string|AffixOptions,defaultPrefix?: string): string;functioncleanup(callback: (err: any,result: Stats)=>void): void;functioncleanup(): Promise<Stats>;functioncleanupSync(): boolean|Stats;functioncreateWriteStream(affixes?: string|AffixOptions): fs.WriteStream;

Testing

$ npm test

Contributing

You can find the repository at: http://github.com/bruce/node-temp

Issues/Feature Requests can be submitted at: http://github.com/bruce/node-temp/issues

I'd really like to hear your feedback, and I'd love to receive your pull-requests!

Copyright

Copyright (c) 2010-2014 Bruce Williams. This software is licensed under the MIT License, see LICENSE for details.

About

Temporary File, Directory, and Stream support for Node.js

Resources

Stars

450 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - bruce/node-temp: Temporary File, Directory, and Stream support for Node.js · GitHub
Skip to content

Repository files navigation

Image of node-temp logo

Temporary files, directories, and streams for Node.js.

Handles generating a unique file/directory name under the appropriate system temporary directory, changing the file to an appropriate mode, and supports automatic removal (if asked)

temp has a similar API to the fs module.

Node.js Compatibility

Supports v6.0.0+.

Build Status

Please let me know if you have problems running it on a later version of Node.js or have platform-specific problems.

Installation

Install it using npm:

$ npm install temp

Or get it directly from: http://github.com/bruce/node-temp

Synopsis

You can create temporary files with open and openSync, temporary directories with mkdir and mkdirSync, or you can get a unique name in the system temporary directory with path.

See the API section for more details on the API of temp.

Working copies of the following examples can be found under the examples directory.

Temporary Files (open and openSync)

To create a temporary file use open or openSync, passing them an optional prefix, suffix, or both (see below for details on affixes). The object passed to the callback (or returned) has path and fd keys:

{path: "/path/to/file",,fd: theFileDescriptor}

In this example we write to a temporary file and call out to grep and wc -l to determine the number of time foo occurs in the text. The temporary file is chmod'd 0600 and cleaned up automatically when the process at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// Fake datavarmyData="foo\nbar\nfoo\nbaz";// Process the data (note: error handling omitted)temp.open('myprefix',function(err,info){if(!err){fs.write(info.fd,myData,(err)=>{console.log(err);});fs.close(info.fd,function(err){exec("grep foo '"+info.path+"' | wc -l",function(err,stdout){util.puts(stdout.trim());});});}});

Want Cleanup? Make sure you ask for it. (track)

As noted in the example above, if you want temp to track the files and directories it creates and handle removing those files and directories on exit, you must call track(). The track() function is chainable, and it's recommended that you call it when requiring the module.

vartemp=require("temp").track();

Why is this necessary? In pre-0.6 versions of temp, tracking was automatic. While this works great for scripts and Grunt tasks, it's not so great for long-running server processes. Since that's arguably what Node.js is for, you have to opt-in to tracking.

But it's easy.

Cleanup anytime (cleanup, cleanupSync)

When tracking, you can run cleanup() and cleanupSync() anytime (cleanupSync() will be run for you on process exit). An object will be returned (or passed to the callback) with cleanup counts and the file/directory tracking lists will be reset.

>temp.cleanupSync();{files: 1,dirs: 0}
>temp.cleanup(function(err,stats){console.log(stats);});{files: 1,dirs: 0}

Note: If you're not tracking, an error ("not tracking") will be passed to the callback.

Temporary Directories (mkdir, mkdirSync)

To create a temporary directory, use mkdir or mkdirSync, passing it an optional prefix, suffix, or both (see below for details on affixes).

In this example we create a temporary directory, write to a file within it, call out to an external program to create a PDF, and read the result. While the external process creates a lot of additional files, the temporary directory is removed automatically at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),path=require('path'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// For use with ConTeXt, http://wiki.contextgarden.netvarmyData="\\starttext\nHello World\n\\stoptext";temp.mkdir('pdfcreator',function(err,dirPath){varinputPath=path.join(dirPath,'input.tex')fs.writeFile(inputPath,myData,function(err){if(err)throwerr;process.chdir(dirPath);exec("texexec '"+inputPath+"'",function(err){if(err)throwerr;fs.readFile(path.join(dirPath,'input.pdf'),function(err,data){if(err)throwerr;sys.print(data);});});});});

Temporary Streams (createWriteStream)

To create a temporary WriteStream, use 'createWriteStream', which sits on top of fs.createWriteStream. The return value is a fs.WriteStream with a path property containing the temporary file path for the stream. The path is registered for removal when temp.cleanup is called (because temp.track() is called).

vartemp=require('temp');// Automatically track and cleanup files at exittemp.track();varstream=temp.createWriteStream();// stream.path contains the temporary file path for the streamstream.write("Some data");// Maybe do some other thingsstream.end();

Affixes (options)

You can provide custom prefixes and suffixes when creating temporary files and directories. If you provide a string, it is used as the prefix for the temporary name. If you provide an object with prefix, suffix and dir keys, they are used for the temporary name.

Here are some examples:

  • "aprefix": A simple prefix, prepended to the filename; this is shorthand for:
  • {prefix: "aprefix"}: A simple prefix, prepended to the filename
  • {suffix: ".asuffix"}: A suffix, appended to the filename (especially useful when the file needs to be named with specific extension for use with an external program).
  • {prefix: "myprefix", suffix: "mysuffix"}: Customize both affixes
  • {dir: path.join(os.tmpdir(), "myapp")}: default prefix and suffix within a new temporary directory.
  • null: Use the defaults for files and directories (prefixes "f-" and "d-", respectively, no suffixes).

In this simple example we read a pdf, write it to a temporary file with a .pdf extension, and close it.

varfs=require('fs'),temp=require('temp');fs.readFile('/path/to/source.pdf',function(err,data){temp.open({suffix: '.pdf'},function(err,info){if(err)throwerr;fs.write(info.fd,data,(err)=>{console.log(err)});fs.close(info.fd,function(err){if(err)throwerr;// Do something with the file});});});

Just a path, please (path)

If you just want a unique name in your temporary directory, use path:

varfs=require('fs');vartempName=temp.path({suffix: '.pdf'});// Do something with tempName

Note: The file isn't created for you, and the mode is not changed -- and it will not be removed automatically at exit. If you use path, it's all up to you.

API

interfaceOpenFile{path: string;fd: number;}interfaceStats{files: number;dirs: number;}interfaceAffixOptions{prefix?: string;suffix?: string;dir?: string;}functiontrack(value?: boolean): typeoftemp;functionmkdir(affixes: string|AffixOptions|undefined,callback: (err: any,dirPath: string)=>void): void;functionmkdir(affixes?: string|AffixOptions): Promise<string>;functionmkdirSync(affixes?: string|AffixOptions): string;functionopen(affixes: string|AffixOptions|undefined,callback: (err: any,result: OpenFile)=>void): void;functionopen(affixes?: string|AffixOptions): Promise<OpenFile>;functionopenSync(affixes?: string|AffixOptions): OpenFile;functionpath(affixes?: string|AffixOptions,defaultPrefix?: string): string;functioncleanup(callback: (err: any,result: Stats)=>void): void;functioncleanup(): Promise<Stats>;functioncleanupSync(): boolean|Stats;functioncreateWriteStream(affixes?: string|AffixOptions): fs.WriteStream;

Testing

$ npm test

Contributing

You can find the repository at: http://github.com/bruce/node-temp

Issues/Feature Requests can be submitted at: http://github.com/bruce/node-temp/issues

I'd really like to hear your feedback, and I'd love to receive your pull-requests!

Copyright

Copyright (c) 2010-2014 Bruce Williams. This software is licensed under the MIT License, see LICENSE for details.

About

Temporary File, Directory, and Stream support for Node.js

Resources

Stars

450 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - bruce/node-temp: Temporary File, Directory, and Stream support for Node.js · GitHub
Skip to content

Repository files navigation

Image of node-temp logo

Temporary files, directories, and streams for Node.js.

Handles generating a unique file/directory name under the appropriate system temporary directory, changing the file to an appropriate mode, and supports automatic removal (if asked)

temp has a similar API to the fs module.

Node.js Compatibility

Supports v6.0.0+.

Build Status

Please let me know if you have problems running it on a later version of Node.js or have platform-specific problems.

Installation

Install it using npm:

$ npm install temp

Or get it directly from: http://github.com/bruce/node-temp

Synopsis

You can create temporary files with open and openSync, temporary directories with mkdir and mkdirSync, or you can get a unique name in the system temporary directory with path.

See the API section for more details on the API of temp.

Working copies of the following examples can be found under the examples directory.

Temporary Files (open and openSync)

To create a temporary file use open or openSync, passing them an optional prefix, suffix, or both (see below for details on affixes). The object passed to the callback (or returned) has path and fd keys:

{path: "/path/to/file",,fd: theFileDescriptor}

In this example we write to a temporary file and call out to grep and wc -l to determine the number of time foo occurs in the text. The temporary file is chmod'd 0600 and cleaned up automatically when the process at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// Fake datavarmyData="foo\nbar\nfoo\nbaz";// Process the data (note: error handling omitted)temp.open('myprefix',function(err,info){if(!err){fs.write(info.fd,myData,(err)=>{console.log(err);});fs.close(info.fd,function(err){exec("grep foo '"+info.path+"' | wc -l",function(err,stdout){util.puts(stdout.trim());});});}});

Want Cleanup? Make sure you ask for it. (track)

As noted in the example above, if you want temp to track the files and directories it creates and handle removing those files and directories on exit, you must call track(). The track() function is chainable, and it's recommended that you call it when requiring the module.

vartemp=require("temp").track();

Why is this necessary? In pre-0.6 versions of temp, tracking was automatic. While this works great for scripts and Grunt tasks, it's not so great for long-running server processes. Since that's arguably what Node.js is for, you have to opt-in to tracking.

But it's easy.

Cleanup anytime (cleanup, cleanupSync)

When tracking, you can run cleanup() and cleanupSync() anytime (cleanupSync() will be run for you on process exit). An object will be returned (or passed to the callback) with cleanup counts and the file/directory tracking lists will be reset.

>temp.cleanupSync();{files: 1,dirs: 0}
>temp.cleanup(function(err,stats){console.log(stats);});{files: 1,dirs: 0}

Note: If you're not tracking, an error ("not tracking") will be passed to the callback.

Temporary Directories (mkdir, mkdirSync)

To create a temporary directory, use mkdir or mkdirSync, passing it an optional prefix, suffix, or both (see below for details on affixes).

In this example we create a temporary directory, write to a file within it, call out to an external program to create a PDF, and read the result. While the external process creates a lot of additional files, the temporary directory is removed automatically at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),path=require('path'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// For use with ConTeXt, http://wiki.contextgarden.netvarmyData="\\starttext\nHello World\n\\stoptext";temp.mkdir('pdfcreator',function(err,dirPath){varinputPath=path.join(dirPath,'input.tex')fs.writeFile(inputPath,myData,function(err){if(err)throwerr;process.chdir(dirPath);exec("texexec '"+inputPath+"'",function(err){if(err)throwerr;fs.readFile(path.join(dirPath,'input.pdf'),function(err,data){if(err)throwerr;sys.print(data);});});});});

Temporary Streams (createWriteStream)

To create a temporary WriteStream, use 'createWriteStream', which sits on top of fs.createWriteStream. The return value is a fs.WriteStream with a path property containing the temporary file path for the stream. The path is registered for removal when temp.cleanup is called (because temp.track() is called).

vartemp=require('temp');// Automatically track and cleanup files at exittemp.track();varstream=temp.createWriteStream();// stream.path contains the temporary file path for the streamstream.write("Some data");// Maybe do some other thingsstream.end();

Affixes (options)

You can provide custom prefixes and suffixes when creating temporary files and directories. If you provide a string, it is used as the prefix for the temporary name. If you provide an object with prefix, suffix and dir keys, they are used for the temporary name.

Here are some examples:

  • "aprefix": A simple prefix, prepended to the filename; this is shorthand for:
  • {prefix: "aprefix"}: A simple prefix, prepended to the filename
  • {suffix: ".asuffix"}: A suffix, appended to the filename (especially useful when the file needs to be named with specific extension for use with an external program).
  • {prefix: "myprefix", suffix: "mysuffix"}: Customize both affixes
  • {dir: path.join(os.tmpdir(), "myapp")}: default prefix and suffix within a new temporary directory.
  • null: Use the defaults for files and directories (prefixes "f-" and "d-", respectively, no suffixes).

In this simple example we read a pdf, write it to a temporary file with a .pdf extension, and close it.

varfs=require('fs'),temp=require('temp');fs.readFile('/path/to/source.pdf',function(err,data){temp.open({suffix: '.pdf'},function(err,info){if(err)throwerr;fs.write(info.fd,data,(err)=>{console.log(err)});fs.close(info.fd,function(err){if(err)throwerr;// Do something with the file});});});

Just a path, please (path)

If you just want a unique name in your temporary directory, use path:

varfs=require('fs');vartempName=temp.path({suffix: '.pdf'});// Do something with tempName

Note: The file isn't created for you, and the mode is not changed -- and it will not be removed automatically at exit. If you use path, it's all up to you.

API

interfaceOpenFile{path: string;fd: number;}interfaceStats{files: number;dirs: number;}interfaceAffixOptions{prefix?: string;suffix?: string;dir?: string;}functiontrack(value?: boolean): typeoftemp;functionmkdir(affixes: string|AffixOptions|undefined,callback: (err: any,dirPath: string)=>void): void;functionmkdir(affixes?: string|AffixOptions): Promise<string>;functionmkdirSync(affixes?: string|AffixOptions): string;functionopen(affixes: string|AffixOptions|undefined,callback: (err: any,result: OpenFile)=>void): void;functionopen(affixes?: string|AffixOptions): Promise<OpenFile>;functionopenSync(affixes?: string|AffixOptions): OpenFile;functionpath(affixes?: string|AffixOptions,defaultPrefix?: string): string;functioncleanup(callback: (err: any,result: Stats)=>void): void;functioncleanup(): Promise<Stats>;functioncleanupSync(): boolean|Stats;functioncreateWriteStream(affixes?: string|AffixOptions): fs.WriteStream;

Testing

$ npm test

Contributing

You can find the repository at: http://github.com/bruce/node-temp

Issues/Feature Requests can be submitted at: http://github.com/bruce/node-temp/issues

I'd really like to hear your feedback, and I'd love to receive your pull-requests!

Copyright

Copyright (c) 2010-2014 Bruce Williams. This software is licensed under the MIT License, see LICENSE for details.

About

Temporary File, Directory, and Stream support for Node.js

Resources

Stars

450 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - bruce/node-temp: Temporary File, Directory, and Stream support for Node.js · GitHub
Skip to content

Repository files navigation

Image of node-temp logo

Temporary files, directories, and streams for Node.js.

Handles generating a unique file/directory name under the appropriate system temporary directory, changing the file to an appropriate mode, and supports automatic removal (if asked)

temp has a similar API to the fs module.

Node.js Compatibility

Supports v6.0.0+.

Build Status

Please let me know if you have problems running it on a later version of Node.js or have platform-specific problems.

Installation

Install it using npm:

$ npm install temp

Or get it directly from: http://github.com/bruce/node-temp

Synopsis

You can create temporary files with open and openSync, temporary directories with mkdir and mkdirSync, or you can get a unique name in the system temporary directory with path.

See the API section for more details on the API of temp.

Working copies of the following examples can be found under the examples directory.

Temporary Files (open and openSync)

To create a temporary file use open or openSync, passing them an optional prefix, suffix, or both (see below for details on affixes). The object passed to the callback (or returned) has path and fd keys:

{path: "/path/to/file",,fd: theFileDescriptor}

In this example we write to a temporary file and call out to grep and wc -l to determine the number of time foo occurs in the text. The temporary file is chmod'd 0600 and cleaned up automatically when the process at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// Fake datavarmyData="foo\nbar\nfoo\nbaz";// Process the data (note: error handling omitted)temp.open('myprefix',function(err,info){if(!err){fs.write(info.fd,myData,(err)=>{console.log(err);});fs.close(info.fd,function(err){exec("grep foo '"+info.path+"' | wc -l",function(err,stdout){util.puts(stdout.trim());});});}});

Want Cleanup? Make sure you ask for it. (track)

As noted in the example above, if you want temp to track the files and directories it creates and handle removing those files and directories on exit, you must call track(). The track() function is chainable, and it's recommended that you call it when requiring the module.

vartemp=require("temp").track();

Why is this necessary? In pre-0.6 versions of temp, tracking was automatic. While this works great for scripts and Grunt tasks, it's not so great for long-running server processes. Since that's arguably what Node.js is for, you have to opt-in to tracking.

But it's easy.

Cleanup anytime (cleanup, cleanupSync)

When tracking, you can run cleanup() and cleanupSync() anytime (cleanupSync() will be run for you on process exit). An object will be returned (or passed to the callback) with cleanup counts and the file/directory tracking lists will be reset.

>temp.cleanupSync();{files: 1,dirs: 0}
>temp.cleanup(function(err,stats){console.log(stats);});{files: 1,dirs: 0}

Note: If you're not tracking, an error ("not tracking") will be passed to the callback.

Temporary Directories (mkdir, mkdirSync)

To create a temporary directory, use mkdir or mkdirSync, passing it an optional prefix, suffix, or both (see below for details on affixes).

In this example we create a temporary directory, write to a file within it, call out to an external program to create a PDF, and read the result. While the external process creates a lot of additional files, the temporary directory is removed automatically at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),path=require('path'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// For use with ConTeXt, http://wiki.contextgarden.netvarmyData="\\starttext\nHello World\n\\stoptext";temp.mkdir('pdfcreator',function(err,dirPath){varinputPath=path.join(dirPath,'input.tex')fs.writeFile(inputPath,myData,function(err){if(err)throwerr;process.chdir(dirPath);exec("texexec '"+inputPath+"'",function(err){if(err)throwerr;fs.readFile(path.join(dirPath,'input.pdf'),function(err,data){if(err)throwerr;sys.print(data);});});});});

Temporary Streams (createWriteStream)

To create a temporary WriteStream, use 'createWriteStream', which sits on top of fs.createWriteStream. The return value is a fs.WriteStream with a path property containing the temporary file path for the stream. The path is registered for removal when temp.cleanup is called (because temp.track() is called).

vartemp=require('temp');// Automatically track and cleanup files at exittemp.track();varstream=temp.createWriteStream();// stream.path contains the temporary file path for the streamstream.write("Some data");// Maybe do some other thingsstream.end();

Affixes (options)

You can provide custom prefixes and suffixes when creating temporary files and directories. If you provide a string, it is used as the prefix for the temporary name. If you provide an object with prefix, suffix and dir keys, they are used for the temporary name.

Here are some examples:

  • "aprefix": A simple prefix, prepended to the filename; this is shorthand for:
  • {prefix: "aprefix"}: A simple prefix, prepended to the filename
  • {suffix: ".asuffix"}: A suffix, appended to the filename (especially useful when the file needs to be named with specific extension for use with an external program).
  • {prefix: "myprefix", suffix: "mysuffix"}: Customize both affixes
  • {dir: path.join(os.tmpdir(), "myapp")}: default prefix and suffix within a new temporary directory.
  • null: Use the defaults for files and directories (prefixes "f-" and "d-", respectively, no suffixes).

In this simple example we read a pdf, write it to a temporary file with a .pdf extension, and close it.

varfs=require('fs'),temp=require('temp');fs.readFile('/path/to/source.pdf',function(err,data){temp.open({suffix: '.pdf'},function(err,info){if(err)throwerr;fs.write(info.fd,data,(err)=>{console.log(err)});fs.close(info.fd,function(err){if(err)throwerr;// Do something with the file});});});

Just a path, please (path)

If you just want a unique name in your temporary directory, use path:

varfs=require('fs');vartempName=temp.path({suffix: '.pdf'});// Do something with tempName

Note: The file isn't created for you, and the mode is not changed -- and it will not be removed automatically at exit. If you use path, it's all up to you.

API

interfaceOpenFile{path: string;fd: number;}interfaceStats{files: number;dirs: number;}interfaceAffixOptions{prefix?: string;suffix?: string;dir?: string;}functiontrack(value?: boolean): typeoftemp;functionmkdir(affixes: string|AffixOptions|undefined,callback: (err: any,dirPath: string)=>void): void;functionmkdir(affixes?: string|AffixOptions): Promise<string>;functionmkdirSync(affixes?: string|AffixOptions): string;functionopen(affixes: string|AffixOptions|undefined,callback: (err: any,result: OpenFile)=>void): void;functionopen(affixes?: string|AffixOptions): Promise<OpenFile>;functionopenSync(affixes?: string|AffixOptions): OpenFile;functionpath(affixes?: string|AffixOptions,defaultPrefix?: string): string;functioncleanup(callback: (err: any,result: Stats)=>void): void;functioncleanup(): Promise<Stats>;functioncleanupSync(): boolean|Stats;functioncreateWriteStream(affixes?: string|AffixOptions): fs.WriteStream;

Testing

$ npm test

Contributing

You can find the repository at: http://github.com/bruce/node-temp

Issues/Feature Requests can be submitted at: http://github.com/bruce/node-temp/issues

I'd really like to hear your feedback, and I'd love to receive your pull-requests!

Copyright

Copyright (c) 2010-2014 Bruce Williams. This software is licensed under the MIT License, see LICENSE for details.

About

Temporary File, Directory, and Stream support for Node.js

Resources

Stars

450 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - bruce/node-temp: Temporary File, Directory, and Stream support for Node.js · GitHub
Skip to content

Repository files navigation

Image of node-temp logo

Temporary files, directories, and streams for Node.js.

Handles generating a unique file/directory name under the appropriate system temporary directory, changing the file to an appropriate mode, and supports automatic removal (if asked)

temp has a similar API to the fs module.

Node.js Compatibility

Supports v6.0.0+.

Build Status

Please let me know if you have problems running it on a later version of Node.js or have platform-specific problems.

Installation

Install it using npm:

$ npm install temp

Or get it directly from: http://github.com/bruce/node-temp

Synopsis

You can create temporary files with open and openSync, temporary directories with mkdir and mkdirSync, or you can get a unique name in the system temporary directory with path.

See the API section for more details on the API of temp.

Working copies of the following examples can be found under the examples directory.

Temporary Files (open and openSync)

To create a temporary file use open or openSync, passing them an optional prefix, suffix, or both (see below for details on affixes). The object passed to the callback (or returned) has path and fd keys:

{path: "/path/to/file",,fd: theFileDescriptor}

In this example we write to a temporary file and call out to grep and wc -l to determine the number of time foo occurs in the text. The temporary file is chmod'd 0600 and cleaned up automatically when the process at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// Fake datavarmyData="foo\nbar\nfoo\nbaz";// Process the data (note: error handling omitted)temp.open('myprefix',function(err,info){if(!err){fs.write(info.fd,myData,(err)=>{console.log(err);});fs.close(info.fd,function(err){exec("grep foo '"+info.path+"' | wc -l",function(err,stdout){util.puts(stdout.trim());});});}});

Want Cleanup? Make sure you ask for it. (track)

As noted in the example above, if you want temp to track the files and directories it creates and handle removing those files and directories on exit, you must call track(). The track() function is chainable, and it's recommended that you call it when requiring the module.

vartemp=require("temp").track();

Why is this necessary? In pre-0.6 versions of temp, tracking was automatic. While this works great for scripts and Grunt tasks, it's not so great for long-running server processes. Since that's arguably what Node.js is for, you have to opt-in to tracking.

But it's easy.

Cleanup anytime (cleanup, cleanupSync)

When tracking, you can run cleanup() and cleanupSync() anytime (cleanupSync() will be run for you on process exit). An object will be returned (or passed to the callback) with cleanup counts and the file/directory tracking lists will be reset.

>temp.cleanupSync();{files: 1,dirs: 0}
>temp.cleanup(function(err,stats){console.log(stats);});{files: 1,dirs: 0}

Note: If you're not tracking, an error ("not tracking") will be passed to the callback.

Temporary Directories (mkdir, mkdirSync)

To create a temporary directory, use mkdir or mkdirSync, passing it an optional prefix, suffix, or both (see below for details on affixes).

In this example we create a temporary directory, write to a file within it, call out to an external program to create a PDF, and read the result. While the external process creates a lot of additional files, the temporary directory is removed automatically at exit (because temp.track() is called):

vartemp=require('temp'),fs=require('fs'),util=require('util'),path=require('path'),exec=require('child_process').exec;// Automatically track and cleanup files at exittemp.track();// For use with ConTeXt, http://wiki.contextgarden.netvarmyData="\\starttext\nHello World\n\\stoptext";temp.mkdir('pdfcreator',function(err,dirPath){varinputPath=path.join(dirPath,'input.tex')fs.writeFile(inputPath,myData,function(err){if(err)throwerr;process.chdir(dirPath);exec("texexec '"+inputPath+"'",function(err){if(err)throwerr;fs.readFile(path.join(dirPath,'input.pdf'),function(err,data){if(err)throwerr;sys.print(data);});});});});

Temporary Streams (createWriteStream)

To create a temporary WriteStream, use 'createWriteStream', which sits on top of fs.createWriteStream. The return value is a fs.WriteStream with a path property containing the temporary file path for the stream. The path is registered for removal when temp.cleanup is called (because temp.track() is called).

vartemp=require('temp');// Automatically track and cleanup files at exittemp.track();varstream=temp.createWriteStream();// stream.path contains the temporary file path for the streamstream.write("Some data");// Maybe do some other thingsstream.end();

Affixes (options)

You can provide custom prefixes and suffixes when creating temporary files and directories. If you provide a string, it is used as the prefix for the temporary name. If you provide an object with prefix, suffix and dir keys, they are used for the temporary name.

Here are some examples:

  • "aprefix": A simple prefix, prepended to the filename; this is shorthand for:
  • {prefix: "aprefix"}: A simple prefix, prepended to the filename
  • {suffix: ".asuffix"}: A suffix, appended to the filename (especially useful when the file needs to be named with specific extension for use with an external program).
  • {prefix: "myprefix", suffix: "mysuffix"}: Customize both affixes
  • {dir: path.join(os.tmpdir(), "myapp")}: default prefix and suffix within a new temporary directory.
  • null: Use the defaults for files and directories (prefixes "f-" and "d-", respectively, no suffixes).

In this simple example we read a pdf, write it to a temporary file with a .pdf extension, and close it.

varfs=require('fs'),temp=require('temp');fs.readFile('/path/to/source.pdf',function(err,data){temp.open({suffix: '.pdf'},function(err,info){if(err)throwerr;fs.write(info.fd,data,(err)=>{console.log(err)});fs.close(info.fd,function(err){if(err)throwerr;// Do something with the file});});});

Just a path, please (path)

If you just want a unique name in your temporary directory, use path:

varfs=require('fs');vartempName=temp.path({suffix: '.pdf'});// Do something with tempName

Note: The file isn't created for you, and the mode is not changed -- and it will not be removed automatically at exit. If you use path, it's all up to you.

API

interfaceOpenFile{path: string;fd: number;}interfaceStats{files: number;dirs: number;}interfaceAffixOptions{prefix?: string;suffix?: string;dir?: string;}functiontrack(value?: boolean): typeoftemp;functionmkdir(affixes: string|AffixOptions|undefined,callback: (err: any,dirPath: string)=>void): void;functionmkdir(affixes?: string|AffixOptions): Promise<string>;functionmkdirSync(affixes?: string|AffixOptions): string;functionopen(affixes: string|AffixOptions|undefined,callback: (err: any,result: OpenFile)=>void): void;functionopen(affixes?: string|AffixOptions): Promise<OpenFile>;functionopenSync(affixes?: string|AffixOptions): OpenFile;functionpath(affixes?: string|AffixOptions,defaultPrefix?: string): string;functioncleanup(callback: (err: any,result: Stats)=>void): void;functioncleanup(): Promise<Stats>;functioncleanupSync(): boolean|Stats;functioncreateWriteStream(affixes?: string|AffixOptions): fs.WriteStream;

Testing

$ npm test

Contributing

You can find the repository at: http://github.com/bruce/node-temp

Issues/Feature Requests can be submitted at: http://github.com/bruce/node-temp/issues

I'd really like to hear your feedback, and I'd love to receive your pull-requests!

Copyright

Copyright (c) 2010-2014 Bruce Williams. This software is licensed under the MIT License, see LICENSE for details.

About

Temporary File, Directory, and Stream support for Node.js

Resources

Stars

450 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages