Page Menu
Home
Sealhub
Search
Configure Global Search
Log In
Files
F12657082
jdd-context.ts
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Referenced Files
None
Subscribers
None
jdd-context.ts
View Options
import
fs
from
"fs/promises"
;
import
type
{
KoaResponsiveImageRouter
}
from
"koa-responsive-image-router"
;
import
{
marked
}
from
"marked"
;
import
mime
from
"mime-types"
;
import
os
from
"os"
;
import
path
from
"path"
;
import
{
FlatTemplatable
}
from
"tempstream"
;
import
{
v4
as
uuidv4
}
from
"uuid"
;
import
{
insert_nbsp
}
from
"./utils/insert_nbsp"
;
export
type
FSFilePointer
=
{
type
:
"path"
;
path
:
string
;
mimetype
?:
string
};
export
type
FilePointer
=
|
FSFilePointer
|
{
type
:
"buffer"
;
mimetype
:
string
;
buffer
:
Buffer
};
export
interface
JDDContext
{
render_image
:
(
file_id
:
string
|
null
,
args
:
Parameters
<
KoaResponsiveImageRouter
[
"image"
]
>
[
1
]
)
=>
FlatTemplatable
;
render_markdown
:
(
markdown
:
string
)
=>
FlatTemplatable
;
encode_file
:
(
photo
:
FilePointer
,
persistent
:
boolean
)
=>
Promise
<
string
>
;
decode_file
:
(
id
:
string
)
=>
Promise
<
FSFilePointer
|
null
>
;
}
export
function
makeSimplePhotoStorage
(
persistent_dir_path
:
string
)
{
const
tmpdir
=
os
.
tmpdir
();
async
function
encode_file
(
file_pointer
:
FilePointer
,
persistent
:
boolean
)
{
const
needs_to_be_saved
=
file_pointer
.
type
==
"buffer"
||
(
!
file_pointer
.
path
.
startsWith
(
persistent_dir_path
)
&&
!
file_pointer
.
path
.
startsWith
(
tmpdir
));
if
(
needs_to_be_saved
)
{
const
buffer
=
file_pointer
.
type
===
"buffer"
?
file_pointer
.
buffer
:
await
fs
.
readFile
(
file_pointer
.
path
);
const
file_id
=
uuidv4
()
+
"."
+
(
file_pointer
.
type
===
"buffer"
?
mime
.
extension
(
file_pointer
.
mimetype
)
:
"data"
);
const
file_path
=
path
.
resolve
(
persistent
?
persistent_dir_path
:
tmpdir
,
file_id
);
await
fs
.
writeFile
(
file_path
,
buffer
);
return
JSON
.
stringify
({
persistent
,
file_id
});
}
else
{
return
JSON
.
stringify
({
persistent
:
file_pointer
.
path
.
startsWith
(
persistent_dir_path
),
file_id
:
path
.
basename
(
file_pointer
.
path
),
});
}
}
async
function
decode_file
(
id
:
string
)
:
Promise
<
FSFilePointer
|
null
>
{
try
{
const
{
persistent
,
file_id
}
=
JSON
.
parse
(
id
);
return
{
type
:
"path"
,
path
:
path
.
resolve
(
persistent
?
persistent_dir_path
:
tmpdir
,
file_id
),
};
}
catch
(
e
)
{
console
.
error
(
e
);
return
null
;
}
}
return
{
decode_file
,
encode_file
,
};
}
export
const
simpleJDDContext
:
JDDContext
=
{
render_image
:
(
file_id
)
=>
file_id
?
/* HTML */
`<img src="file://
${
file_id
}
}" />`
:
""
,
render_markdown
:
(
string
)
=>
string
?
marked
.
parse
(
insert_nbsp
(
string
))
:
""
,
...
makeSimplePhotoStorage
(
path
.
resolve
(
process
.
cwd
(),
"./uploaded-images"
)),
};
File Metadata
Details
Attached
Mime Type
text/x-java
Expires
Fri, Nov 28, 15:16 (7 h, 18 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1053685
Default Alt Text
jdd-context.ts (2 KB)
Attached To
Mode
rJDD jdd
Attached
Detach File
Event Timeline
Log In to Comment