create-microact-app 1.0.1
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/index.js +95 -0
- package/package.json +21 -0
- package/templates/vanilla/.github/workflows/deploy.yml +38 -0
- package/templates/vanilla/index.html +13 -0
- package/templates/vanilla/node_modules/.package-lock.json +207 -0
- package/templates/vanilla/node_modules/@esbuild/darwin-x64/README.md +3 -0
- package/templates/vanilla/node_modules/@esbuild/darwin-x64/bin/esbuild +0 -0
- package/templates/vanilla/node_modules/@esbuild/darwin-x64/package.json +17 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/README.md +154 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.cjs.js +1749 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.cjs.js.map +1 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.esm.js +1743 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.esm.js.map +1 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.umd.js +2 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.umd.js.map +1 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/example/index.html +13 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/example/index.js +63 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/package.json +38 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/rollup.config.cjs +30 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/src/Component.js +831 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/src/DOMUpdater.js +320 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/src/EventBus.js +123 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/src/Router.js +253 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/src/UpdateScheduler.js +218 -0
- package/templates/vanilla/node_modules/@monygroupcorp/microact/src/index.js +6 -0
- package/templates/vanilla/node_modules/esbuild/LICENSE.md +21 -0
- package/templates/vanilla/node_modules/esbuild/README.md +3 -0
- package/templates/vanilla/node_modules/esbuild/bin/esbuild +0 -0
- package/templates/vanilla/node_modules/esbuild/install.js +287 -0
- package/templates/vanilla/node_modules/esbuild/lib/main.d.ts +660 -0
- package/templates/vanilla/node_modules/esbuild/lib/main.js +2393 -0
- package/templates/vanilla/node_modules/esbuild/package.json +42 -0
- package/templates/vanilla/node_modules/nanoid/LICENSE +20 -0
- package/templates/vanilla/node_modules/nanoid/README.md +39 -0
- package/templates/vanilla/node_modules/nanoid/async/index.browser.cjs +69 -0
- package/templates/vanilla/node_modules/nanoid/async/index.browser.js +34 -0
- package/templates/vanilla/node_modules/nanoid/async/index.cjs +71 -0
- package/templates/vanilla/node_modules/nanoid/async/index.d.ts +56 -0
- package/templates/vanilla/node_modules/nanoid/async/index.js +35 -0
- package/templates/vanilla/node_modules/nanoid/async/index.native.js +26 -0
- package/templates/vanilla/node_modules/nanoid/async/package.json +12 -0
- package/templates/vanilla/node_modules/nanoid/bin/nanoid.cjs +55 -0
- package/templates/vanilla/node_modules/nanoid/index.browser.cjs +72 -0
- package/templates/vanilla/node_modules/nanoid/index.browser.js +34 -0
- package/templates/vanilla/node_modules/nanoid/index.cjs +85 -0
- package/templates/vanilla/node_modules/nanoid/index.d.cts +91 -0
- package/templates/vanilla/node_modules/nanoid/index.d.ts +91 -0
- package/templates/vanilla/node_modules/nanoid/index.js +45 -0
- package/templates/vanilla/node_modules/nanoid/nanoid.js +1 -0
- package/templates/vanilla/node_modules/nanoid/non-secure/index.cjs +34 -0
- package/templates/vanilla/node_modules/nanoid/non-secure/index.d.ts +33 -0
- package/templates/vanilla/node_modules/nanoid/non-secure/index.js +21 -0
- package/templates/vanilla/node_modules/nanoid/non-secure/package.json +6 -0
- package/templates/vanilla/node_modules/nanoid/package.json +89 -0
- package/templates/vanilla/node_modules/nanoid/url-alphabet/index.cjs +7 -0
- package/templates/vanilla/node_modules/nanoid/url-alphabet/index.js +3 -0
- package/templates/vanilla/node_modules/nanoid/url-alphabet/package.json +6 -0
- package/templates/vanilla/node_modules/picocolors/LICENSE +15 -0
- package/templates/vanilla/node_modules/picocolors/README.md +21 -0
- package/templates/vanilla/node_modules/picocolors/package.json +25 -0
- package/templates/vanilla/node_modules/picocolors/picocolors.browser.js +4 -0
- package/templates/vanilla/node_modules/picocolors/picocolors.d.ts +5 -0
- package/templates/vanilla/node_modules/picocolors/picocolors.js +75 -0
- package/templates/vanilla/node_modules/picocolors/types.d.ts +51 -0
- package/templates/vanilla/node_modules/postcss/LICENSE +20 -0
- package/templates/vanilla/node_modules/postcss/README.md +29 -0
- package/templates/vanilla/node_modules/postcss/lib/at-rule.d.ts +140 -0
- package/templates/vanilla/node_modules/postcss/lib/at-rule.js +25 -0
- package/templates/vanilla/node_modules/postcss/lib/comment.d.ts +68 -0
- package/templates/vanilla/node_modules/postcss/lib/comment.js +13 -0
- package/templates/vanilla/node_modules/postcss/lib/container.d.ts +483 -0
- package/templates/vanilla/node_modules/postcss/lib/container.js +447 -0
- package/templates/vanilla/node_modules/postcss/lib/css-syntax-error.d.ts +248 -0
- package/templates/vanilla/node_modules/postcss/lib/css-syntax-error.js +133 -0
- package/templates/vanilla/node_modules/postcss/lib/declaration.d.ts +151 -0
- package/templates/vanilla/node_modules/postcss/lib/declaration.js +24 -0
- package/templates/vanilla/node_modules/postcss/lib/document.d.ts +69 -0
- package/templates/vanilla/node_modules/postcss/lib/document.js +33 -0
- package/templates/vanilla/node_modules/postcss/lib/fromJSON.d.ts +9 -0
- package/templates/vanilla/node_modules/postcss/lib/fromJSON.js +54 -0
- package/templates/vanilla/node_modules/postcss/lib/input.d.ts +227 -0
- package/templates/vanilla/node_modules/postcss/lib/input.js +265 -0
- package/templates/vanilla/node_modules/postcss/lib/lazy-result.d.ts +190 -0
- package/templates/vanilla/node_modules/postcss/lib/lazy-result.js +550 -0
- package/templates/vanilla/node_modules/postcss/lib/list.d.ts +60 -0
- package/templates/vanilla/node_modules/postcss/lib/list.js +58 -0
- package/templates/vanilla/node_modules/postcss/lib/map-generator.js +368 -0
- package/templates/vanilla/node_modules/postcss/lib/no-work-result.d.ts +46 -0
- package/templates/vanilla/node_modules/postcss/lib/no-work-result.js +138 -0
- package/templates/vanilla/node_modules/postcss/lib/node.d.ts +556 -0
- package/templates/vanilla/node_modules/postcss/lib/node.js +449 -0
- package/templates/vanilla/node_modules/postcss/lib/parse.d.ts +9 -0
- package/templates/vanilla/node_modules/postcss/lib/parse.js +42 -0
- package/templates/vanilla/node_modules/postcss/lib/parser.js +611 -0
- package/templates/vanilla/node_modules/postcss/lib/postcss.d.mts +69 -0
- package/templates/vanilla/node_modules/postcss/lib/postcss.d.ts +458 -0
- package/templates/vanilla/node_modules/postcss/lib/postcss.js +101 -0
- package/templates/vanilla/node_modules/postcss/lib/postcss.mjs +30 -0
- package/templates/vanilla/node_modules/postcss/lib/previous-map.d.ts +81 -0
- package/templates/vanilla/node_modules/postcss/lib/previous-map.js +144 -0
- package/templates/vanilla/node_modules/postcss/lib/processor.d.ts +115 -0
- package/templates/vanilla/node_modules/postcss/lib/processor.js +67 -0
- package/templates/vanilla/node_modules/postcss/lib/result.d.ts +205 -0
- package/templates/vanilla/node_modules/postcss/lib/result.js +42 -0
- package/templates/vanilla/node_modules/postcss/lib/root.d.ts +87 -0
- package/templates/vanilla/node_modules/postcss/lib/root.js +61 -0
- package/templates/vanilla/node_modules/postcss/lib/rule.d.ts +126 -0
- package/templates/vanilla/node_modules/postcss/lib/rule.js +27 -0
- package/templates/vanilla/node_modules/postcss/lib/stringifier.d.ts +46 -0
- package/templates/vanilla/node_modules/postcss/lib/stringifier.js +353 -0
- package/templates/vanilla/node_modules/postcss/lib/stringify.d.ts +9 -0
- package/templates/vanilla/node_modules/postcss/lib/stringify.js +11 -0
- package/templates/vanilla/node_modules/postcss/lib/symbols.js +5 -0
- package/templates/vanilla/node_modules/postcss/lib/terminal-highlight.js +70 -0
- package/templates/vanilla/node_modules/postcss/lib/tokenize.js +266 -0
- package/templates/vanilla/node_modules/postcss/lib/warn-once.js +13 -0
- package/templates/vanilla/node_modules/postcss/lib/warning.d.ts +147 -0
- package/templates/vanilla/node_modules/postcss/lib/warning.js +37 -0
- package/templates/vanilla/node_modules/postcss/package.json +88 -0
- package/templates/vanilla/node_modules/rollup/LICENSE.md +695 -0
- package/templates/vanilla/node_modules/rollup/README.md +125 -0
- package/templates/vanilla/node_modules/rollup/dist/bin/rollup +1715 -0
- package/templates/vanilla/node_modules/rollup/dist/es/getLogFilter.js +64 -0
- package/templates/vanilla/node_modules/rollup/dist/es/package.json +1 -0
- package/templates/vanilla/node_modules/rollup/dist/es/rollup.js +17 -0
- package/templates/vanilla/node_modules/rollup/dist/es/shared/node-entry.js +27273 -0
- package/templates/vanilla/node_modules/rollup/dist/es/shared/watch.js +4857 -0
- package/templates/vanilla/node_modules/rollup/dist/getLogFilter.d.ts +5 -0
- package/templates/vanilla/node_modules/rollup/dist/getLogFilter.js +69 -0
- package/templates/vanilla/node_modules/rollup/dist/loadConfigFile.d.ts +20 -0
- package/templates/vanilla/node_modules/rollup/dist/loadConfigFile.js +29 -0
- package/templates/vanilla/node_modules/rollup/dist/rollup.d.ts +1012 -0
- package/templates/vanilla/node_modules/rollup/dist/rollup.js +31 -0
- package/templates/vanilla/node_modules/rollup/dist/shared/fsevents-importer.js +37 -0
- package/templates/vanilla/node_modules/rollup/dist/shared/index.js +4571 -0
- package/templates/vanilla/node_modules/rollup/dist/shared/loadConfigFile.js +546 -0
- package/templates/vanilla/node_modules/rollup/dist/shared/rollup.js +27351 -0
- package/templates/vanilla/node_modules/rollup/dist/shared/watch-cli.js +561 -0
- package/templates/vanilla/node_modules/rollup/dist/shared/watch-proxy.js +87 -0
- package/templates/vanilla/node_modules/rollup/dist/shared/watch.js +316 -0
- package/templates/vanilla/node_modules/rollup/package.json +181 -0
- package/templates/vanilla/node_modules/source-map-js/LICENSE +28 -0
- package/templates/vanilla/node_modules/source-map-js/README.md +765 -0
- package/templates/vanilla/node_modules/source-map-js/lib/array-set.js +121 -0
- package/templates/vanilla/node_modules/source-map-js/lib/base64-vlq.js +140 -0
- package/templates/vanilla/node_modules/source-map-js/lib/base64.js +67 -0
- package/templates/vanilla/node_modules/source-map-js/lib/binary-search.js +111 -0
- package/templates/vanilla/node_modules/source-map-js/lib/mapping-list.js +79 -0
- package/templates/vanilla/node_modules/source-map-js/lib/quick-sort.js +132 -0
- package/templates/vanilla/node_modules/source-map-js/lib/source-map-consumer.d.ts +1 -0
- package/templates/vanilla/node_modules/source-map-js/lib/source-map-consumer.js +1188 -0
- package/templates/vanilla/node_modules/source-map-js/lib/source-map-generator.d.ts +1 -0
- package/templates/vanilla/node_modules/source-map-js/lib/source-map-generator.js +444 -0
- package/templates/vanilla/node_modules/source-map-js/lib/source-node.d.ts +1 -0
- package/templates/vanilla/node_modules/source-map-js/lib/source-node.js +413 -0
- package/templates/vanilla/node_modules/source-map-js/lib/util.js +594 -0
- package/templates/vanilla/node_modules/source-map-js/package.json +71 -0
- package/templates/vanilla/node_modules/source-map-js/source-map.d.ts +104 -0
- package/templates/vanilla/node_modules/source-map-js/source-map.js +8 -0
- package/templates/vanilla/node_modules/vite/LICENSE.md +3396 -0
- package/templates/vanilla/node_modules/vite/README.md +20 -0
- package/templates/vanilla/node_modules/vite/bin/openChrome.applescript +95 -0
- package/templates/vanilla/node_modules/vite/bin/vite.js +61 -0
- package/templates/vanilla/node_modules/vite/client.d.ts +281 -0
- package/templates/vanilla/node_modules/vite/dist/client/client.mjs +725 -0
- package/templates/vanilla/node_modules/vite/dist/client/client.mjs.map +1 -0
- package/templates/vanilla/node_modules/vite/dist/client/env.mjs +30 -0
- package/templates/vanilla/node_modules/vite/dist/client/env.mjs.map +1 -0
- package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-7ec6f216.js +914 -0
- package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-827b23df.js +66713 -0
- package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-c423598f.js +561 -0
- package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-f0c7dae0.js +7930 -0
- package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-f1e8587f.js +7646 -0
- package/templates/vanilla/node_modules/vite/dist/node/cli.js +929 -0
- package/templates/vanilla/node_modules/vite/dist/node/constants.js +130 -0
- package/templates/vanilla/node_modules/vite/dist/node/index.d.ts +3548 -0
- package/templates/vanilla/node_modules/vite/dist/node/index.js +158 -0
- package/templates/vanilla/node_modules/vite/dist/node-cjs/publicUtils.cjs +4555 -0
- package/templates/vanilla/node_modules/vite/index.cjs +34 -0
- package/templates/vanilla/node_modules/vite/package.json +173 -0
- package/templates/vanilla/node_modules/vite/types/customEvent.d.ts +35 -0
- package/templates/vanilla/node_modules/vite/types/hmrPayload.d.ts +61 -0
- package/templates/vanilla/node_modules/vite/types/hot.d.ts +32 -0
- package/templates/vanilla/node_modules/vite/types/importGlob.d.ts +97 -0
- package/templates/vanilla/node_modules/vite/types/importMeta.d.ts +26 -0
- package/templates/vanilla/node_modules/vite/types/metadata.d.ts +10 -0
- package/templates/vanilla/node_modules/vite/types/package.json +4 -0
- package/templates/vanilla/package-lock.json +589 -0
- package/templates/vanilla/package.json +17 -0
- package/templates/vanilla/src/components/App.js +60 -0
- package/templates/vanilla/src/components/Card.js +21 -0
- package/templates/vanilla/src/components/Hero.js +15 -0
- package/templates/vanilla/src/components/InteractiveDemo.js +59 -0
- package/templates/vanilla/src/main.js +9 -0
- package/templates/vanilla/src/style/main.css +172 -0
- package/templates/vanilla/vite.config.js +8 -0
- package/templates/web3/.env.example +15 -0
- package/templates/web3/.github/workflows/deploy.yml +38 -0
- package/templates/web3/README.md +33 -0
- package/templates/web3/contracts/foundry.toml +11 -0
- package/templates/web3/contracts/script/Deploy.s.sol +13 -0
- package/templates/web3/contracts/src/Counter.sol +21 -0
- package/templates/web3/index.html +13 -0
- package/templates/web3/package.json +25 -0
- package/templates/web3/scripts/chain-start.mjs +305 -0
- package/templates/web3/scripts/chain-stop.mjs +34 -0
- package/templates/web3/scripts/deploy.mjs +155 -0
- package/templates/web3/scripts/setup.mjs +42 -0
- package/templates/web3/src/components/App.js +49 -0
- package/templates/web3/src/components/CounterCard.js +111 -0
- package/templates/web3/src/main.js +54 -0
- package/templates/web3/src/style/main.css +345 -0
- package/templates/web3/vite.config.js +29 -0
package/index.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = path.dirname(__filename);
|
|
9
|
+
|
|
10
|
+
function copyDir(src, dest) {
|
|
11
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
12
|
+
let entries = fs.readdirSync(src, { withFileTypes: true });
|
|
13
|
+
|
|
14
|
+
for (let entry of entries) {
|
|
15
|
+
let srcPath = path.join(src, entry.name);
|
|
16
|
+
let destPath = path.join(dest, entry.name);
|
|
17
|
+
|
|
18
|
+
entry.isDirectory() ? copyDir(srcPath, destPath) : fs.copyFileSync(srcPath, destPath);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function main() {
|
|
23
|
+
const argv = process.argv.slice(2);
|
|
24
|
+
let projectName = 'my-microact-app';
|
|
25
|
+
let templateName = 'vanilla';
|
|
26
|
+
|
|
27
|
+
// Basic argument parsing for project name and --template flag
|
|
28
|
+
for (let i = 0; i < argv.length; i++) {
|
|
29
|
+
if (argv[i].startsWith('--template=')) {
|
|
30
|
+
templateName = argv[i].split('=')[1];
|
|
31
|
+
} else if (argv[i] === '--template' && argv[i + 1]) {
|
|
32
|
+
templateName = argv[i + 1];
|
|
33
|
+
i++; // Skip next arg
|
|
34
|
+
} else if (!argv[i].startsWith('-')) {
|
|
35
|
+
projectName = argv[i];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const root = path.join(process.cwd(), projectName);
|
|
40
|
+
const templateDir = path.join(__dirname, 'templates', templateName);
|
|
41
|
+
|
|
42
|
+
if (!fs.existsSync(templateDir)) {
|
|
43
|
+
console.error(`Error: Template "${templateName}" not found.`);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
console.log(`Creating a new Microact app in ${root}...`);
|
|
48
|
+
|
|
49
|
+
copyDir(templateDir, root);
|
|
50
|
+
|
|
51
|
+
// Post-copy modifications: replace <repo-name> in vite.config.js and package.json
|
|
52
|
+
const viteConfigPath = path.join(root, 'vite.config.js');
|
|
53
|
+
if (fs.existsSync(viteConfigPath)) {
|
|
54
|
+
let content = fs.readFileSync(viteConfigPath, 'utf8');
|
|
55
|
+
// Simple placeholder for now, user will need to update this
|
|
56
|
+
content = content.replace('/<repo-name>/', `/${projectName}/`);
|
|
57
|
+
fs.writeFileSync(viteConfigPath, content);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const packageJsonPath = path.join(root, 'package.json');
|
|
61
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
62
|
+
let content = fs.readFileSync(packageJsonPath, 'utf8');
|
|
63
|
+
content = content.replace('"name": "my-app"', `"name": "${projectName}"`);
|
|
64
|
+
fs.writeFileSync(packageJsonPath, content, 'utf8');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// --- Start of new logic ---
|
|
68
|
+
// Check if we're in the monorepo for local development
|
|
69
|
+
const isLocalDev = fs.existsSync(path.join(__dirname, '../microact'));
|
|
70
|
+
|
|
71
|
+
if (isLocalDev) {
|
|
72
|
+
console.log('Local development mode detected. Adjusting dependencies...');
|
|
73
|
+
const appPackageJsonPath = path.join(root, 'package.json');
|
|
74
|
+
if (fs.existsSync(appPackageJsonPath)) {
|
|
75
|
+
const appPkg = JSON.parse(fs.readFileSync(appPackageJsonPath, 'utf8'));
|
|
76
|
+
|
|
77
|
+
if (appPkg.dependencies['@monygroupcorp/microact']) {
|
|
78
|
+
appPkg.dependencies['@monygroupcorp/microact'] = 'file:../microact';
|
|
79
|
+
}
|
|
80
|
+
if (appPkg.dependencies['@monygroupcorp/micro-web3']) {
|
|
81
|
+
appPkg.dependencies['@monygroupcorp/micro-web3'] = 'file:../micro-web3';
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
fs.writeFileSync(appPackageJsonPath, JSON.stringify(appPkg, null, 2));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// --- End of new logic ---
|
|
88
|
+
|
|
89
|
+
console.log('\nDone. Now run:');
|
|
90
|
+
console.log(` cd ${projectName}`);
|
|
91
|
+
console.log(' npm install');
|
|
92
|
+
console.log(' npm run dev');
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
main();
|
package/package.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "create-microact-app",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "A CLI tool to scaffold Microact and Micro-Web3 applications.",
|
|
6
|
+
"main": "index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"create-microact-app": "./index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"microact",
|
|
15
|
+
"micro-web3",
|
|
16
|
+
"scaffolding",
|
|
17
|
+
"vite"
|
|
18
|
+
],
|
|
19
|
+
"author": "Monygroup Corp",
|
|
20
|
+
"license": "ISC"
|
|
21
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: Deploy to GitHub Pages
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build-and-deploy:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- name: Checkout
|
|
14
|
+
uses: actions/checkout@v3
|
|
15
|
+
|
|
16
|
+
- name: Setup Node.js
|
|
17
|
+
uses: actions/setup-node@v3
|
|
18
|
+
with:
|
|
19
|
+
node-version: '18'
|
|
20
|
+
cache: 'npm'
|
|
21
|
+
|
|
22
|
+
- name: Install dependencies
|
|
23
|
+
run: npm install
|
|
24
|
+
|
|
25
|
+
- name: Build
|
|
26
|
+
run: npm run build
|
|
27
|
+
|
|
28
|
+
- name: Deploy
|
|
29
|
+
uses: peaceiris/actions-gh-pages@v3
|
|
30
|
+
with:
|
|
31
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
32
|
+
publish_dir: ./dist
|
|
33
|
+
# This is important for single-page applications that use client-side routing
|
|
34
|
+
# This ensures that all requests are routed to index.html
|
|
35
|
+
# enabling proper routing after refresh or direct URL access
|
|
36
|
+
keep_files: false # Ensure existing files are overwritten
|
|
37
|
+
force_orphan: true # Create a fresh gh-pages branch each time
|
|
38
|
+
enable_jekyll: false # Disable Jekyll processing
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<title>Vite + Microact</title>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div id="app"></div>
|
|
11
|
+
<script type="module" src="/src/main.js"></script>
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "my-app",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"lockfileVersion": 3,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"packages": {
|
|
7
|
+
"node_modules/@esbuild/darwin-x64": {
|
|
8
|
+
"version": "0.18.20",
|
|
9
|
+
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
|
|
10
|
+
"integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
|
|
11
|
+
"cpu": [
|
|
12
|
+
"x64"
|
|
13
|
+
],
|
|
14
|
+
"dev": true,
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"optional": true,
|
|
17
|
+
"os": [
|
|
18
|
+
"darwin"
|
|
19
|
+
],
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": ">=12"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"node_modules/@monygroupcorp/microact": {
|
|
25
|
+
"version": "0.1.1",
|
|
26
|
+
"resolved": "https://registry.npmjs.org/@monygroupcorp/microact/-/microact-0.1.1.tgz",
|
|
27
|
+
"integrity": "sha512-DaA02WzBEMiznRPvf/j+Oakp64N3A1ZqyVUN6SYZgBl10M570AAcfHFgQOTg/23K8bwn6Hk4GHY9DTuGYbWo9g==",
|
|
28
|
+
"license": "MIT"
|
|
29
|
+
},
|
|
30
|
+
"node_modules/esbuild": {
|
|
31
|
+
"version": "0.18.20",
|
|
32
|
+
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
|
|
33
|
+
"integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
|
|
34
|
+
"dev": true,
|
|
35
|
+
"hasInstallScript": true,
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"bin": {
|
|
38
|
+
"esbuild": "bin/esbuild"
|
|
39
|
+
},
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=12"
|
|
42
|
+
},
|
|
43
|
+
"optionalDependencies": {
|
|
44
|
+
"@esbuild/android-arm": "0.18.20",
|
|
45
|
+
"@esbuild/android-arm64": "0.18.20",
|
|
46
|
+
"@esbuild/android-x64": "0.18.20",
|
|
47
|
+
"@esbuild/darwin-arm64": "0.18.20",
|
|
48
|
+
"@esbuild/darwin-x64": "0.18.20",
|
|
49
|
+
"@esbuild/freebsd-arm64": "0.18.20",
|
|
50
|
+
"@esbuild/freebsd-x64": "0.18.20",
|
|
51
|
+
"@esbuild/linux-arm": "0.18.20",
|
|
52
|
+
"@esbuild/linux-arm64": "0.18.20",
|
|
53
|
+
"@esbuild/linux-ia32": "0.18.20",
|
|
54
|
+
"@esbuild/linux-loong64": "0.18.20",
|
|
55
|
+
"@esbuild/linux-mips64el": "0.18.20",
|
|
56
|
+
"@esbuild/linux-ppc64": "0.18.20",
|
|
57
|
+
"@esbuild/linux-riscv64": "0.18.20",
|
|
58
|
+
"@esbuild/linux-s390x": "0.18.20",
|
|
59
|
+
"@esbuild/linux-x64": "0.18.20",
|
|
60
|
+
"@esbuild/netbsd-x64": "0.18.20",
|
|
61
|
+
"@esbuild/openbsd-x64": "0.18.20",
|
|
62
|
+
"@esbuild/sunos-x64": "0.18.20",
|
|
63
|
+
"@esbuild/win32-arm64": "0.18.20",
|
|
64
|
+
"@esbuild/win32-ia32": "0.18.20",
|
|
65
|
+
"@esbuild/win32-x64": "0.18.20"
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"node_modules/nanoid": {
|
|
69
|
+
"version": "3.3.11",
|
|
70
|
+
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
|
|
71
|
+
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
|
|
72
|
+
"dev": true,
|
|
73
|
+
"funding": [
|
|
74
|
+
{
|
|
75
|
+
"type": "github",
|
|
76
|
+
"url": "https://github.com/sponsors/ai"
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"license": "MIT",
|
|
80
|
+
"bin": {
|
|
81
|
+
"nanoid": "bin/nanoid.cjs"
|
|
82
|
+
},
|
|
83
|
+
"engines": {
|
|
84
|
+
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"node_modules/picocolors": {
|
|
88
|
+
"version": "1.1.1",
|
|
89
|
+
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
|
90
|
+
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
|
91
|
+
"dev": true,
|
|
92
|
+
"license": "ISC"
|
|
93
|
+
},
|
|
94
|
+
"node_modules/postcss": {
|
|
95
|
+
"version": "8.5.6",
|
|
96
|
+
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
|
|
97
|
+
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
|
|
98
|
+
"dev": true,
|
|
99
|
+
"funding": [
|
|
100
|
+
{
|
|
101
|
+
"type": "opencollective",
|
|
102
|
+
"url": "https://opencollective.com/postcss/"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"type": "tidelift",
|
|
106
|
+
"url": "https://tidelift.com/funding/github/npm/postcss"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"type": "github",
|
|
110
|
+
"url": "https://github.com/sponsors/ai"
|
|
111
|
+
}
|
|
112
|
+
],
|
|
113
|
+
"license": "MIT",
|
|
114
|
+
"dependencies": {
|
|
115
|
+
"nanoid": "^3.3.11",
|
|
116
|
+
"picocolors": "^1.1.1",
|
|
117
|
+
"source-map-js": "^1.2.1"
|
|
118
|
+
},
|
|
119
|
+
"engines": {
|
|
120
|
+
"node": "^10 || ^12 || >=14"
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"node_modules/rollup": {
|
|
124
|
+
"version": "3.29.5",
|
|
125
|
+
"resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz",
|
|
126
|
+
"integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==",
|
|
127
|
+
"dev": true,
|
|
128
|
+
"license": "MIT",
|
|
129
|
+
"bin": {
|
|
130
|
+
"rollup": "dist/bin/rollup"
|
|
131
|
+
},
|
|
132
|
+
"engines": {
|
|
133
|
+
"node": ">=14.18.0",
|
|
134
|
+
"npm": ">=8.0.0"
|
|
135
|
+
},
|
|
136
|
+
"optionalDependencies": {
|
|
137
|
+
"fsevents": "~2.3.2"
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
"node_modules/source-map-js": {
|
|
141
|
+
"version": "1.2.1",
|
|
142
|
+
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
|
|
143
|
+
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
|
|
144
|
+
"dev": true,
|
|
145
|
+
"license": "BSD-3-Clause",
|
|
146
|
+
"engines": {
|
|
147
|
+
"node": ">=0.10.0"
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"node_modules/vite": {
|
|
151
|
+
"version": "4.5.14",
|
|
152
|
+
"resolved": "https://registry.npmjs.org/vite/-/vite-4.5.14.tgz",
|
|
153
|
+
"integrity": "sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==",
|
|
154
|
+
"dev": true,
|
|
155
|
+
"license": "MIT",
|
|
156
|
+
"dependencies": {
|
|
157
|
+
"esbuild": "^0.18.10",
|
|
158
|
+
"postcss": "^8.4.27",
|
|
159
|
+
"rollup": "^3.27.1"
|
|
160
|
+
},
|
|
161
|
+
"bin": {
|
|
162
|
+
"vite": "bin/vite.js"
|
|
163
|
+
},
|
|
164
|
+
"engines": {
|
|
165
|
+
"node": "^14.18.0 || >=16.0.0"
|
|
166
|
+
},
|
|
167
|
+
"funding": {
|
|
168
|
+
"url": "https://github.com/vitejs/vite?sponsor=1"
|
|
169
|
+
},
|
|
170
|
+
"optionalDependencies": {
|
|
171
|
+
"fsevents": "~2.3.2"
|
|
172
|
+
},
|
|
173
|
+
"peerDependencies": {
|
|
174
|
+
"@types/node": ">= 14",
|
|
175
|
+
"less": "*",
|
|
176
|
+
"lightningcss": "^1.21.0",
|
|
177
|
+
"sass": "*",
|
|
178
|
+
"stylus": "*",
|
|
179
|
+
"sugarss": "*",
|
|
180
|
+
"terser": "^5.4.0"
|
|
181
|
+
},
|
|
182
|
+
"peerDependenciesMeta": {
|
|
183
|
+
"@types/node": {
|
|
184
|
+
"optional": true
|
|
185
|
+
},
|
|
186
|
+
"less": {
|
|
187
|
+
"optional": true
|
|
188
|
+
},
|
|
189
|
+
"lightningcss": {
|
|
190
|
+
"optional": true
|
|
191
|
+
},
|
|
192
|
+
"sass": {
|
|
193
|
+
"optional": true
|
|
194
|
+
},
|
|
195
|
+
"stylus": {
|
|
196
|
+
"optional": true
|
|
197
|
+
},
|
|
198
|
+
"sugarss": {
|
|
199
|
+
"optional": true
|
|
200
|
+
},
|
|
201
|
+
"terser": {
|
|
202
|
+
"optional": true
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@esbuild/darwin-x64",
|
|
3
|
+
"version": "0.18.20",
|
|
4
|
+
"description": "The macOS 64-bit binary for esbuild, a JavaScript bundler.",
|
|
5
|
+
"repository": "https://github.com/evanw/esbuild",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"preferUnplugged": true,
|
|
8
|
+
"engines": {
|
|
9
|
+
"node": ">=12"
|
|
10
|
+
},
|
|
11
|
+
"os": [
|
|
12
|
+
"darwin"
|
|
13
|
+
],
|
|
14
|
+
"cpu": [
|
|
15
|
+
"x64"
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# microact
|
|
2
|
+
|
|
3
|
+
A lean, minimal React-like framework for building fast and efficient client-side web applications. `microact` focuses on providing core component functionality, state management, and a flexible rendering system without the heavy overhead of larger frameworks.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
* **Component-Based:** Build UIs using familiar class-based components with lifecycle methods.
|
|
8
|
+
* **Reactive State:** Simple `this.state` and `this.setState` for managing component-local state.
|
|
9
|
+
* **Granular DOM Updates:** Efficient DOM manipulation to minimize re-renders and optimize performance.
|
|
10
|
+
* **Event Handling:** Declarative event binding for clean and maintainable UI logic.
|
|
11
|
+
* **Context API:** Built-in context system for prop drilling avoidance and global state propagation.
|
|
12
|
+
* **Pluggable Stores:** Designed to integrate seamlessly with external state management solutions.
|
|
13
|
+
* **Small Footprint:** Optimized for client-side execution in statically hosted environments.
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
Install `microact` using npm:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install microact
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
### 1. Create a Component
|
|
26
|
+
|
|
27
|
+
Create a class that extends `Component` and implements a `render()` method:
|
|
28
|
+
|
|
29
|
+
```javascript
|
|
30
|
+
// myComponent.js
|
|
31
|
+
import { Component } from 'microact';
|
|
32
|
+
|
|
33
|
+
class MyComponent extends Component {
|
|
34
|
+
constructor(element) {
|
|
35
|
+
super(element);
|
|
36
|
+
this.state = {
|
|
37
|
+
count: 0,
|
|
38
|
+
message: 'Hello, microact!'
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Lifecycle method: Called after component is mounted to the DOM
|
|
43
|
+
onMount() {
|
|
44
|
+
console.log('MyComponent mounted!');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Define DOM events
|
|
48
|
+
events() {
|
|
49
|
+
return {
|
|
50
|
+
'click button': 'incrementCount',
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
incrementCount() {
|
|
55
|
+
this.setState({ count: this.state.count + 1 });
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Render method returns an HTML string
|
|
59
|
+
render() {
|
|
60
|
+
return `
|
|
61
|
+
<div>
|
|
62
|
+
<h1>${this.state.message}</h1>
|
|
63
|
+
<p>Count: ${this.state.count}</p>
|
|
64
|
+
<button>Click me!</button>
|
|
65
|
+
</div>
|
|
66
|
+
`;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export default MyComponent;
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 2. Mount Your Component
|
|
74
|
+
|
|
75
|
+
In your main application file, import and mount your component to a DOM element:
|
|
76
|
+
|
|
77
|
+
```javascript
|
|
78
|
+
// index.js
|
|
79
|
+
import MyComponent from './myComponent.js';
|
|
80
|
+
|
|
81
|
+
const appRoot = document.getElementById('app-root');
|
|
82
|
+
const myComponent = new MyComponent(appRoot);
|
|
83
|
+
myComponent.mount(appRoot);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 3. Basic HTML Structure
|
|
87
|
+
|
|
88
|
+
Your HTML file should have a root element for your application:
|
|
89
|
+
|
|
90
|
+
```html
|
|
91
|
+
<!DOCTYPE html>
|
|
92
|
+
<html lang="en">
|
|
93
|
+
<head>
|
|
94
|
+
<meta charset="UTF-8">
|
|
95
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
96
|
+
<title>Microact App</title>
|
|
97
|
+
</head>
|
|
98
|
+
<body>
|
|
99
|
+
<div id="app-root"></div>
|
|
100
|
+
<script type="module" src="index.js"></script>
|
|
101
|
+
</body>
|
|
102
|
+
</html>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## API Reference
|
|
106
|
+
|
|
107
|
+
### `Component` Class
|
|
108
|
+
|
|
109
|
+
* `constructor(rootElement)`: Initializes the component.
|
|
110
|
+
* `setState(newState)`: Updates component state and triggers a re-render if `shouldUpdate` returns `true`.
|
|
111
|
+
* `mount(element)`: Mounts the component to the given DOM element.
|
|
112
|
+
* `unmount()`: Removes the component from the DOM and cleans up resources.
|
|
113
|
+
* `render()`: **(Must be implemented by subclasses)** Returns the HTML string representation of the component.
|
|
114
|
+
* `template()`: Optional. If `render()` is not overridden, it defaults to calling `this.template()`.
|
|
115
|
+
* `onMount()`: Lifecycle hook called after mounting.
|
|
116
|
+
* `onUnmount()`: Lifecycle hook called before unmounting.
|
|
117
|
+
* `onStateUpdate(oldState, newState)`: Lifecycle hook called after state update and before rendering.
|
|
118
|
+
* `events()`: Returns an object mapping event selectors to handler methods (e.g., `{ 'click button': 'handleClick' }`).
|
|
119
|
+
* `registerCleanup(cleanupFn)`: Registers a function to be called on `unmount`.
|
|
120
|
+
* `setTimeout(callback, delay)`: Wrapper for `setTimeout` with automatic cleanup.
|
|
121
|
+
* `setInterval(callback, delay)`: Wrapper for `setInterval` with automatic cleanup.
|
|
122
|
+
* `subscribe(eventName, callback)`: Subscribes to an `EventBus` event with automatic cleanup.
|
|
123
|
+
* `subscribeOnce(eventName, callback)`: Subscribes to an `EventBus` event once with automatic cleanup.
|
|
124
|
+
* `useStore(store, selector, onUpdate)`: Hook to subscribe to external store state changes.
|
|
125
|
+
* `provideContext(key, value)`: Provides a context value to child components.
|
|
126
|
+
* `getContext(key)`: Retrieves a context value from the component tree.
|
|
127
|
+
|
|
128
|
+
### `EventBus`
|
|
129
|
+
|
|
130
|
+
A simple global event bus for inter-component communication. Access via `import { eventBus } from 'microact';`
|
|
131
|
+
|
|
132
|
+
* `eventBus.on(eventName, callback)`: Subscribe to an event.
|
|
133
|
+
* `eventBus.off(eventName, callback)`: Unsubscribe from an event.
|
|
134
|
+
* `eventBus.emit(eventName, data)`: Emit an event.
|
|
135
|
+
* `eventBus.once(eventName, callback)`: Subscribe to an event once.
|
|
136
|
+
|
|
137
|
+
## Development
|
|
138
|
+
|
|
139
|
+
To build the project:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
npm install
|
|
143
|
+
npm run build
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
The build output will be in the `dist/` directory.
|
|
147
|
+
|
|
148
|
+
## Contributing
|
|
149
|
+
|
|
150
|
+
Contributions are welcome! Please open an issue or submit a pull request.
|
|
151
|
+
|
|
152
|
+
## License
|
|
153
|
+
|
|
154
|
+
This project is licensed under the MIT License.
|