mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 07:33:01 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			30 lines
		
	
	
		
			952 B
		
	
	
	
		
			Janet
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			952 B
		
	
	
	
		
			Janet
		
	
	
	
	
	
| # An example of using Janet's extensible module system to import files from
 | |
| # URL. To try this, run `janet -l ./examples/urlloader.janet` from the command
 | |
| # line, and then at the REPL type:
 | |
| #
 | |
| # (import https://raw.githubusercontent.com/janet-lang/janet/master/examples/colors.janet :as c)
 | |
| #
 | |
| # This will import a file using curl. You can then try:
 | |
| #
 | |
| # (print (c/color :green "Hello!"))
 | |
| #
 | |
| # This is a bit of a toy example (it just shells out to curl), but it is very
 | |
| # powerful and will work well in many cases.
 | |
| 
 | |
| (defn- load-url
 | |
|   [url args]
 | |
|   (def p (os/spawn ["curl" url "-s"] :p {:out :pipe}))
 | |
|   (def res (dofile (p :out) :source url ;args))
 | |
|   (:wait p)
 | |
|   res)
 | |
| 
 | |
| (defn- check-http-url
 | |
|   [path]
 | |
|   (if (or (string/has-prefix? "http://" path)
 | |
|           (string/has-prefix? "https://" path))
 | |
|     path))
 | |
| 
 | |
| # Add the module loader and path tuple to right places
 | |
| (array/push module/paths [check-http-url :janet-http])
 | |
| (put module/loaders :janet-http load-url)
 | 
