tkeron 0.0.4
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.
- package/.github/workflows/CICD.yml +43 -0
- package/LICENSE +21 -0
- package/README.md +76 -0
- package/assets/tkexample.gif +0 -0
- package/changelog.md +8 -0
- package/dist/base64.d.ts +2 -0
- package/dist/base64.js +7 -0
- package/dist/build.d.ts +10 -0
- package/dist/build.js +102 -0
- package/dist/buildFront.d.ts +10 -0
- package/dist/buildFront.js +27 -0
- package/dist/buildLoaders.d.ts +13 -0
- package/dist/buildLoaders.js +23 -0
- package/dist/bundleTs.d.ts +1 -0
- package/dist/bundleTs.js +35 -0
- package/dist/cicd.d.ts +1 -0
- package/dist/cicd.js +8 -0
- package/dist/cmdBuild.d.ts +1 -0
- package/dist/cmdBuild.js +11 -0
- package/dist/cmdDev.d.ts +7 -0
- package/dist/cmdDev.js +63 -0
- package/dist/cmdGenerate.d.ts +1 -0
- package/dist/cmdGenerate.js +41 -0
- package/dist/cmdInit.d.ts +1 -0
- package/dist/cmdInit.js +36 -0
- package/dist/copyDir.d.ts +1 -0
- package/dist/copyDir.js +18 -0
- package/dist/createModFile.d.ts +1 -0
- package/dist/createModFile.js +14 -0
- package/dist/createTsConfigFile.d.ts +1 -0
- package/dist/createTsConfigFile.js +39 -0
- package/dist/eventEmitter.d.ts +5 -0
- package/dist/eventEmitter.js +29 -0
- package/dist/fileExist.d.ts +1 -0
- package/dist/fileExist.js +6 -0
- package/dist/generateItems.d.ts +11 -0
- package/dist/generateItems.js +16 -0
- package/dist/getDocument.d.ts +11 -0
- package/dist/getDocument.js +37 -0
- package/dist/getFilesRecursive.d.ts +9 -0
- package/dist/getFilesRecursive.js +53 -0
- package/dist/getOptions.d.ts +8 -0
- package/dist/getOptions.js +28 -0
- package/dist/getType.d.ts +1 -0
- package/dist/getType.js +5 -0
- package/dist/getVersion.d.ts +2 -0
- package/dist/getVersion.js +16 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +5 -0
- package/dist/injectCode.d.ts +1 -0
- package/dist/injectCode.js +7 -0
- package/dist/injectTsFile.d.ts +8 -0
- package/dist/injectTsFile.js +22 -0
- package/dist/jsDom/crypto.d.ts +3 -0
- package/dist/jsDom/crypto.js +22 -0
- package/dist/jsDom/errors.d.ts +3 -0
- package/dist/jsDom/errors.js +30 -0
- package/dist/jsDom/joinScripts.d.ts +1 -0
- package/dist/jsDom/joinScripts.js +25 -0
- package/dist/jsDom/logs.d.ts +1 -0
- package/dist/jsDom/logs.js +10 -0
- package/dist/jsDom/writeLogElement.d.ts +1 -0
- package/dist/jsDom/writeLogElement.js +49 -0
- package/dist/libFiles.ts.d.ts +1 -0
- package/dist/libFiles.ts.js +14 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +58 -0
- package/dist/mod.d.ts +3 -0
- package/dist/mod.js +9 -0
- package/dist/pathToUrlResource.d.ts +4 -0
- package/dist/pathToUrlResource.js +11 -0
- package/dist/random.d.ts +3 -0
- package/dist/random.js +31 -0
- package/dist/range.d.ts +1 -0
- package/dist/range.js +5 -0
- package/dist/readJsonFile.d.ts +1 -0
- package/dist/readJsonFile.js +20 -0
- package/dist/rectReady.d.ts +1 -0
- package/dist/rectReady.js +33 -0
- package/dist/rnd.d.ts +2 -0
- package/dist/rnd.js +11 -0
- package/dist/rnda.d.ts +1 -0
- package/dist/rnda.js +8 -0
- package/dist/runOncePerTime.d.ts +1 -0
- package/dist/runOncePerTime.js +17 -0
- package/dist/serializeDocument.d.ts +1 -0
- package/dist/serializeDocument.js +5 -0
- package/dist/simpleHotRestart.d.ts +1 -0
- package/dist/simpleHotRestart.js +17 -0
- package/dist/test/buildLoaders.test.d.ts +1 -0
- package/dist/test/buildLoaders.test.js +27 -0
- package/dist/test/bundleTs.test.d.ts +1 -0
- package/dist/test/bundleTs.test.js +94 -0
- package/dist/test/errors.test.d.ts +1 -0
- package/dist/test/errors.test.js +29 -0
- package/dist/test/fileExist.test.d.ts +1 -0
- package/dist/test/fileExist.test.js +26 -0
- package/dist/test/getFilesRecursive.test.d.ts +1 -0
- package/dist/test/getFilesRecursive.test.js +66 -0
- package/dist/test/getRandomValues.test.d.ts +1 -0
- package/dist/test/getRandomValues.test.js +35 -0
- package/dist/test/logs.test.d.ts +1 -0
- package/dist/test/logs.test.js +20 -0
- package/dist/test/main.test.d.ts +1 -0
- package/dist/test/main.test.js +15 -0
- package/dist/test/pathToUrlResource.test.d.ts +1 -0
- package/dist/test/pathToUrlResource.test.js +14 -0
- package/dist/test/runOncePerTime.test.d.ts +1 -0
- package/dist/test/runOncePerTime.test.js +17 -0
- package/dist/tk.d.ts +2 -0
- package/dist/tk.js +5 -0
- package/dist/tkeron.d.ts +44 -0
- package/dist/tkeron.js +258 -0
- package/dist/wait.d.ts +1 -0
- package/dist/wait.js +5 -0
- package/distFiles/eventEmitter.ts +29 -0
- package/distFiles/getType.ts +2 -0
- package/distFiles/random.ts +26 -0
- package/distFiles/range.ts +2 -0
- package/distFiles/rectReady.ts +27 -0
- package/distFiles/rnda.ts +5 -0
- package/distFiles/runOncePerTime.ts +12 -0
- package/distFiles/simpleHotRestart.ts +18 -0
- package/distFiles/tkeron.ts +317 -0
- package/package.json +47 -0
- package/src/base64.ts +3 -0
- package/src/build.ts +112 -0
- package/src/buildFront.ts +40 -0
- package/src/buildLoaders.ts +23 -0
- package/src/bundleTs.ts +32 -0
- package/src/cicd.ts +8 -0
- package/src/cmdBuild.ts +9 -0
- package/src/cmdDev.ts +68 -0
- package/src/cmdGenerate.ts +41 -0
- package/src/cmdInit.ts +37 -0
- package/src/copyDir.ts +16 -0
- package/src/createModFile.ts +15 -0
- package/src/createTsConfigFile.ts +37 -0
- package/src/eventEmitter.ts +29 -0
- package/src/fileExist.ts +4 -0
- package/src/generateItems.ts +16 -0
- package/src/getDocument.ts +40 -0
- package/src/getFilesRecursive.ts +49 -0
- package/src/getOptions.ts +27 -0
- package/src/getType.ts +2 -0
- package/src/getVersion.ts +14 -0
- package/src/index.ts +5 -0
- package/src/injectCode.ts +9 -0
- package/src/injectTsFile.ts +28 -0
- package/src/jsDom/crypto.ts +22 -0
- package/src/jsDom/errors.ts +35 -0
- package/src/jsDom/joinScripts.ts +22 -0
- package/src/jsDom/logs.ts +7 -0
- package/src/jsDom/writeLogElement.ts +45 -0
- package/src/libFiles.ts.ts +16 -0
- package/src/main.ts +67 -0
- package/src/mod.ts +7 -0
- package/src/pathToUrlResource.ts +10 -0
- package/src/random.ts +26 -0
- package/src/range.ts +2 -0
- package/src/readJsonFile.ts +16 -0
- package/src/rectReady.ts +27 -0
- package/src/rnd.ts +5 -0
- package/src/rnda.ts +5 -0
- package/src/runOncePerTime.ts +12 -0
- package/src/serializeDocument.ts +7 -0
- package/src/simpleHotRestart.ts +18 -0
- package/src/test/buildLoaders.test.ts +31 -0
- package/src/test/bundleTs.test.ts +98 -0
- package/src/test/errors.test.ts +31 -0
- package/src/test/fileExist.test.ts +29 -0
- package/src/test/getFilesRecursive.test.ts +67 -0
- package/src/test/getRandomValues.test.ts +34 -0
- package/src/test/logs.test.ts +20 -0
- package/src/test/main.test.ts +16 -0
- package/src/test/pathToUrlResource.test.ts +18 -0
- package/src/test/runOncePerTime.test.ts +16 -0
- package/src/tk.ts +5 -0
- package/src/tkeron.ts +317 -0
- package/src/wait.ts +2 -0
- package/tkeron.json +4 -0
- package/tkeron.tsconfig.json +12 -0
- package/tsconfig.json +29 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: CICD
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v3
|
|
13
|
+
- uses: actions/setup-node@v3
|
|
14
|
+
- name: Intall
|
|
15
|
+
run: npm i
|
|
16
|
+
- name: Build
|
|
17
|
+
run: npm run build
|
|
18
|
+
- name: Test
|
|
19
|
+
run: npm test
|
|
20
|
+
publish:
|
|
21
|
+
if: ${{ contains(github.event.head_commit.message, '#publish') }}
|
|
22
|
+
needs: [test]
|
|
23
|
+
name: Publish to npm
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v3
|
|
27
|
+
- uses: actions/setup-node@v3
|
|
28
|
+
with:
|
|
29
|
+
node-version: 16.x
|
|
30
|
+
registry-url: "https://registry.npmjs.org/"
|
|
31
|
+
- name: Intall
|
|
32
|
+
run: npm i
|
|
33
|
+
- name: Build
|
|
34
|
+
run: npm run build
|
|
35
|
+
- name: cicd command
|
|
36
|
+
run: npm run cicd
|
|
37
|
+
- run: rm -rf src dist/test front web .github
|
|
38
|
+
- name: Publish
|
|
39
|
+
run: npm publish --access public
|
|
40
|
+
env:
|
|
41
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
42
|
+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
43
|
+
token: ${{ secrets.NPM_TOKEN }}
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2020 tkeron
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Tkeron
|
|
2
|
+
|
|
3
|
+
Micro framework for developing web user interfaces with typescript.
|
|
4
|
+
|
|
5
|
+
- Create web interfaces with typescript without configuration.
|
|
6
|
+
- Take advantage of hot reloading to see your changes as you go.
|
|
7
|
+
- Start your project faster, compile faster than other frameworks (thanks to esbuild).
|
|
8
|
+
- Create pre-rendered components or pages.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
**How to use**
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
- Install tkeron globally
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm i -g tkeron
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
- Enter in your project directory and run:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
tkeron init
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
This will create a blank project in the "front" directory.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
- To build the html file run this:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
tkeron build
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
This will transpile the project in the directory "web"
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
- To run in your browser:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
tkeron dev
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
This command will create a server on port 5000 for the "web" directory and will observe the file change in the "front" directory.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
- to create a page use this:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
tkeron generate page index
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
or its short version:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
tk g p index
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
- to create a component use this:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
tkeron generate component my/button
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
or its short version:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
tk g c my/button
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
|
|
Binary file
|
package/changelog.md
ADDED
package/dist/base64.d.ts
ADDED
package/dist/base64.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toBase64 = exports.fromBase64 = void 0;
|
|
4
|
+
const fromBase64 = (base64str) => Buffer.from(base64str, "base64").toString("utf-8");
|
|
5
|
+
exports.fromBase64 = fromBase64;
|
|
6
|
+
const toBase64 = (base64str) => Buffer.from(base64str, "utf-8").toString("base64");
|
|
7
|
+
exports.toBase64 = toBase64;
|
package/dist/build.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface buildArguments {
|
|
2
|
+
sourceDir: string;
|
|
3
|
+
outputDir: string;
|
|
4
|
+
hotRestart?: boolean;
|
|
5
|
+
ignoreConsoleLogs?: boolean;
|
|
6
|
+
ignoreErrors?: boolean;
|
|
7
|
+
minify?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const build: (args: buildArguments, minify?: boolean) => Promise<void>;
|
|
10
|
+
export declare const tryBuildFront: (name: string, html: string, outHtmlFile: string, hotRestart: boolean, outTsFile: string, scriptId: string, tsFile: string, minify?: boolean) => Promise<[boolean, string, CallableFunction]>;
|
package/dist/build.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tryBuildFront = exports.build = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const promises_1 = require("fs/promises");
|
|
6
|
+
const fileExist_1 = require("./fileExist");
|
|
7
|
+
const generateItems_1 = require("./generateItems");
|
|
8
|
+
const getDocument_1 = require("./getDocument");
|
|
9
|
+
const getFilesRecursive_1 = require("./getFilesRecursive");
|
|
10
|
+
const getOptions_1 = require("./getOptions");
|
|
11
|
+
const injectTsFile_1 = require("./injectTsFile");
|
|
12
|
+
const rnd_1 = require("./rnd");
|
|
13
|
+
const buildFront_1 = require("./buildFront");
|
|
14
|
+
const serializeDocument_1 = require("./serializeDocument");
|
|
15
|
+
const backRegex = /\.back\.ts$/;
|
|
16
|
+
const htmlPageRegex = /\.page\.html$/;
|
|
17
|
+
const build = async (args, minify = true) => {
|
|
18
|
+
const { hotRestart, ignoreConsoleLogs, ignoreErrors } = args;
|
|
19
|
+
const { outputDir, sourceDir } = (0, getOptions_1.getOptions)({ sourceDir: args.sourceDir, outputDir: args.outputDir });
|
|
20
|
+
if (!await (0, fileExist_1.fileExists)(sourceDir))
|
|
21
|
+
throw "directory does not exist";
|
|
22
|
+
await (0, promises_1.mkdir)(outputDir, { recursive: true });
|
|
23
|
+
const pagesReady = [];
|
|
24
|
+
const backFiles = [...(0, getFilesRecursive_1.getFilesRecursive)(sourceDir, { pattern: backRegex })];
|
|
25
|
+
const buildFrontPromises = [];
|
|
26
|
+
for (const file of backFiles) {
|
|
27
|
+
const name = (0, path_1.basename)(file).replace(backRegex, "");
|
|
28
|
+
const htmlFile = file.replace(backRegex, ".page.html");
|
|
29
|
+
pagesReady.push(htmlFile);
|
|
30
|
+
const htmlExist = await (0, fileExist_1.fileExists)(htmlFile);
|
|
31
|
+
let html = htmlExist ? await (0, promises_1.readFile)(htmlFile, { encoding: "utf-8" }) : (0, generateItems_1.pageItem)(name).html;
|
|
32
|
+
const scriptId = "tmp" + (0, rnd_1.rnds)(25);
|
|
33
|
+
html = await (0, injectTsFile_1.injectTsFile)({ html, outputDir, sourceDir, tsFile: file, scriptId });
|
|
34
|
+
const { document, jsDomErrors, window } = (0, getDocument_1.getDocument)(html, { ignoreConsoleLogs, ignoreErrors });
|
|
35
|
+
if (ignoreErrors && jsDomErrors.length)
|
|
36
|
+
jsDomErrors.forEach((_) => console["log"](`page ${name} error: `, _.detail || _));
|
|
37
|
+
await new Promise((ok) => {
|
|
38
|
+
const handle = setTimeout(() => {
|
|
39
|
+
console["log"](`time up: ${name}`);
|
|
40
|
+
ok(0);
|
|
41
|
+
}, 6e3);
|
|
42
|
+
document.addEventListener("load", () => {
|
|
43
|
+
clearTimeout(handle);
|
|
44
|
+
ok(0);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
const scriptNode = document.querySelector(`#${scriptId}`);
|
|
48
|
+
if (scriptNode)
|
|
49
|
+
document.head.removeChild(scriptNode);
|
|
50
|
+
html = (0, serializeDocument_1.serializeDocument)(document);
|
|
51
|
+
window.close();
|
|
52
|
+
const tsFile = htmlFile.replace(htmlPageRegex, ".page.ts");
|
|
53
|
+
const outHtmlFile = file.replace(sourceDir, outputDir).replace(backRegex, ".html");
|
|
54
|
+
const outTsFile = file.replace(sourceDir, outputDir).replace(backRegex, ".js");
|
|
55
|
+
html = html.replace(/\/\*tkeron\-front\-script/g, "");
|
|
56
|
+
html = html.replace(/tkeron\-front\-script\*\//g, "");
|
|
57
|
+
buildFrontPromises.push((0, exports.tryBuildFront)(name, html, outHtmlFile, hotRestart, outTsFile, "tkeron_page_js", tsFile, minify));
|
|
58
|
+
}
|
|
59
|
+
const htmlFiles = [...(0, getFilesRecursive_1.getFilesRecursive)(sourceDir, { pattern: htmlPageRegex })];
|
|
60
|
+
for (const file of htmlFiles) {
|
|
61
|
+
const name = (0, path_1.basename)(file).replace(htmlPageRegex, "");
|
|
62
|
+
if (pagesReady.includes(file))
|
|
63
|
+
continue;
|
|
64
|
+
let html = await (0, promises_1.readFile)(file, { encoding: "utf-8" });
|
|
65
|
+
const outHtmlFile = file.replace(sourceDir, outputDir).replace(htmlPageRegex, ".html");
|
|
66
|
+
const outTsFile = file.replace(sourceDir, outputDir).replace(htmlPageRegex, ".html");
|
|
67
|
+
const tsFile = file.replace(htmlPageRegex, ".page.ts");
|
|
68
|
+
html = html.replace(/\/\*tkeron\-front\-script/g, "");
|
|
69
|
+
html = html.replace(/tkeron\-front\-script\*\//g, "");
|
|
70
|
+
buildFrontPromises.push((0, exports.tryBuildFront)(name, html, outHtmlFile, hotRestart, outTsFile, "tkeron_page_js", tsFile, minify));
|
|
71
|
+
}
|
|
72
|
+
const results = await Promise.all(buildFrontPromises);
|
|
73
|
+
for (const result of results) {
|
|
74
|
+
const [ok, name, retry] = result;
|
|
75
|
+
if (ok)
|
|
76
|
+
continue;
|
|
77
|
+
console["log"](`\nretry build ${name}...`);
|
|
78
|
+
await new Promise((done) => setTimeout(done, 300));
|
|
79
|
+
const [done] = await retry();
|
|
80
|
+
if (!done)
|
|
81
|
+
throw `error building ${name}, try build command again...`;
|
|
82
|
+
}
|
|
83
|
+
const compdate = new Date().getTime().toString();
|
|
84
|
+
const compdateDir = (0, path_1.join)(outputDir, "compdate.txt");
|
|
85
|
+
await (0, promises_1.writeFile)(compdateDir, compdate, { encoding: "utf-8" });
|
|
86
|
+
console["log"]("\nall site built");
|
|
87
|
+
};
|
|
88
|
+
exports.build = build;
|
|
89
|
+
const tryBuildFront = async (name, html, outHtmlFile, hotRestart, outTsFile, scriptId, tsFile, minify = true) => {
|
|
90
|
+
return new Promise(async (ok) => {
|
|
91
|
+
try {
|
|
92
|
+
await (0, buildFront_1.buildFront)({ html, outHtmlFile, hotRestart, outTsFile, scriptId: "tkeron_page_js", tsFile, minify });
|
|
93
|
+
console["log"](`site ${name} built`);
|
|
94
|
+
ok([true, name, async () => { }]);
|
|
95
|
+
}
|
|
96
|
+
catch (_) {
|
|
97
|
+
console["log"](`error building site ${name}: `, _);
|
|
98
|
+
ok([false, name, () => (0, exports.tryBuildFront)(name, html, outHtmlFile, hotRestart, outTsFile, scriptId, tsFile)]);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
exports.tryBuildFront = tryBuildFront;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface buildFrontOptions {
|
|
2
|
+
html: string;
|
|
3
|
+
tsFile: string;
|
|
4
|
+
outTsFile: string;
|
|
5
|
+
outHtmlFile: string;
|
|
6
|
+
hotRestart?: boolean;
|
|
7
|
+
scriptId: string;
|
|
8
|
+
minify?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const buildFront: (options: buildFrontOptions) => Promise<string>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildFront = void 0;
|
|
4
|
+
const promises_1 = require("fs/promises");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const bundleTs_1 = require("./bundleTs");
|
|
7
|
+
const fileExist_1 = require("./fileExist");
|
|
8
|
+
const injectCode_1 = require("./injectCode");
|
|
9
|
+
const buildFront = async (options) => {
|
|
10
|
+
const { hotRestart, outHtmlFile, scriptId, tsFile, outTsFile, minify } = options;
|
|
11
|
+
let { html } = options;
|
|
12
|
+
const outHtmlDir = (0, path_1.dirname)(outHtmlFile);
|
|
13
|
+
if (hotRestart === true) {
|
|
14
|
+
const code = await (0, bundleTs_1.bundleTs)((0, path_1.join)(__dirname, "..", "distFiles", "simpleHotRestart.ts"), "shr.js", true, true);
|
|
15
|
+
html = (0, injectCode_1.injectCode)(html, code, "tkeron_simple_hot_restart");
|
|
16
|
+
}
|
|
17
|
+
if (await (0, fileExist_1.fileExists)(tsFile)) {
|
|
18
|
+
const tsCode = await (0, bundleTs_1.bundleTs)(tsFile, outTsFile, minify);
|
|
19
|
+
await (0, promises_1.unlink)(outTsFile);
|
|
20
|
+
if (tsCode.trim() !== "")
|
|
21
|
+
html = (0, injectCode_1.injectCode)(html, tsCode, scriptId);
|
|
22
|
+
}
|
|
23
|
+
await (0, promises_1.mkdir)(outHtmlDir, { recursive: true });
|
|
24
|
+
await (0, promises_1.writeFile)(outHtmlFile, html, { encoding: "utf-8" });
|
|
25
|
+
return html;
|
|
26
|
+
};
|
|
27
|
+
exports.buildFront = buildFront;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Loader } from "esbuild";
|
|
2
|
+
export declare const buildLoaders: {
|
|
3
|
+
".jpg": Loader;
|
|
4
|
+
".png": Loader;
|
|
5
|
+
".gif": Loader;
|
|
6
|
+
".ico": Loader;
|
|
7
|
+
".webp": Loader;
|
|
8
|
+
".svg": Loader;
|
|
9
|
+
".js": Loader;
|
|
10
|
+
".css": Loader;
|
|
11
|
+
".html": Loader;
|
|
12
|
+
};
|
|
13
|
+
export declare const getExtModules: () => string;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getExtModules = exports.buildLoaders = void 0;
|
|
4
|
+
exports.buildLoaders = {
|
|
5
|
+
".jpg": "file",
|
|
6
|
+
".png": "file",
|
|
7
|
+
".gif": "file",
|
|
8
|
+
".ico": "file",
|
|
9
|
+
".webp": "file",
|
|
10
|
+
".svg": "file",
|
|
11
|
+
".js": "file",
|
|
12
|
+
".css": "text",
|
|
13
|
+
".html": "text",
|
|
14
|
+
};
|
|
15
|
+
const getExtModules = () => {
|
|
16
|
+
let content = "";
|
|
17
|
+
const exts = Object.keys(exports.buildLoaders).sort();
|
|
18
|
+
for (const ext of exts) {
|
|
19
|
+
content += `declare module '*${ext}';\n`;
|
|
20
|
+
}
|
|
21
|
+
return content;
|
|
22
|
+
};
|
|
23
|
+
exports.getExtModules = getExtModules;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const bundleTs: (file: string, outfile: string, minify?: boolean, deleteOutfile?: boolean) => Promise<string>;
|
package/dist/bundleTs.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bundleTs = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const fileExist_1 = require("./fileExist");
|
|
6
|
+
const esbuild_1 = require("esbuild");
|
|
7
|
+
const buildLoaders_1 = require("./buildLoaders");
|
|
8
|
+
const promises_1 = require("fs/promises");
|
|
9
|
+
const bundleTs = async (file, outfile, minify = true, deleteOutfile = false) => {
|
|
10
|
+
if (!file)
|
|
11
|
+
throw "file must be defined";
|
|
12
|
+
if (!outfile)
|
|
13
|
+
throw "outfile must be defined";
|
|
14
|
+
file = (0, path_1.normalize)(file);
|
|
15
|
+
const exist = await (0, fileExist_1.fileExists)(file);
|
|
16
|
+
if (!exist)
|
|
17
|
+
throw `file ${file} doesn't exist`;
|
|
18
|
+
const minifySyntax = minify;
|
|
19
|
+
const minifyWhitespace = minify;
|
|
20
|
+
const buildResult = await (0, esbuild_1.build)({
|
|
21
|
+
entryPoints: [file],
|
|
22
|
+
outfile,
|
|
23
|
+
bundle: true,
|
|
24
|
+
minifySyntax,
|
|
25
|
+
minifyWhitespace,
|
|
26
|
+
loader: buildLoaders_1.buildLoaders,
|
|
27
|
+
});
|
|
28
|
+
if (buildResult.errors.length)
|
|
29
|
+
throw buildResult.errors;
|
|
30
|
+
const tsResult = await (0, promises_1.readFile)(outfile, { encoding: "utf-8" });
|
|
31
|
+
if (deleteOutfile)
|
|
32
|
+
await (0, promises_1.unlink)(outfile);
|
|
33
|
+
return tsResult;
|
|
34
|
+
};
|
|
35
|
+
exports.bundleTs = bundleTs;
|
package/dist/cicd.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/cicd.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const fs_1 = require("fs");
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const libFiles_ts_1 = require("./libFiles.ts");
|
|
6
|
+
for (const file of libFiles_ts_1.libFiles) {
|
|
7
|
+
(0, fs_1.copyFileSync)((0, path_1.join)("src", file), (0, path_1.join)("distFiles", file));
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const cmdBuild: (sourceDir?: string, outputDir?: string) => Promise<void>;
|
package/dist/cmdBuild.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdBuild = void 0;
|
|
4
|
+
const build_1 = require("./build");
|
|
5
|
+
const cmdBuild = (sourceDir, outputDir) => (0, build_1.build)({
|
|
6
|
+
sourceDir, outputDir,
|
|
7
|
+
hotRestart: false,
|
|
8
|
+
ignoreConsoleLogs: true,
|
|
9
|
+
ignoreErrors: true
|
|
10
|
+
});
|
|
11
|
+
exports.cmdBuild = cmdBuild;
|
package/dist/cmdDev.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Server } from "http";
|
|
3
|
+
export declare const dev: (sourceDir: string, outputDir: string, port?: number, addr?: string) => Promise<{
|
|
4
|
+
closeWatcher: () => void;
|
|
5
|
+
closeServer: () => Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
|
|
6
|
+
}>;
|
|
7
|
+
export declare const cmdDev: (sourceDir: string, outputDir: string, port?: number, addr?: string) => Promise<void>;
|
package/dist/cmdDev.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.cmdDev = exports.dev = void 0;
|
|
7
|
+
const express_1 = __importDefault(require("express"));
|
|
8
|
+
const node_watch_1 = __importDefault(require("node-watch"));
|
|
9
|
+
const stream_1 = require("stream");
|
|
10
|
+
const build_1 = require("./build");
|
|
11
|
+
const fileExist_1 = require("./fileExist");
|
|
12
|
+
const getOptions_1 = require("./getOptions");
|
|
13
|
+
const dev = async (sourceDir, outputDir, port = 5000, addr = "127.0.0.1") => {
|
|
14
|
+
const opts = (0, getOptions_1.getOptions)({ outputDir, sourceDir });
|
|
15
|
+
sourceDir = opts.sourceDir;
|
|
16
|
+
outputDir = opts.outputDir;
|
|
17
|
+
if (!(await (0, fileExist_1.fileExists)(sourceDir)))
|
|
18
|
+
throw `source directory doesn't exist`;
|
|
19
|
+
await (0, build_1.build)({ sourceDir, outputDir, hotRestart: true });
|
|
20
|
+
let building = false;
|
|
21
|
+
let rebuild = false;
|
|
22
|
+
const events = new stream_1.EventEmitter();
|
|
23
|
+
const watcher = (0, node_watch_1.default)(sourceDir, { recursive: true }, async (_event, _) => {
|
|
24
|
+
if (building) {
|
|
25
|
+
rebuild = true;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
building = true;
|
|
29
|
+
await (0, build_1.build)({ sourceDir, outputDir, hotRestart: true });
|
|
30
|
+
if (rebuild)
|
|
31
|
+
await (0, build_1.build)({ sourceDir, outputDir, hotRestart: true });
|
|
32
|
+
events.emit("built");
|
|
33
|
+
building = false;
|
|
34
|
+
});
|
|
35
|
+
const app = (0, express_1.default)();
|
|
36
|
+
let firstRequest = true;
|
|
37
|
+
app.get("/compdate.txt", (_request, reply) => {
|
|
38
|
+
if (firstRequest) {
|
|
39
|
+
firstRequest = false;
|
|
40
|
+
reply.send({ reload: true });
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const lastListener = () => reply.send({ reload: true });
|
|
44
|
+
events.once("built", lastListener);
|
|
45
|
+
});
|
|
46
|
+
app.use(express_1.default.static(outputDir));
|
|
47
|
+
let server;
|
|
48
|
+
try {
|
|
49
|
+
server = app.listen(port, addr, () => console["log"](`linstening on ${addr}:${port}`));
|
|
50
|
+
}
|
|
51
|
+
catch (_) {
|
|
52
|
+
console["log"]("error starting local dev server", _);
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
closeWatcher: () => watcher.close(),
|
|
56
|
+
closeServer: () => server.close(),
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
exports.dev = dev;
|
|
60
|
+
const cmdDev = async (sourceDir, outputDir, port = 5000, addr = "127.0.0.1") => {
|
|
61
|
+
await (0, exports.dev)(sourceDir, outputDir, port, addr);
|
|
62
|
+
};
|
|
63
|
+
exports.cmdDev = cmdDev;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const cmdGenerate: (item: string, path: string) => Promise<void>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdGenerate = void 0;
|
|
4
|
+
const colorette_1 = require("colorette");
|
|
5
|
+
const promises_1 = require("fs/promises");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const generateItems_1 = require("./generateItems");
|
|
8
|
+
const getOptions_1 = require("./getOptions");
|
|
9
|
+
const cmdGenerate = async (item, path) => {
|
|
10
|
+
const { sourceDir } = (0, getOptions_1.getOptions)();
|
|
11
|
+
const name = (0, path_1.basename)(path);
|
|
12
|
+
if (!generateItems_1.validItems.includes(item)) {
|
|
13
|
+
console["log"]((0, colorette_1.red)(`item "${item}" does not exist`));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (item === "component" || item === "c") {
|
|
17
|
+
const { css, ts } = (0, generateItems_1.componentItem)(name);
|
|
18
|
+
if (path.slice(0, 2) !== "./")
|
|
19
|
+
path = (0, path_1.join)("comps", path);
|
|
20
|
+
const tsFilePath = (0, path_1.join)(sourceDir, path, `${name}.ts`);
|
|
21
|
+
const cssFilePath = (0, path_1.join)(sourceDir, path, `${name}.css`);
|
|
22
|
+
const tsDir = (0, path_1.dirname)(tsFilePath);
|
|
23
|
+
await (0, promises_1.mkdir)(tsDir, { recursive: true });
|
|
24
|
+
await (0, promises_1.writeFile)(tsFilePath, ts, { encoding: "utf-8" });
|
|
25
|
+
await (0, promises_1.writeFile)(cssFilePath, css, { encoding: "utf-8" });
|
|
26
|
+
}
|
|
27
|
+
if (item === "page" || item === "p") {
|
|
28
|
+
const { css, ts, back, html } = (0, generateItems_1.pageItem)(name);
|
|
29
|
+
const tsFilePath = (0, path_1.join)(sourceDir, `${path}.page.ts`);
|
|
30
|
+
const cssFilePath = (0, path_1.join)(sourceDir, `${path}.page.css`);
|
|
31
|
+
const htmlFilePath = (0, path_1.join)(sourceDir, `${path}.page.html`);
|
|
32
|
+
const backFilePath = (0, path_1.join)(sourceDir, `${path}.back.ts`);
|
|
33
|
+
const tsDir = (0, path_1.dirname)(tsFilePath);
|
|
34
|
+
await (0, promises_1.mkdir)(tsDir, { recursive: true });
|
|
35
|
+
await (0, promises_1.writeFile)(tsFilePath, ts, { encoding: "utf-8" });
|
|
36
|
+
await (0, promises_1.writeFile)(cssFilePath, css, { encoding: "utf-8" });
|
|
37
|
+
await (0, promises_1.writeFile)(htmlFilePath, html, { encoding: "utf-8" });
|
|
38
|
+
await (0, promises_1.writeFile)(backFilePath, back, { encoding: "utf-8" });
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
exports.cmdGenerate = cmdGenerate;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const cmdInit: (sourceDir?: string, outputDir?: string) => Promise<void>;
|
package/dist/cmdInit.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdInit = void 0;
|
|
4
|
+
const promises_1 = require("fs/promises");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const buildLoaders_1 = require("./buildLoaders");
|
|
7
|
+
const copyDir_1 = require("./copyDir");
|
|
8
|
+
const createModFile_1 = require("./createModFile");
|
|
9
|
+
const createTsConfigFile_1 = require("./createTsConfigFile");
|
|
10
|
+
const fileExist_1 = require("./fileExist");
|
|
11
|
+
const getOptions_1 = require("./getOptions");
|
|
12
|
+
const libFiles_ts_1 = require("./libFiles.ts");
|
|
13
|
+
const cmdInit = async (sourceDir, outputDir) => {
|
|
14
|
+
const options = (0, getOptions_1.getOptions)({ sourceDir, outputDir });
|
|
15
|
+
sourceDir = options.sourceDir;
|
|
16
|
+
await (0, promises_1.writeFile)("tkeron.json", JSON.stringify(options, null, 4));
|
|
17
|
+
await (0, createTsConfigFile_1.createTsConfigFile)();
|
|
18
|
+
if (!await (0, fileExist_1.fileExists)(sourceDir))
|
|
19
|
+
await (0, promises_1.mkdir)(sourceDir, { recursive: true });
|
|
20
|
+
const tklibs = (0, path_1.join)(sourceDir, "tklibs");
|
|
21
|
+
if (!await (0, fileExist_1.fileExists)(tklibs))
|
|
22
|
+
await (0, promises_1.mkdir)(tklibs, { recursive: true });
|
|
23
|
+
for (const file of libFiles_ts_1.libFiles) {
|
|
24
|
+
const dest = (0, path_1.join)(tklibs, file);
|
|
25
|
+
const src = (0, path_1.join)(__dirname, "..", "distFiles", file);
|
|
26
|
+
await (0, promises_1.copyFile)(src, dest);
|
|
27
|
+
}
|
|
28
|
+
await (0, createModFile_1.createModFile)(sourceDir);
|
|
29
|
+
const extModules = (0, buildLoaders_1.getExtModules)();
|
|
30
|
+
const extModName = (0, path_1.join)(tklibs, "extensions.d.ts");
|
|
31
|
+
await (0, promises_1.writeFile)(extModName, extModules, { encoding: "utf-8" });
|
|
32
|
+
const rxjsSrc = (0, path_1.join)(__dirname, "..", "node_modules", "rxjs", "src");
|
|
33
|
+
const rxjsDest = (0, path_1.join)(tklibs, "rxjs");
|
|
34
|
+
await (0, copyDir_1.copyDir)(rxjsSrc, rxjsDest);
|
|
35
|
+
};
|
|
36
|
+
exports.cmdInit = cmdInit;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const copyDir: (sourceDir: string, outputDir: string) => Promise<void>;
|
package/dist/copyDir.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.copyDir = void 0;
|
|
4
|
+
const promises_1 = require("fs/promises");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const fileExist_1 = require("./fileExist");
|
|
7
|
+
const getFilesRecursive_1 = require("./getFilesRecursive");
|
|
8
|
+
const copyDir = async (sourceDir, outputDir) => {
|
|
9
|
+
for (const file of (0, getFilesRecursive_1.getFilesRecursive)(sourceDir, { useDirectoryBase: true })) {
|
|
10
|
+
const sourcePath = (0, path_1.join)(sourceDir, file);
|
|
11
|
+
const outPath = (0, path_1.join)(outputDir, file);
|
|
12
|
+
const dir = (0, path_1.dirname)(outPath);
|
|
13
|
+
if (!await (0, fileExist_1.fileExists)(dir))
|
|
14
|
+
await (0, promises_1.mkdir)(dir, { recursive: true });
|
|
15
|
+
await (0, promises_1.copyFile)(sourcePath, outPath);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
exports.copyDir = copyDir;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createModFile: (sourceDir: string) => Promise<void>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createModFile = void 0;
|
|
4
|
+
const promises_1 = require("fs/promises");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const libFiles_ts_1 = require("./libFiles.ts");
|
|
7
|
+
const createModFile = async (sourceDir) => {
|
|
8
|
+
let modFile = "";
|
|
9
|
+
const modFilePath = (0, path_1.join)(sourceDir, "tklibs", "mod.ts");
|
|
10
|
+
for (const file of libFiles_ts_1.libFiles)
|
|
11
|
+
modFile += `export * from "./${file.replace(/\.ts$/, "")}";\n`;
|
|
12
|
+
await (0, promises_1.writeFile)(modFilePath, modFile, { encoding: "utf-8" });
|
|
13
|
+
};
|
|
14
|
+
exports.createModFile = createModFile;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createTsConfigFile: () => Promise<void>;
|