@reactful/create 0.0.91 → 0.0.94
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/commons/package.json +22 -0
- package/commons/tsconfig.json +24 -0
- package/index.js +23 -5
- package/package.json +18 -16
- package/templates/empty/index.html +12 -0
- package/templates/empty/index.ts +3 -0
- package/templates/minimal/index.html +12 -0
- package/templates/minimal/index.ts +3 -0
- package/templates/sampling/apis/auth/db.ts +15 -0
- package/templates/sampling/apis/auth/index.ts +28 -0
- package/templates/sampling/apis/hello.ts +3 -0
- package/templates/sampling/apis/quotes.ts +16 -0
- package/templates/sampling/apis/sub/index.ts +3 -0
- package/templates/sampling/apis/sub/sub.ts +3 -0
- package/templates/sampling/assets/SLIDEME.png +0 -0
- package/templates/sampling/assets/default.css +91 -0
- package/templates/sampling/assets/favicon.ico +0 -0
- package/templates/sampling/assets/icon.png +0 -0
- package/templates/sampling/assets/icon.svg +6 -0
- package/templates/sampling/assets/logo-144.png +0 -0
- package/templates/sampling/assets/logo-168.png +0 -0
- package/templates/sampling/assets/logo-192.png +0 -0
- package/templates/sampling/assets/logo-48.png +0 -0
- package/templates/sampling/assets/logo-512.png +0 -0
- package/templates/sampling/assets/logo-72.png +0 -0
- package/templates/sampling/assets/logo-96.png +0 -0
- package/templates/sampling/assets/manifest.json +57 -0
- package/templates/sampling/assets/markdown.css +274 -0
- package/templates/sampling/assets/robots.txt +1 -0
- package/templates/sampling/assets/system.css +7 -0
- package/templates/sampling/builds/about.html +27 -0
- package/templates/sampling/builds/bundle.js +13116 -0
- package/templates/sampling/builds/bundle.ts +25 -0
- package/templates/sampling/builds/client.ts +1 -0
- package/templates/sampling/builds/clock.html +30 -0
- package/templates/sampling/builds/counter.html +30 -0
- package/templates/sampling/builds/forms/form.html +48 -0
- package/templates/sampling/builds/forms/index.html +48 -0
- package/templates/sampling/builds/hello.html +60 -0
- package/templates/sampling/builds/htmlx.html +24 -0
- package/templates/sampling/builds/htmlx.tsx +13 -0
- package/templates/sampling/builds/index.html +98 -0
- package/templates/sampling/builds/login.html +45 -0
- package/templates/sampling/builds/profile/index.html +54 -0
- package/templates/sampling/builds/quotes.html +26 -0
- package/templates/sampling/builds/shared.js +76 -0
- package/templates/sampling/builds/system.html +27 -0
- package/templates/sampling/components/header.tsx +7 -0
- package/templates/sampling/directives/index.ts +1 -0
- package/templates/sampling/directives/shown.ts +6 -0
- package/templates/sampling/index.html +20 -0
- package/templates/sampling/index.ts +19 -0
- package/templates/sampling/routes/about.html +13 -0
- package/templates/sampling/routes/clock.tsx +35 -0
- package/templates/sampling/routes/counter.tsx +21 -0
- package/templates/sampling/routes/forms/form.css +19 -0
- package/templates/sampling/routes/forms/form.tsx +51 -0
- package/templates/sampling/routes/forms/index.tsx +3 -0
- package/templates/sampling/routes/hello.tsx +62 -0
- package/templates/sampling/routes/htmlx.html +15 -0
- package/templates/sampling/routes/index.md +15 -0
- package/templates/sampling/routes/login.tsx +36 -0
- package/templates/sampling/routes/profile/detail.css +13 -0
- package/templates/sampling/routes/profile/detail.tsx +48 -0
- package/templates/sampling/routes/profile/index.tsx +14 -0
- package/templates/sampling/routes/profile/profile.css +8 -0
- package/templates/sampling/routes/profile/tester.tsx +11 -0
- package/templates/sampling/routes/quotes.tsx +25 -0
- package/templates/sampling/routes/system.tsx +23 -0
- package/templates/sampling/tests/access.spec.ts +29 -0
- package/templates/sampling/tests/counter.spec.ts +19 -0
- package/templates/sampling/tests/form.spec.ts +51 -0
- package/templates/sampling/tests/hello.spec.ts +25 -0
- package/templates/sampling/tests/path.test.ts +20 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
{
|
2
|
+
"type": "module",
|
3
|
+
"name": "template",
|
4
|
+
"module": "index.ts",
|
5
|
+
"scripts": {
|
6
|
+
"start": "bun --hot run index.ts",
|
7
|
+
"build": "rm -rf tsconfig.tsbuildinfo; bunx tsc -p tsconfig.json",
|
8
|
+
"clear": "rm -rf node_modules package-lock.json bun.lockb; bun i; bun run build"
|
9
|
+
},
|
10
|
+
"dependencies": {
|
11
|
+
"react": "^18.2.0",
|
12
|
+
"react-dom": "^18.2.0",
|
13
|
+
"@reactful/extensions": "latest",
|
14
|
+
"@reactful/server": "latest",
|
15
|
+
"@reactful/web": "latest"
|
16
|
+
},
|
17
|
+
"devDependencies": {
|
18
|
+
"bun-types": "^1.0.20",
|
19
|
+
"typescript": "^5.3.3",
|
20
|
+
"@types/react": "^18.2.57"
|
21
|
+
}
|
22
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
{
|
2
|
+
"exclude": ["node_modules"],
|
3
|
+
"compilerOptions": {
|
4
|
+
"rootDir": ".",
|
5
|
+
"jsx": "react",
|
6
|
+
"target": "esnext",
|
7
|
+
"module": "esnext",
|
8
|
+
"types": ["bun-types"],
|
9
|
+
"moduleDetection": "auto",
|
10
|
+
"moduleResolution": "bundler",
|
11
|
+
"noEmit": true,
|
12
|
+
"strict": false,
|
13
|
+
"allowJs": true,
|
14
|
+
"sourceMap": true,
|
15
|
+
"composite": true,
|
16
|
+
"declaration": true,
|
17
|
+
"skipLibCheck": true,
|
18
|
+
"noImplicitAny": false,
|
19
|
+
"esModuleInterop": true,
|
20
|
+
"downlevelIteration": true,
|
21
|
+
"allowSyntheticDefaultImports": true,
|
22
|
+
"forceConsistentCasingInFileNames": true
|
23
|
+
}
|
24
|
+
}
|
package/index.js
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
#!/usr/bin/env node
|
2
2
|
|
3
|
+
|
3
4
|
import { execSync } from 'child_process'
|
5
|
+
import npmPackage from 'npm-package-arg'
|
6
|
+
import npmDownload from 'npm-download'
|
4
7
|
import inquirer from 'inquirer'
|
5
8
|
import fetch from 'node-fetch'
|
6
9
|
import path from 'path'
|
@@ -36,8 +39,8 @@ inquirer.prompt(questions).then(async function (answers) {
|
|
36
39
|
|
37
40
|
const destination = path.join(process.cwd(), answers.project)
|
38
41
|
|
39
|
-
await
|
40
|
-
await
|
42
|
+
await download(`commons`, destination)
|
43
|
+
await download(`templates/${answers.template}`, destination)
|
41
44
|
|
42
45
|
console.log('- templating project...')
|
43
46
|
renamingJSON(destination, answers.project)
|
@@ -59,8 +62,23 @@ function renamingJSON(directory, projectName) {
|
|
59
62
|
fs.writeFileSync(url, JSON.stringify(obj, null, 3))
|
60
63
|
}
|
61
64
|
|
62
|
-
const
|
63
|
-
|
65
|
+
const download = async (subfolder, destination) =>
|
66
|
+
downloadNPM('@reactful/create', subfolder, destination)
|
67
|
+
|
68
|
+
async function downloadNPM(packageName, subdirectory, destination) {
|
69
|
+
try {
|
70
|
+
const pkg = npmPackage.resolve(packageName)
|
71
|
+
const content = await npmDownload(pkg, { dir: 'temp' })
|
72
|
+
const from = path.join(content, subdirectory, destination)
|
73
|
+
const notFound = fs.existsSync(destination) == false
|
74
|
+
|
75
|
+
if (notFound) fs.mkdirSync(destination, { recursive: true })
|
76
|
+
|
77
|
+
fs.renameSync(from, destination)
|
78
|
+
} catch (error) {
|
79
|
+
console.error('Download NPM:', error)
|
80
|
+
}
|
81
|
+
}
|
64
82
|
|
65
83
|
async function downloadGitHub(user, repository, subdir, destination) {
|
66
84
|
console.log(`- downloading ${subdir}...`)
|
@@ -80,7 +98,7 @@ async function downloadGitHub(user, repository, subdir, destination) {
|
|
80
98
|
if (item.type === 'dir' && item.name) {
|
81
99
|
const from = `${subdir}/${item.name}`
|
82
100
|
const goto = `${destination}/${item.name}`
|
83
|
-
await
|
101
|
+
await download(from, goto); continue
|
84
102
|
}
|
85
103
|
|
86
104
|
if (item.type != 'file') continue
|
package/package.json
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
{
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
2
|
+
"name": "@reactful/create",
|
3
|
+
"version": "0.0.94",
|
4
|
+
"main": "index.js",
|
5
|
+
"type": "module",
|
6
|
+
"description": "reactful scafold tool",
|
7
|
+
"author": "jonathan de sena ribeiro <jsenaribeiro@gmail.com>",
|
8
|
+
"files": ["index.js", "package.json", "templates", "commons"],
|
9
|
+
"bin": { "@reactful/create": "index.js" },
|
10
|
+
"scripts": { "deploy": "npm publish --access public" },
|
11
|
+
"license": "MIT",
|
12
|
+
"dependencies": {
|
13
|
+
"bun-types": "latest",
|
14
|
+
"fs": "^0.0.1-security",
|
15
|
+
"inquirer": "^9.2.13",
|
16
|
+
"node-fetch": "^3.3.2",
|
17
|
+
"npm-download": "^2.0.0",
|
18
|
+
"npm-package-arg": "^11.0.1"
|
19
|
+
}
|
18
20
|
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<meta name="description" content="Home page" >
|
7
|
+
<title>Welcome</title>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<div id="root" ></div>
|
11
|
+
</body>
|
12
|
+
</html>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<meta name="description" content="Home page" >
|
7
|
+
<title>Welcome</title>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<div id="root" ></div>
|
11
|
+
</body>
|
12
|
+
</html>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
const database = [
|
2
|
+
{ username: 'usr', password: 'pwd' },
|
3
|
+
{ username: 'test', password: '123' },
|
4
|
+
]
|
5
|
+
|
6
|
+
export const db = {
|
7
|
+
|
8
|
+
has(username, password) {
|
9
|
+
const contains = database
|
10
|
+
.filter(x => x.username == username)
|
11
|
+
.some(x => x.password == password)
|
12
|
+
|
13
|
+
return Promise.resolve(contains)
|
14
|
+
}
|
15
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
"user server"
|
2
|
+
|
3
|
+
import { delay } from '../../../commons/src'
|
4
|
+
import { db } from "./db"
|
5
|
+
|
6
|
+
const SECRET_KEY = '0123456789'
|
7
|
+
|
8
|
+
export async function post(request: Request) {
|
9
|
+
await delay(3000)
|
10
|
+
|
11
|
+
const AUTHORIZATION = request.headers.get('authorization')
|
12
|
+
const UNAUTHORIZED = { status: 401, headers: { 'Content-Type': 'text/plain' }}
|
13
|
+
const NO_HEADERS = 'Authorization header missing!'
|
14
|
+
const NOT_LOGIN = 'Authentication failed!'
|
15
|
+
|
16
|
+
if (!AUTHORIZATION?.startsWith('Basic '))
|
17
|
+
return new Response(NO_HEADERS, UNAUTHORIZED)
|
18
|
+
|
19
|
+
const auth = AUTHORIZATION.split(' ')[1]
|
20
|
+
const credential = Buffer.from(auth, 'base64').toString('utf-8')
|
21
|
+
const [ username, password ] = credential.split(':')
|
22
|
+
const exists = await db.has(username, password)
|
23
|
+
const settings = exists ? { } : UNAUTHORIZED
|
24
|
+
const access_token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'
|
25
|
+
const text = exists ? JSON.stringify({ access_token }) : NOT_LOGIN
|
26
|
+
|
27
|
+
return new Response(text, settings)
|
28
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
export function get(request: Request) {
|
2
|
+
function getRandomInt(max) { return Math.floor(Math.random() * max); }
|
3
|
+
|
4
|
+
const messages = [
|
5
|
+
"Man is the measure of all things (Protagoras)",
|
6
|
+
"The unexamined life is not worth living (Socrates)",
|
7
|
+
"One cannot step twice in the same river (Heraclitus)",
|
8
|
+
"Life must be understood backward. But it must be lived forward (Kierkegaard)",
|
9
|
+
"Science is what you know. Philosophy is what you don't know (Russell)",
|
10
|
+
"I can control my passions and emotions if I can understand their nature (Spinoza)"
|
11
|
+
]
|
12
|
+
|
13
|
+
const message = messages[getRandomInt(messages.length)]
|
14
|
+
|
15
|
+
return new Response(message)
|
16
|
+
}
|
Binary file
|
@@ -0,0 +1,91 @@
|
|
1
|
+
@import url('https://fonts.cdnfonts.com/css/share-tech');
|
2
|
+
|
3
|
+
body,
|
4
|
+
h1,
|
5
|
+
h2,
|
6
|
+
h3,
|
7
|
+
h4,
|
8
|
+
h5,
|
9
|
+
h6,
|
10
|
+
button,
|
11
|
+
textarea,
|
12
|
+
input,
|
13
|
+
select {
|
14
|
+
font-family: agave !important
|
15
|
+
}
|
16
|
+
|
17
|
+
@media (prefers-color-scheme: dark) {
|
18
|
+
body {
|
19
|
+
background-color: #333;
|
20
|
+
color: #EEE;
|
21
|
+
}
|
22
|
+
|
23
|
+
a {
|
24
|
+
color: wheat
|
25
|
+
}
|
26
|
+
|
27
|
+
a:hover {
|
28
|
+
color: yellow
|
29
|
+
}
|
30
|
+
|
31
|
+
button {
|
32
|
+
background-color: #AAA;
|
33
|
+
border-width: 1px;
|
34
|
+
padding: 10px 5px;
|
35
|
+
}
|
36
|
+
|
37
|
+
input,
|
38
|
+
textarea {
|
39
|
+
color: #EEE;
|
40
|
+
background-color: #444;
|
41
|
+
border-color: #555;
|
42
|
+
border-style: solid;
|
43
|
+
border-width: 1px;
|
44
|
+
outline: none;
|
45
|
+
}
|
46
|
+
|
47
|
+
input:focus {
|
48
|
+
border-color: #AAA;
|
49
|
+
outline: none;
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
input.Hello,
|
54
|
+
[bind='value'],
|
55
|
+
[own^='Sub'] {
|
56
|
+
width: 50px;
|
57
|
+
}
|
58
|
+
|
59
|
+
label.Hello {
|
60
|
+
margin-bottom: 20px;
|
61
|
+
}
|
62
|
+
|
63
|
+
label.Hello code {
|
64
|
+
font-size: 12px;
|
65
|
+
color: silver;
|
66
|
+
}
|
67
|
+
|
68
|
+
button.Detail {
|
69
|
+
padding: 10px;
|
70
|
+
margin: 10px;
|
71
|
+
cursor: pointer;
|
72
|
+
background-color: #ccc;
|
73
|
+
border: 1px solid #000;
|
74
|
+
transition: margin-top 0.2s ease-in-out, margin-bottom 0.2s ease-in-out;
|
75
|
+
}
|
76
|
+
|
77
|
+
button.Detail:hover {
|
78
|
+
background-color: #ddd;
|
79
|
+
}
|
80
|
+
|
81
|
+
button.Detail:active {
|
82
|
+
margin-top: 5px;
|
83
|
+
margin-bottom: 5px;
|
84
|
+
}
|
85
|
+
|
86
|
+
|
87
|
+
button.Detail:active {
|
88
|
+
color: white;
|
89
|
+
background-color: #777;
|
90
|
+
transform: translate(2px, 2px);
|
91
|
+
}
|
Binary file
|
Binary file
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="263px" height="388px" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" xmlns:xlink="http://www.w3.org/1999/xlink">
|
4
|
+
<g><path style="opacity:1" fill="#f4ddb2" d="M 74.5,-0.5 C 75.5,-0.5 76.5,-0.5 77.5,-0.5C 107.762,24.9817 138.096,50.4817 168.5,76C 122.614,121.98 103.114,177.48 110,242.5C 118.974,305.846 150.474,354.179 204.5,387.5C 201.5,387.5 198.5,387.5 195.5,387.5C 125.186,377.001 70.6858,342.001 32,282.5C 13.2853,251.287 2.45197,217.62 -0.5,181.5C -0.5,171.5 -0.5,161.5 -0.5,151.5C 5.05174,91.1449 30.0517,40.4783 74.5,-0.5 Z"/></g>
|
5
|
+
<g><path style="opacity:1" fill="#f4ddb2" d="M 262.5,175.5 C 262.5,180.833 262.5,186.167 262.5,191.5C 254.191,224.617 232.858,240.451 198.5,239C 177.426,234.92 162.593,223.087 154,203.5C 145.539,175.55 153.039,153.05 176.5,136C 202.655,122.121 226.488,125.288 248,145.5C 255.287,154.405 260.12,164.405 262.5,175.5 Z"/></g>
|
6
|
+
</svg>
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,57 @@
|
|
1
|
+
{
|
2
|
+
"name": "React Minus",
|
3
|
+
"start_url": ".",
|
4
|
+
"theme_color": "#333",
|
5
|
+
"short_name": "reactful",
|
6
|
+
"display": "standalone",
|
7
|
+
"background_color": "#333",
|
8
|
+
"description": "A sample app",
|
9
|
+
"icons": [
|
10
|
+
{
|
11
|
+
"src": "logo-48.png",
|
12
|
+
"sizes": "48x48",
|
13
|
+
"type": "image/png",
|
14
|
+
"purpose": "any maskable"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"src": "logo-72.png",
|
18
|
+
"sizes": "72x72",
|
19
|
+
"type": "image/png",
|
20
|
+
"purpose": "any maskable"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"src": "logo-96.png",
|
24
|
+
"sizes": "96x96",
|
25
|
+
"type": "image/png",
|
26
|
+
"purpose": "any maskable"
|
27
|
+
},
|
28
|
+
{
|
29
|
+
"src": "logo-144.png",
|
30
|
+
"sizes": "144x144",
|
31
|
+
"type": "image/png",
|
32
|
+
"purpose": "any maskable"
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"src": "logo-168.png",
|
36
|
+
"sizes": "168x168",
|
37
|
+
"type": "image/png",
|
38
|
+
"purpose": "any maskable"
|
39
|
+
},
|
40
|
+
{
|
41
|
+
"src": "logo-192.png",
|
42
|
+
"sizes": "192x192",
|
43
|
+
"type": "image/png",
|
44
|
+
"purpose": "any maskable"
|
45
|
+
},
|
46
|
+
{
|
47
|
+
"src": "logo-512.png",
|
48
|
+
"sizes": "512x512",
|
49
|
+
"type": "image/png",
|
50
|
+
"purpose": "any maskable"
|
51
|
+
}
|
52
|
+
],
|
53
|
+
"related_applications": [{
|
54
|
+
"platform": "play",
|
55
|
+
"url": "https://play.google.com/store/apps/details?id=sample"
|
56
|
+
}]
|
57
|
+
}
|