sphinx-pyrepl-web 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sphinx_pyrepl_web/__init__.py +180 -0
- sphinx_pyrepl_web/pyrepl/chunk-94xkfg72.js +1 -0
- sphinx_pyrepl_web/pyrepl/chunk-e4mhg83d.js +3 -0
- sphinx_pyrepl_web/pyrepl/chunk-ftjk4vft.js +2 -0
- sphinx_pyrepl_web/pyrepl/chunk-jfxv8vy0.js +36 -0
- sphinx_pyrepl_web/pyrepl/chunk-vx91qfkd.js +2 -0
- sphinx_pyrepl_web/pyrepl/chunk-x20ze186.js +16 -0
- sphinx_pyrepl_web/pyrepl/pyrepl.esm.js +697 -0
- sphinx_pyrepl_web/pyrepl/pyrepl.js +1 -0
- sphinx_pyrepl_web/pyrepl/version.txt +1 -0
- sphinx_pyrepl_web-0.1.0.dist-info/METADATA +116 -0
- sphinx_pyrepl_web-0.1.0.dist-info/RECORD +14 -0
- sphinx_pyrepl_web-0.1.0.dist-info/WHEEL +4 -0
- sphinx_pyrepl_web-0.1.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"""A Sphinx extension for embedding pyrepl-web Python REPLs in documentation."""
|
|
2
|
+
|
|
3
|
+
__version__ = "0.1.0"
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
from docutils import nodes
|
|
9
|
+
from docutils.parsers.rst import directives
|
|
10
|
+
from sphinx.application import Sphinx
|
|
11
|
+
from sphinx.util.docutils import SphinxDirective
|
|
12
|
+
from sphinx.util.fileutil import copy_asset_file
|
|
13
|
+
|
|
14
|
+
PYREPL_DIR = Path(__file__).parent / "pyrepl"
|
|
15
|
+
STARTUP_FILES_KEY = "pyrepl-startup-files"
|
|
16
|
+
REPLAY_FILES_KEY = "pyrepl-replay-files"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def setup(app: Sphinx):
|
|
20
|
+
"""Setup the extension."""
|
|
21
|
+
app.add_config_value("pyrepl_js", "../pyrepl.js", "env")
|
|
22
|
+
app.add_directive("py-repl", PyRepl)
|
|
23
|
+
app.connect("doctree-read", doctree_read)
|
|
24
|
+
app.connect("html-page-context", add_html_context)
|
|
25
|
+
app.connect("env-updated", copy_asset_files)
|
|
26
|
+
return {"version": __version__, "parallel_read_safe": True}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def strip_doctest_prompts(lines: list[str]) -> list[str]:
|
|
30
|
+
"""Remove leading ``>>> `` / ``... `` prompts from doctest-style lines."""
|
|
31
|
+
result: list[str] = []
|
|
32
|
+
for line in lines:
|
|
33
|
+
stripped = line.lstrip()
|
|
34
|
+
if stripped.startswith(">>> "):
|
|
35
|
+
result.append(stripped[4:])
|
|
36
|
+
elif stripped.startswith("... "):
|
|
37
|
+
result.append(stripped[4:])
|
|
38
|
+
else:
|
|
39
|
+
result.append(line)
|
|
40
|
+
return result
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class PyRepl(SphinxDirective):
|
|
44
|
+
"""Embed a pyrepl-web ``<py-repl>`` element."""
|
|
45
|
+
|
|
46
|
+
has_content = True
|
|
47
|
+
option_spec = {
|
|
48
|
+
"theme": directives.unchanged,
|
|
49
|
+
"packages": directives.unchanged,
|
|
50
|
+
"repl-title": directives.unchanged,
|
|
51
|
+
"src": directives.path,
|
|
52
|
+
"no-header": directives.flag,
|
|
53
|
+
"no-buttons": directives.flag,
|
|
54
|
+
"readonly": directives.flag,
|
|
55
|
+
"no-banner": directives.flag,
|
|
56
|
+
"replay": directives.flag,
|
|
57
|
+
"silent": directives.flag,
|
|
58
|
+
"strip-prompts": directives.flag,
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
def run(self):
|
|
62
|
+
env = self.env
|
|
63
|
+
attrs: list[str] = []
|
|
64
|
+
|
|
65
|
+
for option, attr in (
|
|
66
|
+
("theme", "theme"),
|
|
67
|
+
("packages", "packages"),
|
|
68
|
+
("repl-title", "repl-title"),
|
|
69
|
+
):
|
|
70
|
+
if option in self.options:
|
|
71
|
+
value = self.options[option]
|
|
72
|
+
attrs.append(f'{attr}="{value}"')
|
|
73
|
+
|
|
74
|
+
for flag in ("no-header", "no-buttons", "readonly", "no-banner"):
|
|
75
|
+
if flag in self.options:
|
|
76
|
+
attrs.append(flag)
|
|
77
|
+
|
|
78
|
+
has_body = bool(self.content)
|
|
79
|
+
force_replay = "replay" in self.options
|
|
80
|
+
force_silent = "silent" in self.options
|
|
81
|
+
|
|
82
|
+
if "src" in self.options:
|
|
83
|
+
_, abs_path = self.env.relfn2path(self.options["src"])
|
|
84
|
+
path = Path(abs_path)
|
|
85
|
+
try:
|
|
86
|
+
path.read_text(encoding="utf-8")
|
|
87
|
+
except OSError as exc:
|
|
88
|
+
raise self.error(f"Could not read file: {exc}") from exc
|
|
89
|
+
self.env.note_dependency(path)
|
|
90
|
+
rel_src = path.relative_to(Path(self.env.srcdir)).as_posix()
|
|
91
|
+
startup_files = json.loads(
|
|
92
|
+
self.env.metadata[self.env.docname].setdefault(
|
|
93
|
+
STARTUP_FILES_KEY, "[]"
|
|
94
|
+
)
|
|
95
|
+
)
|
|
96
|
+
startup_files.append(str(path))
|
|
97
|
+
self.env.metadata[self.env.docname][STARTUP_FILES_KEY] = json.dumps(
|
|
98
|
+
startup_files
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
if force_replay and not has_body:
|
|
102
|
+
attrs.append(f'src="{rel_src}"')
|
|
103
|
+
attrs.append("replay")
|
|
104
|
+
elif not (force_silent and not has_body):
|
|
105
|
+
attrs.append(f'src="{rel_src}"')
|
|
106
|
+
|
|
107
|
+
if has_body:
|
|
108
|
+
body_lines = strip_doctest_prompts(list(self.content))
|
|
109
|
+
body_text = "\n".join(body_lines) + "\n"
|
|
110
|
+
|
|
111
|
+
replay_files = json.loads(
|
|
112
|
+
self.env.metadata[self.env.docname].setdefault(REPLAY_FILES_KEY, "{}")
|
|
113
|
+
)
|
|
114
|
+
counter = len(replay_files) + 1
|
|
115
|
+
script_name = f"{env.docname.replace('/', '-')}-{counter}.py"
|
|
116
|
+
replay_files[script_name] = body_text
|
|
117
|
+
self.env.metadata[self.env.docname][REPLAY_FILES_KEY] = json.dumps(
|
|
118
|
+
replay_files
|
|
119
|
+
)
|
|
120
|
+
replay_src = f"_static/pyrepl/{script_name}"
|
|
121
|
+
attrs.append(f'replay-src="{replay_src}"')
|
|
122
|
+
|
|
123
|
+
self.env.metadata[self.env.docname]["pyrepl"] = True
|
|
124
|
+
attr_str = (" " + " ".join(attrs)) if attrs else ""
|
|
125
|
+
return [nodes.raw("", f"<py-repl{attr_str}></py-repl>\n", format="html")]
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def doctree_read(app: Sphinx, doctree: nodes.document):
|
|
129
|
+
"""Mark pages that use the py-repl directive."""
|
|
130
|
+
if app.env.metadata[app.env.docname].get("pyrepl"):
|
|
131
|
+
doctree["pyrepl"] = True
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def add_html_context(
|
|
135
|
+
app: Sphinx, pagename: str, templatename: str, context, doctree: nodes.document
|
|
136
|
+
):
|
|
137
|
+
"""Load pyrepl-web JavaScript on pages that contain a REPL."""
|
|
138
|
+
if doctree and "pyrepl" in doctree:
|
|
139
|
+
app.add_js_file(app.config.pyrepl_js)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def copy_asset_files(app, _):
|
|
143
|
+
"""Copy vendored pyrepl assets and startup scripts into HTML output."""
|
|
144
|
+
if app.builder.format != "html":
|
|
145
|
+
return
|
|
146
|
+
|
|
147
|
+
outdir = Path(app.builder.outdir)
|
|
148
|
+
if PYREPL_DIR.is_dir():
|
|
149
|
+
for asset in PYREPL_DIR.iterdir():
|
|
150
|
+
if asset.is_file():
|
|
151
|
+
copy_asset_file(str(asset.resolve()), str(outdir.resolve()))
|
|
152
|
+
|
|
153
|
+
replay_dest = outdir / "_static" / "pyrepl"
|
|
154
|
+
for docname, metadata in app.env.metadata.items():
|
|
155
|
+
raw = metadata.get(REPLAY_FILES_KEY)
|
|
156
|
+
if not raw:
|
|
157
|
+
continue
|
|
158
|
+
replay_files = json.loads(raw)
|
|
159
|
+
if not replay_files:
|
|
160
|
+
continue
|
|
161
|
+
replay_dest.mkdir(parents=True, exist_ok=True)
|
|
162
|
+
for name, content in replay_files.items():
|
|
163
|
+
(replay_dest / name).write_text(content, encoding="utf-8")
|
|
164
|
+
|
|
165
|
+
srcdir = Path(app.builder.srcdir)
|
|
166
|
+
copied = set()
|
|
167
|
+
for docname, metadata in app.env.metadata.items():
|
|
168
|
+
raw = metadata.get(STARTUP_FILES_KEY)
|
|
169
|
+
if not raw:
|
|
170
|
+
continue
|
|
171
|
+
for abs_path in json.loads(raw):
|
|
172
|
+
path = Path(abs_path)
|
|
173
|
+
key = str(path.resolve())
|
|
174
|
+
if key in copied:
|
|
175
|
+
continue
|
|
176
|
+
copied.add(key)
|
|
177
|
+
rel = path.relative_to(srcdir)
|
|
178
|
+
dest = outdir / rel
|
|
179
|
+
dest.parent.mkdir(parents=True, exist_ok=True)
|
|
180
|
+
copy_asset_file(str(path.resolve()), str(dest.resolve()))
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-ftjk4vft.js";function a(e){if(typeof e!=="string")throw TypeError("Path must be a string. Received "+JSON.stringify(e))}function A(e,r){var n="",l=0,f=-1,i=0,s;for(var t=0;t<=e.length;++t){if(t<e.length)s=e.charCodeAt(t);else if(s===47)break;else s=47;if(s===47){if(f===t-1||i===1);else if(f!==t-1&&i===2){if(n.length<2||l!==2||n.charCodeAt(n.length-1)!==46||n.charCodeAt(n.length-2)!==46){if(n.length>2){var u=n.lastIndexOf("/");if(u!==n.length-1){if(u===-1)n="",l=0;else n=n.slice(0,u),l=n.length-1-n.lastIndexOf("/");f=t,i=0;continue}}else if(n.length===2||n.length===1){n="",l=0,f=t,i=0;continue}}if(r){if(n.length>0)n+="/..";else n="..";l=2}}else{if(n.length>0)n+="/"+e.slice(f+1,t);else n=e.slice(f+1,t);l=t-f-1}f=t,i=0}else if(s===46&&i!==-1)++i;else i=-1}return n}function h(e,r){var n=r.dir||r.root,l=r.base||(r.name||"")+(r.ext||"");if(!n)return l;if(n===r.root)return n+l;return n+e+l}function d(){var e="",r=!1,n;for(var l=arguments.length-1;l>=-1&&!r;l--){var f;if(l>=0)f=arguments[l];else{if(n===void 0)n=process.cwd();f=n}if(a(f),f.length===0)continue;e=f+"/"+e,r=f.charCodeAt(0)===47}if(e=A(e,!r),r)if(e.length>0)return"/"+e;else return"/";else if(e.length>0)return e;else return"."}function m(e){if(a(e),e.length===0)return".";var r=e.charCodeAt(0)===47,n=e.charCodeAt(e.length-1)===47;if(e=A(e,!r),e.length===0&&!r)e=".";if(e.length>0&&n)e+="/";if(r)return"/"+e;return e}function b(e){return a(e),e.length>0&&e.charCodeAt(0)===47}function k(){if(arguments.length===0)return".";var e;for(var r=0;r<arguments.length;++r){var n=arguments[r];if(a(n),n.length>0)if(e===void 0)e=n;else e+="/"+n}if(e===void 0)return".";return m(e)}function y(e,r){if(a(e),a(r),e===r)return"";if(e=d(e),r=d(r),e===r)return"";var n=1;for(;n<e.length;++n)if(e.charCodeAt(n)!==47)break;var l=e.length,f=l-n,i=1;for(;i<r.length;++i)if(r.charCodeAt(i)!==47)break;var s=r.length,t=s-i,u=f<t?f:t,c=-1,o=0;for(;o<=u;++o){if(o===u){if(t>u){if(r.charCodeAt(i+o)===47)return r.slice(i+o+1);else if(o===0)return r.slice(i+o)}else if(f>u){if(e.charCodeAt(n+o)===47)c=o;else if(o===0)c=0}break}var v=e.charCodeAt(n+o),C=r.charCodeAt(i+o);if(v!==C)break;else if(v===47)c=o}var g="";for(o=n+c+1;o<=l;++o)if(o===l||e.charCodeAt(o)===47)if(g.length===0)g+="..";else g+="/..";if(g.length>0)return g+r.slice(i+c);else{if(i+=c,r.charCodeAt(i)===47)++i;return r.slice(i)}}function S(e){return e}function w(e){if(a(e),e.length===0)return".";var r=e.charCodeAt(0),n=r===47,l=-1,f=!0;for(var i=e.length-1;i>=1;--i)if(r=e.charCodeAt(i),r===47){if(!f){l=i;break}}else f=!1;if(l===-1)return n?"/":".";if(n&&l===1)return"//";return e.slice(0,l)}function P(e,r){if(r!==void 0&&typeof r!=="string")throw TypeError('"ext" argument must be a string');a(e);var n=0,l=-1,f=!0,i;if(r!==void 0&&r.length>0&&r.length<=e.length){if(r.length===e.length&&r===e)return"";var s=r.length-1,t=-1;for(i=e.length-1;i>=0;--i){var u=e.charCodeAt(i);if(u===47){if(!f){n=i+1;break}}else{if(t===-1)f=!1,t=i+1;if(s>=0)if(u===r.charCodeAt(s)){if(--s===-1)l=i}else s=-1,l=t}}if(n===l)l=t;else if(l===-1)l=e.length;return e.slice(n,l)}else{for(i=e.length-1;i>=0;--i)if(e.charCodeAt(i)===47){if(!f){n=i+1;break}}else if(l===-1)f=!1,l=i+1;if(l===-1)return"";return e.slice(n,l)}}function D(e){a(e);var r=-1,n=0,l=-1,f=!0,i=0;for(var s=e.length-1;s>=0;--s){var t=e.charCodeAt(s);if(t===47){if(!f){n=s+1;break}continue}if(l===-1)f=!1,l=s+1;if(t===46){if(r===-1)r=s;else if(i!==1)i=1}else if(r!==-1)i=-1}if(r===-1||l===-1||i===0||i===1&&r===l-1&&r===n+1)return"";return e.slice(r,l)}function L(e){if(e===null||typeof e!=="object")throw TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return h("/",e)}function T(e){a(e);var r={root:"",dir:"",base:"",ext:"",name:""};if(e.length===0)return r;var n=e.charCodeAt(0),l=n===47,f;if(l)r.root="/",f=1;else f=0;var i=-1,s=0,t=-1,u=!0,c=e.length-1,o=0;for(;c>=f;--c){if(n=e.charCodeAt(c),n===47){if(!u){s=c+1;break}continue}if(t===-1)u=!1,t=c+1;if(n===46){if(i===-1)i=c;else if(o!==1)o=1}else if(i!==-1)o=-1}if(i===-1||t===-1||o===0||o===1&&i===t-1&&i===s+1){if(t!==-1)if(s===0&&l)r.base=r.name=e.slice(1,t);else r.base=r.name=e.slice(s,t)}else{if(s===0&&l)r.name=e.slice(1,i),r.base=e.slice(1,t);else r.name=e.slice(s,i),r.base=e.slice(s,t);r.ext=e.slice(i,t)}if(s>0)r.dir=e.slice(0,s-1);else if(l)r.dir="/";return r}var R="/",_=":",z=((e)=>(e.posix=e,e))({resolve:d,normalize:m,isAbsolute:b,join:k,relative:y,_makeLong:S,dirname:w,basename:P,extname:D,format:L,parse:T,sep:R,delimiter:_,win32:null,posix:null}),E=z;export{R as sep,d as resolve,y as relative,z as posix,T as parse,m as normalize,k as join,b as isAbsolute,L as format,D as extname,w as dirname,_ as delimiter,E as default,P as basename,S as _makeLong};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{i as $}from"./chunk-ftjk4vft.js";var __dirname="/tmp/vendor-pyrepl-oxf1jz4v/pyrepl-web/node_modules/pyodide";var O0=Object.defineProperty,H=(G,Q)=>O0(G,"name",{value:Q,configurable:!0}),m=((G)=>$)(function(G){return $.apply(this,arguments)}),R0=(()=>{for(var G=new Uint8Array(128),Q=0;Q<64;Q++)G[Q<26?Q+65:Q<52?Q+71:Q<62?Q-4:Q*4-205]=Q;return(W)=>{for(var z=W.length,Y=new Uint8Array((z-(W[z-1]=="=")-(W[z-2]=="="))*3/4|0),X=0,B=0;X<z;){var J=G[W.charCodeAt(X++)],K=G[W.charCodeAt(X++)],M=G[W.charCodeAt(X++)],V=G[W.charCodeAt(X++)];Y[B++]=J<<2|K>>4,Y[B++]=K<<4|M>>2,Y[B++]=M<<6|V}return Y}})();function p(G){return!isNaN(parseFloat(G))&&isFinite(G)}H(p,"_isNumber");function T(G){return G.charAt(0).toUpperCase()+G.substring(1)}H(T,"_capitalize");function g(G){return function(){return this[G]}}H(g,"_getter");var R=["isConstructor","isEval","isNative","isToplevel"],U=["columnNumber","lineNumber"],F=["fileName","functionName","source"],U0=["args"],F0=["evalOrigin"],S=R.concat(U,F,U0,F0);function j(G){if(G)for(var Q=0;Q<S.length;Q++)G[S[Q]]!==void 0&&this["set"+T(S[Q])](G[S[Q]])}H(j,"StackFrame");j.prototype={getArgs:H(function(){return this.args},"getArgs"),setArgs:H(function(G){if(Object.prototype.toString.call(G)!=="[object Array]")throw TypeError("Args must be an Array");this.args=G},"setArgs"),getEvalOrigin:H(function(){return this.evalOrigin},"getEvalOrigin"),setEvalOrigin:H(function(G){if(G instanceof j)this.evalOrigin=G;else if(G instanceof Object)this.evalOrigin=new j(G);else throw TypeError("Eval Origin must be an Object or StackFrame")},"setEvalOrigin"),toString:H(function(){var G=this.getFileName()||"",Q=this.getLineNumber()||"",W=this.getColumnNumber()||"",z=this.getFunctionName()||"";return this.getIsEval()?G?"[eval] ("+G+":"+Q+":"+W+")":"[eval]:"+Q+":"+W:z?z+" ("+G+":"+Q+":"+W+")":G+":"+Q+":"+W},"toString")};j.fromString=H(function(G){var Q=G.indexOf("("),W=G.lastIndexOf(")"),z=G.substring(0,Q),Y=G.substring(Q+1,W).split(","),X=G.substring(W+1);if(X.indexOf("@")===0)var B=/@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(X,""),J=B[1],K=B[2],M=B[3];return new j({functionName:z,args:Y||void 0,fileName:J,lineNumber:K||void 0,columnNumber:M||void 0})},"StackFrame$$fromString");for(D=0;D<R.length;D++)j.prototype["get"+T(R[D])]=g(R[D]),j.prototype["set"+T(R[D])]=function(G){return function(Q){this[G]=!!Q}}(R[D]);var D;for(L=0;L<U.length;L++)j.prototype["get"+T(U[L])]=g(U[L]),j.prototype["set"+T(U[L])]=function(G){return function(Q){if(!p(Q))throw TypeError(G+" must be a Number");this[G]=Number(Q)}}(U[L]);var L;for(A=0;A<F.length;A++)j.prototype["get"+T(F[A])]=g(F[A]),j.prototype["set"+T(F[A])]=function(G){return function(Q){this[G]=String(Q)}}(F[A]);var A,w=j;function u(){var G=/^\s*at .*(\S+:\d+|\(native\))/m,Q=/^(eval@)?(\[native code])?$/;return{parse:H(function(W){if(W.stack&&W.stack.match(G))return this.parseV8OrIE(W);if(W.stack)return this.parseFFOrSafari(W);throw Error("Cannot parse given Error object")},"ErrorStackParser$$parse"),extractLocation:H(function(W){if(W.indexOf(":")===-1)return[W];var z=/(.+?)(?::(\d+))?(?::(\d+))?$/,Y=z.exec(W.replace(/[()]/g,""));return[Y[1],Y[2]||void 0,Y[3]||void 0]},"ErrorStackParser$$extractLocation"),parseV8OrIE:H(function(W){var z=W.stack.split(`
|
|
2
|
+
`).filter(function(Y){return!!Y.match(G)},this);return z.map(function(Y){Y.indexOf("(eval ")>-1&&(Y=Y.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(,.*$)/g,""));var X=Y.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/^.*?\s+/,""),B=X.match(/ (\(.+\)$)/);X=B?X.replace(B[0],""):X;var J=this.extractLocation(B?B[1]:X),K=B&&X||void 0,M=["eval","<anonymous>"].indexOf(J[0])>-1?void 0:J[0];return new w({functionName:K,fileName:M,lineNumber:J[1],columnNumber:J[2],source:Y})},this)},"ErrorStackParser$$parseV8OrIE"),parseFFOrSafari:H(function(W){var z=W.stack.split(`
|
|
3
|
+
`).filter(function(Y){return!Y.match(Q)},this);return z.map(function(Y){if(Y.indexOf(" > eval")>-1&&(Y=Y.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),Y.indexOf("@")===-1&&Y.indexOf(":")===-1)return new w({functionName:Y});var X=/((.*".+"[^@]*)?[^@]*)(?:@)/,B=Y.match(X),J=B&&B[1]?B[1]:void 0,K=this.extractLocation(Y.replace(X,""));return new w({functionName:J,fileName:K[0],lineNumber:K[1],columnNumber:K[2],source:Y})},this)},"ErrorStackParser$$parseFFOrSafari")}}H(u,"ErrorStackParser");var k0=new u,I0=k0;function l(){if(typeof API<"u"&&API!==globalThis.API)return API.runtimeEnv;let G=typeof Bun<"u",Q=typeof Deno<"u",W=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&!1,z=typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Chrome")===-1&&navigator.userAgent.indexOf("Safari")>-1,Y=typeof read=="function"&&typeof load=="function",X=typeof navigator=="object"&&navigator.userAgent?.includes("Cloudflare-Workers");return d({IN_BUN:G,IN_DENO:Q,IN_NODE:W,IN_SAFARI:z,IN_SHELL:Y,IN_WORKERD:X})}H(l,"getGlobalRuntimeEnv");var x=l();function d(G){let Q=G.IN_NODE&&typeof f<"u"&&P0&&typeof m=="function"&&typeof __dirname=="string",W=G.IN_NODE&&!Q,z=!G.IN_NODE&&!G.IN_DENO&&!G.IN_BUN,Y=z&&typeof window<"u"&&typeof window.document<"u"&&typeof document.createElement=="function"&&"sessionStorage"in window&&typeof globalThis.importScripts!="function",X=z&&typeof globalThis.WorkerGlobalScope<"u"&&typeof globalThis.self<"u"&&globalThis.self instanceof globalThis.WorkerGlobalScope;if(X&&c())throw Error("Classic web workers are not supported");let B={...G,IN_BROWSER:z,IN_BROWSER_MAIN_THREAD:Y,IN_BROWSER_WEB_WORKER:X,IN_NODE_COMMONJS:Q,IN_NODE_ESM:W};if(!(B.IN_BROWSER_MAIN_THREAD||B.IN_BROWSER_WEB_WORKER||B.IN_NODE||B.IN_SHELL||B.IN_WORKERD))throw Error(`Cannot determine runtime environment: ${JSON.stringify(B)}`);return B}H(d,"calculateDerivedFlags");function c(){try{return globalThis.importScripts("data:text/javascript,"),!0}catch{return!1}}H(c,"isClassicWorker");var s,E,N0,_,h;async function y(){if(!x.IN_NODE||(s=(await import("./chunk-vx91qfkd.js")).default,_=await import("node:fs"),h=await import("node:fs/promises"),N0=(await import("node:vm")).default,E=await import("./chunk-94xkfg72.js"),v=E.sep,typeof m<"u"))return;let G=_,Q=await import("./chunk-x20ze186.js"),W=await import("ws"),z=await import("node:child_process"),Y={fs:G,crypto:Q,ws:W,child_process:z};globalThis.require=function(X){return Y[X]}}H(y,"initNodeModules");function a(G,Q){return E.resolve(Q||".",G)}H(a,"node_resolvePath");function i(G,Q){return Q===void 0&&(Q=location),new URL(G,Q).toString()}H(i,"browser_resolvePath");var I;x.IN_NODE?I=a:x.IN_SHELL?I=H((G)=>G,"resolvePath"):I=i;var v;x.IN_NODE||(v="/");function o(G,Q){return G.startsWith("file://")&&(G=G.slice(7)),G.includes("://")?{response:fetch(G)}:{binary:h.readFile(G).then((W)=>new Uint8Array(W.buffer,W.byteOffset,W.byteLength))}}H(o,"node_getBinaryResponse");function n(G,Q){if(G.startsWith("file://")&&(G=G.slice(7)),G.includes("://"))throw Error("Shell cannot fetch urls");return{binary:Promise.resolve(new Uint8Array(readbuffer(G)))}}H(n,"shell_getBinaryResponse");function r(G,Q){let W=new URL(G,location);return{response:fetch(W,Q?{integrity:Q}:{})}}H(r,"browser_getBinaryResponse");var N;x.IN_NODE?N=o:x.IN_SHELL?N=n:N=r;async function t(G,Q){let{response:W,binary:z}=N(G,Q);if(z)return z;let Y=await W;if(!Y.ok)throw Error(`Failed to load '${G}': request failed.`);return new Uint8Array(await Y.arrayBuffer())}H(t,"loadBinaryFile");var b;x.IN_NODE?b=e:b=H(async(G)=>await import(G),"loadScript");async function e(G){return G.startsWith("file://")&&(G=G.slice(7)),G.includes("://")?await import(G):await import(s.pathToFileURL(G).href)}H(e,"nodeLoadScript");async function G0(G){if(x.IN_NODE){await y();let Q=await h.readFile(G,{encoding:"utf8"});return JSON.parse(Q)}else if(x.IN_SHELL){let Q=read(G);return JSON.parse(Q)}else return await(await fetch(G)).json()}H(G0,"loadLockFile");async function Q0(){if(x.IN_NODE_COMMONJS)return __dirname;let G;try{throw Error()}catch(z){G=z}let Q=I0.parse(G)[0].fileName;if(x.IN_NODE&&!Q.startsWith("file://")&&(Q=`file://${Q}`),x.IN_NODE_ESM){let z=await import("./chunk-94xkfg72.js");return(await import("./chunk-vx91qfkd.js")).fileURLToPath(z.dirname(Q))}let W=Q.lastIndexOf(v);if(W===-1)throw Error("Could not extract indexURL path from pyodide module location. Please pass the indexURL explicitly to loadPyodide.");return Q.slice(0,W)}H(Q0,"calculateDirname");function W0(G){return G.substring(0,G.lastIndexOf("/")+1)||globalThis.location?.toString()||"."}H(W0,"calculateInstallBaseUrl");function X0(G){let Q=G.FS,W=G.FS.filesystems.MEMFS,z=G.PATH,Y={DIR_MODE:16895,FILE_MODE:33279,mount:H(function(X){if(!X.opts.fileSystemHandle)throw Error("opts.fileSystemHandle is required");return W.mount.apply(null,arguments)},"mount"),syncfs:H(async(X,B,J)=>{try{let K=Y.getLocalSet(X),M=await Y.getRemoteSet(X),V=B?M:K,C=B?K:M;await Y.reconcile(X,V,C),J(null)}catch(K){J(K)}},"syncfs"),getLocalSet:H((X)=>{let B=Object.create(null);function J(V){return V!=="."&&V!==".."}H(J,"isRealDir");function K(V){return(C)=>z.join2(V,C)}H(K,"toAbsolute");let M=Q.readdir(X.mountpoint).filter(J).map(K(X.mountpoint));for(;M.length;){let V=M.pop(),C=Q.stat(V);Q.isDir(C.mode)&&M.push.apply(M,Q.readdir(V).filter(J).map(K(V))),B[V]={timestamp:C.mtime,mode:C.mode}}return{type:"local",entries:B}},"getLocalSet"),getRemoteSet:H(async(X)=>{let B=Object.create(null),J=await S0(X.opts.fileSystemHandle);for(let[K,M]of J)K!=="."&&(B[z.join2(X.mountpoint,K)]={timestamp:M.kind==="file"?new Date((await M.getFile()).lastModified):new Date,mode:M.kind==="file"?Y.FILE_MODE:Y.DIR_MODE});return{type:"remote",entries:B,handles:J}},"getRemoteSet"),loadLocalEntry:H((X)=>{let B=Q.lookupPath(X,{}).node,J=Q.stat(X);if(Q.isDir(J.mode))return{timestamp:J.mtime,mode:J.mode};if(Q.isFile(J.mode))return B.contents=W.getFileDataAsTypedArray(B),{timestamp:J.mtime,mode:J.mode,contents:B.contents};throw Error("node type not supported")},"loadLocalEntry"),storeLocalEntry:H((X,B)=>{if(Q.isDir(B.mode))Q.mkdirTree(X,B.mode);else if(Q.isFile(B.mode))Q.writeFile(X,B.contents,{canOwn:!0});else throw Error("node type not supported");Q.chmod(X,B.mode),Q.utime(X,B.timestamp,B.timestamp)},"storeLocalEntry"),removeLocalEntry:H((X)=>{var B=Q.stat(X);Q.isDir(B.mode)?Q.rmdir(X):Q.isFile(B.mode)&&Q.unlink(X)},"removeLocalEntry"),loadRemoteEntry:H(async(X)=>{if(X.kind==="file"){let B=await X.getFile();return{contents:new Uint8Array(await B.arrayBuffer()),mode:Y.FILE_MODE,timestamp:new Date(B.lastModified)}}else{if(X.kind==="directory")return{mode:Y.DIR_MODE,timestamp:new Date};throw Error("unknown kind: "+X.kind)}},"loadRemoteEntry"),storeRemoteEntry:H(async(X,B,J)=>{let K=X.get(z.dirname(B)),M=Q.isFile(J.mode)?await K.getFileHandle(z.basename(B),{create:!0}):await K.getDirectoryHandle(z.basename(B),{create:!0});if(M.kind==="file"){let V=await M.createWritable();await V.write(J.contents),await V.close()}X.set(B,M)},"storeRemoteEntry"),removeRemoteEntry:H(async(X,B)=>{await X.get(z.dirname(B)).removeEntry(z.basename(B)),X.delete(B)},"removeRemoteEntry"),reconcile:H(async(X,B,J)=>{let K=0,M=[];Object.keys(B.entries).forEach(function(Z){let q=B.entries[Z],O=J.entries[Z];(!O||Q.isFile(q.mode)&&q.timestamp.getTime()>O.timestamp.getTime())&&(M.push(Z),K++)}),M.sort();let V=[];if(Object.keys(J.entries).forEach(function(Z){B.entries[Z]||(V.push(Z),K++)}),V.sort().reverse(),!K)return;let C=B.type==="remote"?B.handles:J.handles;for(let Z of M){let q=z.normalize(Z.replace(X.mountpoint,"/")).substring(1);if(J.type==="local"){let O=C.get(q),A0=await Y.loadRemoteEntry(O);Y.storeLocalEntry(Z,A0)}else{let O=Y.loadLocalEntry(Z);await Y.storeRemoteEntry(C,q,O)}}for(let Z of V)if(J.type==="local")Y.removeLocalEntry(Z);else{let q=z.normalize(Z.replace(X.mountpoint,"/")).substring(1);await Y.removeRemoteEntry(C,q)}},"reconcile")};G.FS.filesystems.NATIVEFS_ASYNC=Y}H(X0,"initializeNativeFS");var S0=H(async(G)=>{let Q=[];async function W(Y){for await(let X of Y.values())Q.push(X),X.kind==="directory"&&await W(X)}H(W,"collect"),await W(G);let z=new Map;z.set(".",G);for(let Y of Q){let X=(await G.resolve(Y)).join("/");z.set(X,Y)}return z},"getFsHandles"),g0=R0("AGFzbQEAAAABDANfAGAAAW9gAW8BfwMDAgECBygCE0pzdl9HZXRFcnJvcl9pbXBvcnQAAA5Kc3ZFcnJvcl9DaGVjawABChMCBwD7AQD7GwsJACAA+xr7FAAL"),w0=async function(){if(!(globalThis.navigator&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&typeof navigator.maxTouchPoints<"u"&&navigator.maxTouchPoints>1)))try{let G=await WebAssembly.compile(g0);return await WebAssembly.instantiate(G)}catch(G){if(G instanceof WebAssembly.CompileError)return;throw G}}();async function Y0(){let G=await w0;if(G)return G.exports;let Q=Symbol("error marker");return{Jsv_GetError_import:H(()=>Q,"Jsv_GetError_import"),JsvError_Check:H((W)=>W===Q,"JsvError_Check")}}H(Y0,"getJsvErrorImport");function z0(G){let Q={config:G,runtimeEnv:x},W={noImageDecoding:!0,noAudioDecoding:!0,noWasmDecoding:!1,preRun:V0(G),print:G.stdout,printErr:G.stderr,onExit(z){W.exitCode=z},thisProgram:G._sysExecutable,arguments:G.args,API:Q,locateFile:H((z)=>G.indexURL+z,"locateFile"),instantiateWasm:Z0(G.indexURL)};return W}H(z0,"createSettings");function B0(G){return function(Q){let W="/";try{Q.FS.mkdirTree(G)}catch(z){console.error(`Error occurred while making a home directory '${G}':`),console.error(z),console.error(`Using '${W}' for a home directory instead`),G=W}Q.FS.chdir(G)}}H(B0,"createHomeDirectory");function H0(G){return function(Q){Object.assign(Q.ENV,G)}}H(H0,"setEnvironment");function J0(G){return G?[async(Q)=>{Q.addRunDependency("fsInitHook");try{await G(Q.FS,{sitePackages:Q.API.sitePackages})}finally{Q.removeRunDependency("fsInitHook")}}]:[]}H(J0,"callFsInitHook");function K0(G){let Q=G.HEAPU32[G._Py_Version>>>2],W=Q>>>24&255,z=Q>>>16&255,Y=Q>>>8&255;return[W,z,Y]}H(K0,"computeVersionTuple");function M0(G){let Q=t(G);return async(W)=>{W.API.pyVersionTuple=K0(W);let[z,Y]=W.API.pyVersionTuple;W.FS.mkdirTree("/lib"),W.API.sitePackages=`/lib/python${z}.${Y}/site-packages`,W.FS.mkdirTree(W.API.sitePackages),W.addRunDependency("install-stdlib");try{let X=await Q;W.FS.writeFile(`/lib/python${z}${Y}.zip`,X)}catch(X){console.error("Error occurred while installing the standard library:"),console.error(X)}finally{W.removeRunDependency("install-stdlib")}}}H(M0,"installStdlib");function V0(G){let Q;return G.stdLibURL!=null?Q=G.stdLibURL:Q=G.indexURL+"python_stdlib.zip",[M0(Q),B0(G.env.HOME),H0(G.env),X0,...J0(G.fsInit)]}H(V0,"getFileSystemInitializationFuncs");function Z0(G){if(typeof WasmOffsetConverter<"u")return;let{binary:Q,response:W}=N(G+"pyodide.asm.wasm"),z=Y0();return function(Y,X){return async function(){let{Jsv_GetError_import:B,JsvError_Check:J}=await z;Y.env.Jsv_GetError_import=B,Y.env.JsvError_Check=J;try{let K;W?K=await WebAssembly.instantiateStreaming(W,Y):K=await WebAssembly.instantiate(await Q,Y);let{instance:M,module:V}=K;X(M,V)}catch(K){console.warn("wasm instantiation failed!"),console.warn(K)}}(),{}}}H(Z0,"getInstantiateWasmFunc");var E0="314.0.1";function k(G){return G===void 0||G.endsWith("/")?G:G+"/"}H(k,"withTrailingSlash");var P=E0;async function $0(G={}){if(await y(),G.lockFileContents&&G.lockFileURL)throw Error("Can't pass both lockFileContents and lockFileURL");let Q=G.indexURL||await Q0();if(Q=k(I(Q)),G.packageBaseUrl=k(G.packageBaseUrl),G.cdnUrl=k(G.packageBaseUrl??`https://cdn.jsdelivr.net/pyodide/v${P}/full/`),!G.lockFileContents){let Y=G.lockFileURL??Q+"pyodide-lock.json";G.lockFileContents=G0(Y),G.packageBaseUrl??=W0(Y)}G.indexURL=Q,G.packageCacheDir&&(G.packageCacheDir=k(I(G.packageCacheDir)));let W={jsglobals:globalThis,stdin:globalThis.prompt?()=>globalThis.prompt():void 0,args:[],env:{},packages:[],packageCacheDir:G.packageBaseUrl,enableRunUntilComplete:!0,checkAPIVersion:!0,BUILD_ID:"2e12ea28d5e4e258977cb79dd418ccf6593712466fd333300c63fda4fc9257c2"},z=Object.assign(W,G);return z.env.HOME??="/home/pyodide",z.env.PYTHONINSPECT??="1",z}H($0,"initializeConfiguration");function j0(G){let Q=z0(G),W=Q.API;return W.lockFilePromise=Promise.resolve(G.lockFileContents),Q}H(j0,"createEmscriptenSettings");async function x0(G){if(G.createPyodideModule)return G.createPyodideModule;let Q=`${G.indexURL}pyodide.asm.mjs`;return(await b(Q)).default}H(x0,"loadWasmScript");async function C0(G,Q){if(!G._loadSnapshot)return;let W=await G._loadSnapshot,z=ArrayBuffer.isView(W)?W:new Uint8Array(W);return Q.noInitialRun=!0,Q.INITIAL_MEMORY=z.length,z}H(C0,"prepareSnapshot");async function T0(G,Q){let W=await G(Q);if(Q.exitCode!==void 0)throw new W.ExitStatus(Q.exitCode);return W}H(T0,"instantiatePyodideModule");function q0(G,Q){let W=G.API;if(Q.pyproxyToStringRepr&&W.setPyProxyToStringMethod(!0),Q.convertNullToNone&&W.setCompatNullToNone(!0),Q.toJsLiteralMap&&W.setCompatToJsLiteralMap(!0),W.version!==P&&Q.checkAPIVersion)throw Error(`Pyodide version does not match: '${P}' <==> '${W.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);G.locateFile=(z)=>{throw z.endsWith(".so")?Error(`Failed to find dynamic library "${z}"`):Error(`Unexpected call to locateFile("${z}")`)}}H(q0,"configureAPI");function D0(G,Q,W){let z=G.API,Y;return Q&&(Y=z.restoreSnapshot(Q)),z.finalizeBootstrap(Y,W._snapshotDeserializer)}H(D0,"bootstrapPyodide");async function L0(G,Q){let W=G._api;return W.sys.path.insert(0,""),W._pyodide.set_excepthook(),await W.packageIndexReady,W.initializeStreams(Q.stdin,Q.stdout,Q.stderr),G}H(L0,"finalizeSetup");async function b0(G={}){let Q=await $0(G),W=j0(Q),z=await x0(Q),Y=await C0(Q,W),X=await T0(z,W);q0(X,Q);let B=D0(X,Y,Q);return await L0(B,Q)}H(b0,"loadPyodide");export{P as version,b0 as loadPyodide};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var H=Object.create;var{defineProperty:o,getOwnPropertyNames:I,getOwnPropertyDescriptor:D}=Object,J=Object.prototype.hasOwnProperty;function K(a){return this[a]}var S=(a)=>{var b=(z??=new WeakMap).get(a),c;if(b)return b;if(b=o({},"__esModule",{value:!0}),a&&typeof a==="object"||typeof a==="function"){for(var f of I(a))if(!J.call(b,f))o(b,f,{get:K.bind(a,f),enumerable:!(c=D(a,f))||c.enumerable})}return z.set(a,b),b},z,T=(a,b)=>()=>(b||a((b={exports:{}}).exports,b),b.exports),A=(a,b)=>{return Object.defineProperty(a,"name",{value:b,enumerable:!1,configurable:!0}),a},L=(a)=>a;function M(a,b){this[a]=L.bind(null,b)}var U=(a,b)=>{for(var c in b)o(a,c,{get:b[c],enumerable:!0,configurable:!0,set:M.bind(b,c)})};var E=(a,b)=>(b=Symbol[a])?b:Symbol.for("Symbol."+a),p=(a)=>{throw TypeError(a)},N=(a,b,c)=>(b in a)?o(a,b,{enumerable:!0,configurable:!0,writable:!0,value:c}):a[b]=c;var v=(a,b,c)=>b.has(a)||p("Cannot "+c),O=(a,b)=>Object(b)!==b?p('Cannot use the "in" operator on this value'):a.has(b),B=(a,b,c)=>(v(a,b,"read from private field"),c?c.call(a):b.get(a));var C=(a,b,c,f)=>(v(a,b,"write to private field"),f?f.call(a,c):b.set(a,c),c),P=(a,b,c)=>(v(a,b,"access private method"),c),V=(a)=>[,,,H(a?.[E("metadata")]??null)],F=["class","method","getter","setter","accessor","field","value","get","set"],n=(a)=>a!==void 0&&typeof a!=="function"?p("Function expected"):a,Q=(a,b,c,f,e)=>({kind:F[a],name:b,metadata:f,addInitializer:(g)=>c._?p("Already initialized"):e.push(n(g||null))}),R=(a,b)=>N(b,E("metadata"),a[3]),W=(a,b,c,f)=>{for(var e=0,g=a[b>>1],l=g&&g.length;e<l;e++)b&1?g[e].call(c):f=g[e].call(c,f);return f},X=(a,b,c,f,e,g)=>{var l,i,w,m,q,d=b&7,r=!!(b&8),k=!!(b&16),s=d>3?a.length+1:d?r?1:2:0,x=F[d+5],y=d>3&&(a[s-1]=[]),G=a[s]||(a[s]=[]),j=d&&(!k&&!r&&(e=e.prototype),d<5&&(d>3||!k)&&D(d<4?e:{get[c](){return B(this,g)},set[c](h){C(this,g,h)}},c));d?k&&d<4&&A(g,(d>2?"set ":d>1?"get ":"")+c):A(e,c);for(var t=f.length-1;t>=0;t--){if(m=Q(d,c,w={},a[3],G),d){if(m.static=r,m.private=k,q=m.access={has:k?(h)=>O(e,h):(h)=>(c in h)},d^3)q.get=k?(h)=>(d^1?B:P)(h,e,d^4?g:j.get):(h)=>h[c];if(d>2)q.set=k?(h,u)=>C(h,e,u,d^4?g:j.set):(h,u)=>h[c]=u}if(i=(0,f[t])(d?d<4?k?g:j[x]:d>4?void 0:{get:j.get,set:j.set}:e,m),w._=1,d^4||i===void 0)n(i)&&(d>4?y.unshift(i):d?k?g=i:j[x]=i:e=i);else if(typeof i!=="object"||i===null)p("Object expected");else n(l=i.get)&&(j.get=l),n(l=i.set)&&(j.set=l),n(l=i.init)&&y.unshift(l)}return d||R(a,e),j&&o(e,c,j),k?d^4?g:j:e},Y=(a,b)=>()=>(a&&(b=a(a=0)),b);var Z=((a)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(b,c)=>(typeof require<"u"?require:b)[c]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});
|
|
2
|
+
export{S as a,T as b,U as c,V as d,R as e,W as f,X as g,Y as h,Z as i};
|