mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-11-23 10:07:19 +00:00
Add first release of AWS plugin
Tools for working with Amazon Web Services: * Templates for saving a TiddlyWiki as a single JavaScript file in a ZIP file that can be executed as an AWS Lambda function. In this form, TiddlyWiki is a self contained single file containing both code and data, just like the standalone HTML file configuration * Commands that can be used to interact with AWS services, under both the Node.js and Lambda configurations of TiddlyWiki
This commit is contained in:
parent
c179dc93cb
commit
a346888213
3
editions/aws/tiddlers/HelloThere.tid
Normal file
3
editions/aws/tiddlers/HelloThere.tid
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
title: HelloThere
|
||||||
|
|
||||||
|
This wiki provides a starting point for working with the AWS plugin for TiddlyWiki under Node.js.
|
18
editions/aws/tiddlywiki.info
Normal file
18
editions/aws/tiddlywiki.info
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"description": "Amazon Web Services edition",
|
||||||
|
"plugins": [
|
||||||
|
"tiddlywiki/async",
|
||||||
|
"tiddlywiki/jszip",
|
||||||
|
"tiddlywiki/aws"
|
||||||
|
],
|
||||||
|
"themes": [
|
||||||
|
"tiddlywiki/vanilla",
|
||||||
|
"tiddlywiki/snowwhite"
|
||||||
|
],
|
||||||
|
"build": {
|
||||||
|
"index": [
|
||||||
|
"--rendertiddler","$:/core/save/all","index.html","text/plain"],
|
||||||
|
"lambda": [
|
||||||
|
"--rendertiddler","$:/plugins/tiddlywiki/aws/lambdas/main","index.js","text/plain"]
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
created: 20170703193252423
|
||||||
|
modified: 20170703193353918
|
||||||
|
tags: OfficialPlugins
|
||||||
|
title: Amazon Web Services Plugin
|
||||||
|
type: text/vnd.tiddlywiki
|
||||||
|
|
||||||
|
The Amazon Web Services Plugin provides several tools for working with Amazon Web Services:
|
||||||
|
|
||||||
|
* Templates for saving a TiddlyWiki as a single JavaScript file in a ZIP file that can be executed as an AWS Lambda function. In this form, TiddlyWiki is a self contained single file containing both code and data, just like the standalone HTML file configuration
|
||||||
|
* Commands that can be used to interact with AWS services, under both the Node.js and Lambda configurations of TiddlyWiki
|
3
plugins/tiddlywiki/aws/docs/commands.tid
Normal file
3
plugins/tiddlywiki/aws/docs/commands.tid
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
title: $:/plugins/tiddlywiki/aws/commands
|
||||||
|
|
||||||
|
{{$:/language/Help/aws}}
|
39
plugins/tiddlywiki/aws/docs/help.tid
Normal file
39
plugins/tiddlywiki/aws/docs/help.tid
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
title: $:/language/Help/aws
|
||||||
|
description: Operations for working with Amazon Web Services
|
||||||
|
|
||||||
|
! Commands
|
||||||
|
|
||||||
|
Perform operation on Amazon Web Services
|
||||||
|
|
||||||
|
```
|
||||||
|
--aws <sub-command> [<parameter> ...]
|
||||||
|
```
|
||||||
|
|
||||||
|
! "s3-savetiddler" subcommand
|
||||||
|
|
||||||
|
Save a raw tiddler to a file in an S3 bucket.
|
||||||
|
|
||||||
|
```
|
||||||
|
--aws s3-savetiddler <title> <region> <bucket> <filename> <zipfilename>
|
||||||
|
```
|
||||||
|
|
||||||
|
* ''title'': title of the tiddler to save
|
||||||
|
* ''bucket'': name of the bucket to save the saved file
|
||||||
|
* ''filename'': filename of the saved file
|
||||||
|
* ''zipfilename'': optional; the file will be packed into a ZIP file with the specified name
|
||||||
|
|
||||||
|
! "s3-rendertiddler" subcommand
|
||||||
|
|
||||||
|
Save the results of rendering a tiddler to a file in an S3 bucket.
|
||||||
|
|
||||||
|
```
|
||||||
|
--aws s3-rendertiddler <title> <region> <bucket> <filename> <type> <template> <zipfilename> <savetype>
|
||||||
|
```
|
||||||
|
|
||||||
|
* ''title'': title of the tiddler to render
|
||||||
|
* ''bucket'': name of the bucket to save the rendered file
|
||||||
|
* ''filename'': filename of the rendered file
|
||||||
|
* ''type'': optional render type (defaults to "text/html")
|
||||||
|
* ''template'': optional template (defaults to directly rendering the tiddler without using a template)
|
||||||
|
* ''zipfilename'': optional; the file will be packed into a ZIP file with the specified name
|
||||||
|
* ''savetype'': optional; the MIME type for the saved file (defaults to ''type'' or "text/html")
|
40
plugins/tiddlywiki/aws/docs/lambda.tid
Normal file
40
plugins/tiddlywiki/aws/docs/lambda.tid
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
title: $:/plugins/tiddlywiki/aws/lambda
|
||||||
|
|
||||||
|
! Template
|
||||||
|
|
||||||
|
The template [[$:/plugins/tiddlywiki/aws/lambdas/main]] transcludes everything required to render a TiddlyWiki as an AWS Lambda function.
|
||||||
|
|
||||||
|
The Lambda is build with this command:
|
||||||
|
|
||||||
|
```
|
||||||
|
tiddlywiki editions/aws --rendertiddler $:/plugins/tiddlywiki/aws/lambdas/main index.js text/plain
|
||||||
|
```
|
||||||
|
|
||||||
|
Or:
|
||||||
|
|
||||||
|
```
|
||||||
|
tiddlywiki editions/aws --build lambda
|
||||||
|
```
|
||||||
|
|
||||||
|
! Execution
|
||||||
|
|
||||||
|
The Lambda boot code looks for an array of tiddlers to load in `event.tiddlers`, and an array of commands to execute in `event.commands`. For example:
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"commands": [
|
||||||
|
"--aws","s3-rendertiddler","HelloThere","eu-west-2","my-bucket-name","rendered.html"
|
||||||
|
],
|
||||||
|
"tiddlers": [
|
||||||
|
{
|
||||||
|
"title": "HelloThere",
|
||||||
|
"text": "Hello from {{Platform}}."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Platform",
|
||||||
|
"text": "TiddlyWiki"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
6
plugins/tiddlywiki/aws/docs/readme.tid
Normal file
6
plugins/tiddlywiki/aws/docs/readme.tid
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
title: $:/plugins/tiddlywiki/aws/readme
|
||||||
|
|
||||||
|
This plugin provides several tools for working with Amazon Web Services:
|
||||||
|
|
||||||
|
* Templates for saving a TiddlyWiki as a single JavaScript file in a ZIP file that can be executed as an AWS Lambda function. In this form, TiddlyWiki is a self contained single file containing both code and data, just like the standalone HTML file configuration
|
||||||
|
* Commands that can be used to interact with AWS services, under both the Node.js and Lambda configurations of TiddlyWiki
|
51
plugins/tiddlywiki/aws/docs/setup.tid
Normal file
51
plugins/tiddlywiki/aws/docs/setup.tid
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
title: $:/plugins/tiddlywiki/aws/setup
|
||||||
|
|
||||||
|
! Introduction
|
||||||
|
|
||||||
|
!! About Amazon Web Services
|
||||||
|
|
||||||
|
Amazon Web Services is a collection of online APIs to services that allow cloud-based applications to be built. It is a commercial service that charges usage fees, but there is a free tier that is sufficient for most personal use.
|
||||||
|
|
||||||
|
An ordinary Amazon account can be used to sign into the AWS console at https://aws.amazon.com/console/. Here you can see a menu of the available services and use interactive dashboards to inspect and configure resources.
|
||||||
|
|
||||||
|
! Getting Started
|
||||||
|
|
||||||
|
!! Setup Amazon Credentials
|
||||||
|
|
||||||
|
The main root account has super-user privileges across all the resources owned by the account. The Identity and Access Management (IAM) service allows subsidiary user accounts to be created for specific tasks. Here we create a new user account for running TiddlyWiki code:
|
||||||
|
|
||||||
|
# Visit the AWS console at https://aws.amazon.com/console/
|
||||||
|
# Choose ''IAM'' from the ''Services'' dropdown menu
|
||||||
|
# Choose ''Users'' from the left hand menu
|
||||||
|
# Click the ''Create New Users'' button
|
||||||
|
# Enter ''tiddlywiki'' as the first user name
|
||||||
|
# Check the box labelled //Generate an access key for each user//
|
||||||
|
# Click the ''Create'' button
|
||||||
|
# Click the ''Download Credentials'' button to download a file called "credentials.csv"
|
||||||
|
#* The file contains three values:
|
||||||
|
#*# ''User Name'': Username for
|
||||||
|
#*# ''Password'':
|
||||||
|
#*# ''Direct Signin Link'':
|
||||||
|
# Create a text file with the following content:
|
||||||
|
#> <div><pre><code>[default]
|
||||||
|
aws_access_key_id = <your access key>
|
||||||
|
aws_secret_access_key = <your secret access key>
|
||||||
|
</code></pre></div>
|
||||||
|
# Save the file as `~/.aws/credentials` (Mac/Linux) or `?` (Windows)
|
||||||
|
|
||||||
|
!! Download or Clone TiddlyWiki Repository
|
||||||
|
|
||||||
|
Even if you have already installed TiddlyWiki, you should create a new installation for working with the AWS plugin.
|
||||||
|
|
||||||
|
Visit the TiddlyWiki5 repository at https://github.com/Jermolene/TiddlyWiki5. You can either download or clone a copy:
|
||||||
|
|
||||||
|
* Download to get up and running quickly
|
||||||
|
* Clone to make it easier to upgrade in the future
|
||||||
|
|
||||||
|
!! Install `aws-sdk`
|
||||||
|
|
||||||
|
Open a command terminal, switch to the directory where TiddlyWiki is installed and run the following command:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install aws-sdk
|
||||||
|
```
|
121
plugins/tiddlywiki/aws/modules/command.js
Normal file
121
plugins/tiddlywiki/aws/modules/command.js
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
/*\
|
||||||
|
title: $:/plugins/tiddlywiki/aws/command.js
|
||||||
|
type: application/javascript
|
||||||
|
module-type: command
|
||||||
|
|
||||||
|
--aws command
|
||||||
|
|
||||||
|
\*/
|
||||||
|
(function(){
|
||||||
|
|
||||||
|
/*jslint node: true, browser: true */
|
||||||
|
/*global $tw: false */
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var async,
|
||||||
|
awsUtils;
|
||||||
|
|
||||||
|
exports.info = {
|
||||||
|
name: "aws",
|
||||||
|
synchronous: false
|
||||||
|
};
|
||||||
|
|
||||||
|
var Command = function(params,commander,callback) {
|
||||||
|
async = require("$:/plugins/tiddlywiki/async/async.js");
|
||||||
|
awsUtils = require("$:/plugins/tiddlywiki/aws/utils.js");
|
||||||
|
this.params = params;
|
||||||
|
this.commander = commander;
|
||||||
|
this.callback = callback;
|
||||||
|
};
|
||||||
|
|
||||||
|
Command.prototype.execute = function() {
|
||||||
|
var self = this,
|
||||||
|
wiki = this.commander.wiki,
|
||||||
|
subCommand = this.params[0],
|
||||||
|
fn = this.subCommands[subCommand];
|
||||||
|
if(!fn) {
|
||||||
|
return this.callback("AWS: Unknown subcommand")
|
||||||
|
}
|
||||||
|
fn.bind(this)();
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
Command.prototype.subCommands = {};
|
||||||
|
|
||||||
|
// Render a tiddler to an S3 bucket
|
||||||
|
Command.prototype.subCommands["s3-rendertiddler"] = function() {
|
||||||
|
var self = this,
|
||||||
|
wiki = this.commander.wiki,
|
||||||
|
title = this.params[1],
|
||||||
|
region = this.params[2],
|
||||||
|
bucket = this.params[3],
|
||||||
|
filename = this.params[4],
|
||||||
|
type = this.params[5] || "text/html",
|
||||||
|
template = this.params[6],
|
||||||
|
zipfilename = this.params[7],
|
||||||
|
saveType = this.params[8] || type,
|
||||||
|
variables = {};
|
||||||
|
// Process the template if present
|
||||||
|
if(template) {
|
||||||
|
variables.currentTiddler = title;
|
||||||
|
title = template;
|
||||||
|
}
|
||||||
|
// Render the tiddler
|
||||||
|
var text = this.commander.wiki.renderTiddler(type,title,{variables: variables}),
|
||||||
|
type = "text/plain",
|
||||||
|
encoding = ($tw.config.contentTypeInfo[type] || {encoding: "utf8"}).encoding;
|
||||||
|
// Zip it if needed
|
||||||
|
if(zipfilename) {
|
||||||
|
var JSZip = require("$:/plugins/tiddlywiki/jszip/jszip.js"),
|
||||||
|
zip = new JSZip();
|
||||||
|
zip.file(filename,new Buffer(text,encoding));
|
||||||
|
text = zip.generate({type: "base64"});
|
||||||
|
type = "application/zip";
|
||||||
|
filename = zipfilename;
|
||||||
|
}
|
||||||
|
// Save the file
|
||||||
|
async.series([
|
||||||
|
awsUtils.putFile.bind(null,region,bucket,filename,text,saveType)
|
||||||
|
],
|
||||||
|
function(err,results){
|
||||||
|
self.callback(err,results);
|
||||||
|
});
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Save a tiddler to an S3 bucket
|
||||||
|
Command.prototype.subCommands["s3-savetiddler"] = function() {
|
||||||
|
var self = this,
|
||||||
|
wiki = this.commander.wiki,
|
||||||
|
title = this.params[1],
|
||||||
|
region = this.params[2],
|
||||||
|
bucket = this.params[3],
|
||||||
|
filename = this.params[4],
|
||||||
|
zipfilename = this.params[5],
|
||||||
|
tiddler = wiki.getTiddler(title),
|
||||||
|
text = tiddler.fields.text,
|
||||||
|
type = tiddler.fields.type,
|
||||||
|
encoding = ($tw.config.contentTypeInfo[type] || {encoding: "utf8"}).encoding;
|
||||||
|
// Zip it if needed
|
||||||
|
if(zipfilename) {
|
||||||
|
var JSZip = require("$:/plugins/tiddlywiki/jszip/jszip.js"),
|
||||||
|
zip = new JSZip();
|
||||||
|
zip.file(filename,new Buffer(text,encoding));
|
||||||
|
text = zip.generate({type: "base64"});
|
||||||
|
type = "application/zip";
|
||||||
|
filename = zipfilename;
|
||||||
|
}
|
||||||
|
// Save the file
|
||||||
|
async.series([
|
||||||
|
awsUtils.putFile.bind(null,region,bucket,filename,text,type)
|
||||||
|
],
|
||||||
|
function(err,results){
|
||||||
|
self.callback(err,results);
|
||||||
|
});
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Command = Command;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
37
plugins/tiddlywiki/aws/modules/init.js
Normal file
37
plugins/tiddlywiki/aws/modules/init.js
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/*\
|
||||||
|
title: $:/plugins/tiddlywiki/aws/init.js
|
||||||
|
type: application/javascript
|
||||||
|
module-type: startup
|
||||||
|
|
||||||
|
AWS initialisation
|
||||||
|
|
||||||
|
\*/
|
||||||
|
(function(){
|
||||||
|
|
||||||
|
/*jslint node: true, browser: true */
|
||||||
|
/*global $tw: false */
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
// Export name and synchronous status
|
||||||
|
exports.name = "aws-init";
|
||||||
|
exports.before = ["startup"];
|
||||||
|
exports.synchronous = true;
|
||||||
|
|
||||||
|
exports.startup = function() {
|
||||||
|
var logger = new $tw.utils.Logger("aws");
|
||||||
|
if($tw.node) {
|
||||||
|
try {
|
||||||
|
require("aws-sdk");
|
||||||
|
} catch(e) {
|
||||||
|
logger.alert("The plugin 'tiddlywiki/aws' requires the aws-sdk to be installed. Run 'npm install aws-sdk' in the root of the TiddlyWiki repository");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!$tw.modules.titles["$:/plugins/tiddlywiki/async/async.js"]) {
|
||||||
|
logger.alert("The plugin 'tiddlywiki/aws' requires the 'tiddlywiki/async' plugin to be installed");
|
||||||
|
}
|
||||||
|
if(!$tw.modules.titles["$:/plugins/tiddlywiki/jszip/jszip.js"]) {
|
||||||
|
logger.alert("The plugin 'tiddlywiki/aws' requires the 'tiddlywiki/jszip' plugin to be installed");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
})();
|
36
plugins/tiddlywiki/aws/modules/utils.js
Normal file
36
plugins/tiddlywiki/aws/modules/utils.js
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/*\
|
||||||
|
title: $:/plugins/tiddlywiki/aws/utils.js
|
||||||
|
type: application/javascript
|
||||||
|
module-type: library
|
||||||
|
|
||||||
|
AWS utility functions
|
||||||
|
|
||||||
|
\*/
|
||||||
|
(function(){
|
||||||
|
|
||||||
|
/*jslint node: true, browser: true */
|
||||||
|
/*global $tw: false */
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/*
|
||||||
|
Put a file to an S3 bucket
|
||||||
|
*/
|
||||||
|
function putFile(region,bucketName,title,text,type,callback) {
|
||||||
|
console.log("Writing file",bucketName,title,type)
|
||||||
|
var AWS = require("aws-sdk"),
|
||||||
|
s3bucket = new AWS.S3({
|
||||||
|
region: region
|
||||||
|
}),
|
||||||
|
encoding = ($tw.config.contentTypeInfo[type] || {encoding: "utf8"}).encoding,
|
||||||
|
params = {
|
||||||
|
Bucket: bucketName,
|
||||||
|
Key: title,
|
||||||
|
Body: new Buffer(text,encoding),
|
||||||
|
ContentType: type || "text/plain"
|
||||||
|
};
|
||||||
|
s3bucket.upload(params,callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.putFile = putFile;
|
||||||
|
|
||||||
|
})();
|
7
plugins/tiddlywiki/aws/plugin.info
Normal file
7
plugins/tiddlywiki/aws/plugin.info
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"title": "$:/plugins/tiddlywiki/aws",
|
||||||
|
"description": "Tools for working with Amazon Web Services",
|
||||||
|
"author": "JeremyRuston",
|
||||||
|
"core-version": ">=5.0.0",
|
||||||
|
"list": "readme setup commands lambda"
|
||||||
|
}
|
26
plugins/tiddlywiki/aws/templates/lambda/handler.tid
Normal file
26
plugins/tiddlywiki/aws/templates/lambda/handler.tid
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
title: $:/plugins/tiddlywiki/aws/lambda/handler
|
||||||
|
type: text/plain
|
||||||
|
|
||||||
|
/*
|
||||||
|
TiddlyWiki for AWS
|
||||||
|
*/
|
||||||
|
|
||||||
|
exports.handler = function(event,context,callback) {
|
||||||
|
// Initialise the boot prefix
|
||||||
|
global.$tw = _bootprefix();
|
||||||
|
// Some default package info
|
||||||
|
$tw.packageInfo = lambdaPackageInfo;
|
||||||
|
// Load any tiddlers from the package
|
||||||
|
$tw.preloadTiddlerArray(lambdaTiddlers);
|
||||||
|
// Load any tiddlers from the event
|
||||||
|
if(event.tiddlers) {
|
||||||
|
$tw.preloadTiddlerArray(event.tiddlers);
|
||||||
|
}
|
||||||
|
// Load the commands from the event
|
||||||
|
$tw.boot.argv = (event.commands || []).slice(0);
|
||||||
|
// Boot the TW5 app
|
||||||
|
_boot($tw);
|
||||||
|
$tw.boot.boot(function() {
|
||||||
|
callback(null,"TiddlyWiki execution successful");
|
||||||
|
});
|
||||||
|
}
|
19
plugins/tiddlywiki/aws/templates/lambda/main.tid
Normal file
19
plugins/tiddlywiki/aws/templates/lambda/main.tid
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
title: $:/plugins/tiddlywiki/aws/lambdas/main
|
||||||
|
|
||||||
|
\rules only filteredtranscludeinline transcludeinline
|
||||||
|
|
||||||
|
/*
|
||||||
|
{{ $:/core/copyright.txt }}
|
||||||
|
*/
|
||||||
|
|
||||||
|
{{$:/plugins/tiddlywiki/aws/lambda/tiddlers}}
|
||||||
|
|
||||||
|
{{$:/plugins/tiddlywiki/aws/lambda/sjcl}}
|
||||||
|
|
||||||
|
{{ $:/boot/bootprefix.js ||$:/core/templates/plain-text-tiddler}}
|
||||||
|
|
||||||
|
{{ $:/boot/boot.js ||$:/core/templates/plain-text-tiddler}}
|
||||||
|
|
||||||
|
{{$:/plugins/tiddlywiki/aws/lambda/package-info}}
|
||||||
|
|
||||||
|
{{ $:/plugins/tiddlywiki/aws/lambda/handler ||$:/core/templates/plain-text-tiddler}}
|
11
plugins/tiddlywiki/aws/templates/lambda/package-info.tid
Normal file
11
plugins/tiddlywiki/aws/templates/lambda/package-info.tid
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
title: $:/plugins/tiddlywiki/aws/lambda/package-info
|
||||||
|
|
||||||
|
\rules only filteredtranscludeinline transcludeinline codeinline macrocallinline
|
||||||
|
`
|
||||||
|
var lambdaPackageInfo = {
|
||||||
|
"version": "`<<version>>`",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8.2"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
`
|
17
plugins/tiddlywiki/aws/templates/lambda/sjcl.tid
Normal file
17
plugins/tiddlywiki/aws/templates/lambda/sjcl.tid
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
title: $:/plugins/tiddlywiki/aws/lambda/sjcl
|
||||||
|
|
||||||
|
\rules only filteredtranscludeinline transcludeinline
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
var module;
|
||||||
|
|
||||||
|
global.sjcl = (function() {
|
||||||
|
|
||||||
|
{{ $:/library/sjcl.js ||$:/core/templates/plain-text-tiddler}}
|
||||||
|
|
||||||
|
return sjcl;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
})();
|
5
plugins/tiddlywiki/aws/templates/lambda/tiddlers.tid
Normal file
5
plugins/tiddlywiki/aws/templates/lambda/tiddlers.tid
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
title: $:/plugins/tiddlywiki/aws/lambda/tiddlers
|
||||||
|
|
||||||
|
`
|
||||||
|
var lambdaTiddlers = `<$text text=<<jsontiddlers "[all[tiddlers]]">>/>`;
|
||||||
|
`
|
Loading…
Reference in New Issue
Block a user