Skip to content

Instantly share code, notes, and snippets.

@rauchg
Last active January 6, 2024 07:19
Show Gist options
  • Save rauchg/5b032c2c2166e4e36713 to your computer and use it in GitHub Desktop.
Save rauchg/5b032c2c2166e4e36713 to your computer and use it in GitHub Desktop.
require-from-twitter

require-from-twitter

Since Twitter doesn't have an edit button, it's a suitable host for JavaScript modules.

How to use

Source tweet: https://twitter.com/rauchg/status/712799807073419264

const leftPad = await requireFromTwitter('712799807073419264');
console.log(leftPad(1, 5));      // '00001'
console.log(leftPad(1234, 5));   // '01234'
console.log(leftPad(12345, 5));  // '12345'

Running this example

# populate `twitter-config.json` with your API tokens
$ npm install
$ npm test
import { babel } from './package';
import { transform } from 'babel-core';
import { decodeHTML as decode } from 'entities';
import Twit from 'twit';
// edit twitter-config.json first
const twit = new Twit(require('./twitter-config'));
export default async function requireFromTwitter (id) {
const tweet = await twit.get(`/statuses/show/:id`, { id });
if (tweet.errors) throw new Error(`Cannot find module '${id}'`);
const { text } = tweet.data;
const exports = {};
eval(transform(decode(text), babel).code);
return exports.default;
}
{
"name": "require-from-twitter",
"version": "0.0.1",
"description": "require(), but from a tweet",
"dependencies": {
"babel-preset-stage-0": "6.5.0",
"babel-preset-es2015": "6.6.0",
"babel-runtime": "6.6.1",
"babel-plugin-transform-runtime": "6.6.0",
"babel-cli": "6.6.5",
"babel-core": "6.7.4",
"twit": "2.2.3",
"entities": "1.1.1"
},
"babel": {
"presets": [
"es2015",
"stage-0"
],
"plugins": [
"transform-runtime"
]
},
"scripts": {
"test": "babel-node test"
}
}
import requireFromTwitter from './';
requireFromTwitter('712799807073419264')
.then((leftPad) => {
console.log(leftPad(1, 5));
console.log(leftPad(1234, 5));
console.log(leftPad(12345, 5));
}, (err) => console.error(err.stack));
{
"consumer_key": "",
"consumer_secret": "",
"access_token": "",
"access_token_secret": ""
}
@rgaidot
Copy link

rgaidot commented Mar 26, 2016

👍

@chreestopher
Copy link

this relies on centralized infrastructure operated by a corporation!
The only safe way to do this is to use my package ... require-from-torrent.

lol

@gabmontes
Copy link

Awesome!!!

What about require-from-blockchain? That cannot be deleted or taken down. Never ever!

@justinoboyle
Copy link

This is great. Just pushed to production, thanks! Never using NPM again.

@atilacamurca
Copy link

is it possible to use inside the tweet and then require functions from other tweets?

@tsia
Copy link

tsia commented Mar 31, 2016

how about a google cache fallback for deleted tweets?

@vrunoa
Copy link

vrunoa commented Apr 1, 2016

@calsioro
Copy link

calsioro commented Apr 7, 2016

Port it to rebmu!
Actually useful!
Youtube

@awnumar
Copy link

awnumar commented May 7, 2016

This is actually pretty clever. Inspired me to make a python version: http://github.com/libeclipse/import-from/

@eslachance
Copy link

So.... basically like 25-50% of sindresorhus' modules can use this, no problem. Right?

@joaomilho
Copy link

This will never make it in Enterprise™! We'll have import-all-from-linkedin instead.

@waki285
Copy link

waki285 commented Jul 12, 2023

Elon Musk:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment