mirror of
https://github.com/janet-lang/janet
synced 2025-01-26 23:24:44 +00:00
Add urlloader example.
Demonstrate loading files from URL.
This commit is contained in:
parent
0280deccae
commit
840610facf
@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file.
|
|||||||
|
|
||||||
## 1.0.0 - ??
|
## 1.0.0 - ??
|
||||||
|
|
||||||
|
- Add optional filters to `module/paths` to further refine import methods.
|
||||||
- Add keyword arguments via `&keys` in parameter list.
|
- Add keyword arguments via `&keys` in parameter list.
|
||||||
- Add `-k` flag for flychecking source.
|
- Add `-k` flag for flychecking source.
|
||||||
- Change signature to `compile` function.
|
- Change signature to `compile` function.
|
||||||
|
28
examples/urlloader.janet
Normal file
28
examples/urlloader.janet
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# 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 repl, and then:
|
||||||
|
#
|
||||||
|
# (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 f (file/popen (string "curl " url)))
|
||||||
|
(def res (dofile f :source url ;args))
|
||||||
|
(try (file/close f) ([err] nil))
|
||||||
|
res)
|
||||||
|
|
||||||
|
(defn- check-http-url
|
||||||
|
[path]
|
||||||
|
(or (string/has-prefix? "http://" path)
|
||||||
|
(string/has-prefix? "https://" path)))
|
||||||
|
|
||||||
|
# Add the module loader and path tuple to right places
|
||||||
|
(array/push module/paths ["HTTP" :janet-http check-http-url identity])
|
||||||
|
(put module/loaders :janet-http load-url)
|
@ -1638,7 +1638,7 @@
|
|||||||
(defn- mod-filter
|
(defn- mod-filter
|
||||||
[x path]
|
[x path]
|
||||||
(case (type x)
|
(case (type x)
|
||||||
:nil true
|
:nil path
|
||||||
:string (string/has-suffix? x path)
|
:string (string/has-suffix? x path)
|
||||||
(x path)))
|
(x path)))
|
||||||
|
|
||||||
@ -1651,12 +1651,17 @@
|
|||||||
(def parts (string/split "/" path))
|
(def parts (string/split "/" path))
|
||||||
(def name (last parts))
|
(def name (last parts))
|
||||||
(var ret nil)
|
(var ret nil)
|
||||||
(each [p mod-kind checker] module/paths
|
(each [p mod-kind checker resolver] module/paths
|
||||||
(when (mod-filter checker path)
|
(when (mod-filter checker path)
|
||||||
|
(if resolver
|
||||||
|
(when-let [res (resolver path)]
|
||||||
|
(set ret [res mod-kind])
|
||||||
|
(break))
|
||||||
|
(do
|
||||||
(def fullpath (expand-path-name p name path))
|
(def fullpath (expand-path-name p name path))
|
||||||
(when (fexists fullpath)
|
(when (fexists fullpath)
|
||||||
(set ret [fullpath mod-kind])
|
(set ret [fullpath mod-kind])
|
||||||
(break))))
|
(break))))))
|
||||||
(if ret ret
|
(if ret ret
|
||||||
(let [expander (fn [[t _ chk]]
|
(let [expander (fn [[t _ chk]]
|
||||||
(when (mod-filter chk path)
|
(when (mod-filter chk path)
|
||||||
@ -1683,8 +1688,11 @@
|
|||||||
"Evaluate a file in a new environment and return the new environment."
|
"Evaluate a file in a new environment and return the new environment."
|
||||||
[path & args]
|
[path & args]
|
||||||
(def {:exit exit-on-error
|
(def {:exit exit-on-error
|
||||||
|
:source source
|
||||||
:compile-only compile-only} (table ;args))
|
:compile-only compile-only} (table ;args))
|
||||||
(def f (file/open path))
|
(def f (if (= (type path) :core/file)
|
||||||
|
path
|
||||||
|
(file/open path)))
|
||||||
(def newenv (make-env))
|
(def newenv (make-env))
|
||||||
(defn chunks [buf _] (file/read f 2048 buf))
|
(defn chunks [buf _] (file/read f 2048 buf))
|
||||||
(defn bp [&opt x y]
|
(defn bp [&opt x y]
|
||||||
@ -1704,8 +1712,8 @@
|
|||||||
(debug/stacktrace f x)
|
(debug/stacktrace f x)
|
||||||
(if exit-on-error (os/exit 1))))
|
(if exit-on-error (os/exit 1))))
|
||||||
:compile-only compile-only
|
:compile-only compile-only
|
||||||
:source path})
|
:source (or source (if (= f path) "<anonymous>" path))})
|
||||||
(file/close f)
|
(when (not= f path) (file/close f))
|
||||||
(table/setproto newenv nil))
|
(table/setproto newenv nil))
|
||||||
|
|
||||||
(def module/loaders
|
(def module/loaders
|
||||||
|
Loading…
Reference in New Issue
Block a user