@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.
Files changed (74) hide show
  1. package/commons/package.json +22 -0
  2. package/commons/tsconfig.json +24 -0
  3. package/index.js +23 -5
  4. package/package.json +18 -16
  5. package/templates/empty/index.html +12 -0
  6. package/templates/empty/index.ts +3 -0
  7. package/templates/minimal/index.html +12 -0
  8. package/templates/minimal/index.ts +3 -0
  9. package/templates/sampling/apis/auth/db.ts +15 -0
  10. package/templates/sampling/apis/auth/index.ts +28 -0
  11. package/templates/sampling/apis/hello.ts +3 -0
  12. package/templates/sampling/apis/quotes.ts +16 -0
  13. package/templates/sampling/apis/sub/index.ts +3 -0
  14. package/templates/sampling/apis/sub/sub.ts +3 -0
  15. package/templates/sampling/assets/SLIDEME.png +0 -0
  16. package/templates/sampling/assets/default.css +91 -0
  17. package/templates/sampling/assets/favicon.ico +0 -0
  18. package/templates/sampling/assets/icon.png +0 -0
  19. package/templates/sampling/assets/icon.svg +6 -0
  20. package/templates/sampling/assets/logo-144.png +0 -0
  21. package/templates/sampling/assets/logo-168.png +0 -0
  22. package/templates/sampling/assets/logo-192.png +0 -0
  23. package/templates/sampling/assets/logo-48.png +0 -0
  24. package/templates/sampling/assets/logo-512.png +0 -0
  25. package/templates/sampling/assets/logo-72.png +0 -0
  26. package/templates/sampling/assets/logo-96.png +0 -0
  27. package/templates/sampling/assets/manifest.json +57 -0
  28. package/templates/sampling/assets/markdown.css +274 -0
  29. package/templates/sampling/assets/robots.txt +1 -0
  30. package/templates/sampling/assets/system.css +7 -0
  31. package/templates/sampling/builds/about.html +27 -0
  32. package/templates/sampling/builds/bundle.js +13116 -0
  33. package/templates/sampling/builds/bundle.ts +25 -0
  34. package/templates/sampling/builds/client.ts +1 -0
  35. package/templates/sampling/builds/clock.html +30 -0
  36. package/templates/sampling/builds/counter.html +30 -0
  37. package/templates/sampling/builds/forms/form.html +48 -0
  38. package/templates/sampling/builds/forms/index.html +48 -0
  39. package/templates/sampling/builds/hello.html +60 -0
  40. package/templates/sampling/builds/htmlx.html +24 -0
  41. package/templates/sampling/builds/htmlx.tsx +13 -0
  42. package/templates/sampling/builds/index.html +98 -0
  43. package/templates/sampling/builds/login.html +45 -0
  44. package/templates/sampling/builds/profile/index.html +54 -0
  45. package/templates/sampling/builds/quotes.html +26 -0
  46. package/templates/sampling/builds/shared.js +76 -0
  47. package/templates/sampling/builds/system.html +27 -0
  48. package/templates/sampling/components/header.tsx +7 -0
  49. package/templates/sampling/directives/index.ts +1 -0
  50. package/templates/sampling/directives/shown.ts +6 -0
  51. package/templates/sampling/index.html +20 -0
  52. package/templates/sampling/index.ts +19 -0
  53. package/templates/sampling/routes/about.html +13 -0
  54. package/templates/sampling/routes/clock.tsx +35 -0
  55. package/templates/sampling/routes/counter.tsx +21 -0
  56. package/templates/sampling/routes/forms/form.css +19 -0
  57. package/templates/sampling/routes/forms/form.tsx +51 -0
  58. package/templates/sampling/routes/forms/index.tsx +3 -0
  59. package/templates/sampling/routes/hello.tsx +62 -0
  60. package/templates/sampling/routes/htmlx.html +15 -0
  61. package/templates/sampling/routes/index.md +15 -0
  62. package/templates/sampling/routes/login.tsx +36 -0
  63. package/templates/sampling/routes/profile/detail.css +13 -0
  64. package/templates/sampling/routes/profile/detail.tsx +48 -0
  65. package/templates/sampling/routes/profile/index.tsx +14 -0
  66. package/templates/sampling/routes/profile/profile.css +8 -0
  67. package/templates/sampling/routes/profile/tester.tsx +11 -0
  68. package/templates/sampling/routes/quotes.tsx +25 -0
  69. package/templates/sampling/routes/system.tsx +23 -0
  70. package/templates/sampling/tests/access.spec.ts +29 -0
  71. package/templates/sampling/tests/counter.spec.ts +19 -0
  72. package/templates/sampling/tests/form.spec.ts +51 -0
  73. package/templates/sampling/tests/hello.spec.ts +25 -0
  74. 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 downloadRepo(`commons`, destination)
40
- await downloadRepo(`templates/${answers.template}`, destination)
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 downloadRepo = async (subfolder, destination) =>
63
- downloadGitHub('jsenaribeiro', 'reactful', subfolder, destination)
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 downloadRepo(from, goto); continue
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
- "name": "@reactful/create",
3
- "version": "0.0.91",
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" ],
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
- }
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,3 @@
1
+ import server from "@reactful/server"
2
+
3
+ await server("/routes").render("#root")
@@ -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,3 @@
1
+ import { server } from "@reactful/server"
2
+
3
+ await server("/routes").render("#root")
@@ -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,3 @@
1
+ export function get(request: Request) {
2
+ return new Response("hello world")
3
+ }
@@ -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
+ }
@@ -0,0 +1,3 @@
1
+ export function get(request: Request) {
2
+ return new Response("hi sub index")
3
+ }
@@ -0,0 +1,3 @@
1
+ export function get(request: Request) {
2
+ return new Response("hi sub-sub.ts")
3
+ }
@@ -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
+ }
@@ -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>
@@ -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
+ }