mikuru 1.0.0
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/CHANGELOG.md +14 -0
- package/README.md +142 -0
- package/dist/compiler/analyzeTemplate.d.ts +7 -0
- package/dist/compiler/analyzeTemplate.js +161 -0
- package/dist/compiler/analyzeTemplate.js.map +1 -0
- package/dist/compiler/compile.d.ts +2 -0
- package/dist/compiler/compile.js +24 -0
- package/dist/compiler/compile.js.map +1 -0
- package/dist/compiler/errors.d.ts +17 -0
- package/dist/compiler/errors.js +51 -0
- package/dist/compiler/errors.js.map +1 -0
- package/dist/compiler/generate.d.ts +2 -0
- package/dist/compiler/generate.js +982 -0
- package/dist/compiler/generate.js.map +1 -0
- package/dist/compiler/index.d.ts +9 -0
- package/dist/compiler/index.js +8 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/compiler/parseExpression.d.ts +14 -0
- package/dist/compiler/parseExpression.js +273 -0
- package/dist/compiler/parseExpression.js.map +1 -0
- package/dist/compiler/parseSfc.d.ts +2 -0
- package/dist/compiler/parseSfc.js +38 -0
- package/dist/compiler/parseSfc.js.map +1 -0
- package/dist/compiler/parseTemplate.d.ts +8 -0
- package/dist/compiler/parseTemplate.js +266 -0
- package/dist/compiler/parseTemplate.js.map +1 -0
- package/dist/compiler/sourceMap.d.ts +2 -0
- package/dist/compiler/sourceMap.js +66 -0
- package/dist/compiler/sourceMap.js.map +1 -0
- package/dist/compiler/types.d.ts +89 -0
- package/dist/compiler/types.js +2 -0
- package/dist/compiler/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/dom.d.ts +3 -0
- package/dist/runtime/dom.js +46 -0
- package/dist/runtime/dom.js.map +1 -0
- package/dist/runtime/index.d.ts +6 -0
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/lifecycle.d.ts +10 -0
- package/dist/runtime/lifecycle.js +79 -0
- package/dist/runtime/lifecycle.js.map +1 -0
- package/dist/runtime/reactivity.d.ts +11 -0
- package/dist/runtime/reactivity.js +84 -0
- package/dist/runtime/reactivity.js.map +1 -0
- package/dist/vite.d.ts +7 -0
- package/dist/vite.js +39 -0
- package/dist/vite.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
const effectStack = [];
|
|
2
|
+
let activeEffect;
|
|
3
|
+
export function ref(initialValue) {
|
|
4
|
+
let currentValue = initialValue;
|
|
5
|
+
const dep = new Set();
|
|
6
|
+
return {
|
|
7
|
+
get value() {
|
|
8
|
+
track(dep);
|
|
9
|
+
return currentValue;
|
|
10
|
+
},
|
|
11
|
+
set value(nextValue) {
|
|
12
|
+
if (Object.is(currentValue, nextValue)) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
currentValue = nextValue;
|
|
16
|
+
trigger(dep);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function computed(getter) {
|
|
21
|
+
const result = ref(getter());
|
|
22
|
+
effect(() => {
|
|
23
|
+
result.value = getter();
|
|
24
|
+
});
|
|
25
|
+
return {
|
|
26
|
+
get value() {
|
|
27
|
+
return result.value;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function effect(fn) {
|
|
32
|
+
const reactiveEffect = {
|
|
33
|
+
run: fn,
|
|
34
|
+
deps: new Set(),
|
|
35
|
+
active: true
|
|
36
|
+
};
|
|
37
|
+
runEffect(reactiveEffect);
|
|
38
|
+
return () => {
|
|
39
|
+
reactiveEffect.active = false;
|
|
40
|
+
cleanupEffect(reactiveEffect);
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export function unwrap(value) {
|
|
44
|
+
if (isRefLike(value)) {
|
|
45
|
+
return value.value;
|
|
46
|
+
}
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
function track(dep) {
|
|
50
|
+
if (!activeEffect || !activeEffect.active) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
dep.add(activeEffect);
|
|
54
|
+
activeEffect.deps.add(dep);
|
|
55
|
+
}
|
|
56
|
+
function trigger(dep) {
|
|
57
|
+
for (const reactiveEffect of [...dep]) {
|
|
58
|
+
if (reactiveEffect.active) {
|
|
59
|
+
runEffect(reactiveEffect);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function runEffect(reactiveEffect) {
|
|
64
|
+
cleanupEffect(reactiveEffect);
|
|
65
|
+
effectStack.push(reactiveEffect);
|
|
66
|
+
activeEffect = reactiveEffect;
|
|
67
|
+
try {
|
|
68
|
+
reactiveEffect.run();
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
effectStack.pop();
|
|
72
|
+
activeEffect = effectStack.at(-1);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function cleanupEffect(reactiveEffect) {
|
|
76
|
+
for (const dep of reactiveEffect.deps) {
|
|
77
|
+
dep.delete(reactiveEffect);
|
|
78
|
+
}
|
|
79
|
+
reactiveEffect.deps.clear();
|
|
80
|
+
}
|
|
81
|
+
function isRefLike(value) {
|
|
82
|
+
return typeof value === "object" && value !== null && "value" in value;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=reactivity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactivity.js","sourceRoot":"","sources":["../../src/runtime/reactivity.ts"],"names":[],"mappings":"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"}
|
package/dist/vite.d.ts
ADDED
package/dist/vite.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { compile, MikuruCompileError } from "./compiler/index.js";
|
|
2
|
+
export function mikuru(options = {}) {
|
|
3
|
+
const include = options.include ?? /\.mikuru$/;
|
|
4
|
+
return {
|
|
5
|
+
name: "mikuru",
|
|
6
|
+
transform(source, id) {
|
|
7
|
+
if (!include.test(id)) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
let result;
|
|
11
|
+
try {
|
|
12
|
+
result = compile(source, { filename: id });
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
if (error instanceof MikuruCompileError) {
|
|
16
|
+
this.error({
|
|
17
|
+
message: error.message,
|
|
18
|
+
id,
|
|
19
|
+
loc: {
|
|
20
|
+
line: error.line,
|
|
21
|
+
column: error.column
|
|
22
|
+
},
|
|
23
|
+
frame: error.frame
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
code: options.debug ? `${result.code}\n//# sourceURL=${toGeneratedSourceUrl(id)}\n` : result.code,
|
|
30
|
+
map: result.map
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export default mikuru;
|
|
36
|
+
function toGeneratedSourceUrl(id) {
|
|
37
|
+
return `${id.replace(/\\/g, "/")}?mikuru-generated`;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=vite.js.map
|
package/dist/vite.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAOlE,MAAM,UAAU,MAAM,CAAC,UAA+B,EAAE;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC;IAE/C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,SAAS,CAAC,MAAM,EAAE,EAAE;YAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,MAAkC,CAAC;YAEvC,IAAI,CAAC;gBACH,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;oBACxC,IAAI,CAAC,KAAK,CAAC;wBACT,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,EAAE;wBACF,GAAG,EAAE;4BACH,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,MAAM,EAAE,KAAK,CAAC,MAAM;yBACrB;wBACD,KAAK,EAAE,KAAK,CAAC,KAAK;qBACnB,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,KAAK,CAAC;YACd,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,mBAAmB,oBAAoB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;gBACjG,GAAG,EAAE,MAAM,CAAC,GAAG;aAChB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,eAAe,MAAM,CAAC;AAEtB,SAAS,oBAAoB,CAAC,EAAU;IACtC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,mBAAmB,CAAC;AACtD,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mikuru",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"description": "A compile-first JavaScript framework with Vue-like authoring and Svelte-like generated DOM updates.",
|
|
7
|
+
"homepage": "https://github.com/miyagawayuu/mikuru#readme",
|
|
8
|
+
"bugs": {
|
|
9
|
+
"url": "https://github.com/miyagawayuu/mikuru/issues"
|
|
10
|
+
},
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://github.com/miyagawayuu/mikuru.git"
|
|
14
|
+
},
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"default": "./dist/index.js"
|
|
19
|
+
},
|
|
20
|
+
"./compiler": {
|
|
21
|
+
"types": "./dist/compiler/index.d.ts",
|
|
22
|
+
"default": "./dist/compiler/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./runtime": {
|
|
25
|
+
"types": "./dist/runtime/index.d.ts",
|
|
26
|
+
"default": "./dist/runtime/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./vite": {
|
|
29
|
+
"types": "./dist/vite.d.ts",
|
|
30
|
+
"default": "./dist/vite.js"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"dist",
|
|
35
|
+
"README.md",
|
|
36
|
+
"CHANGELOG.md"
|
|
37
|
+
],
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=22"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"build": "tsc -p tsconfig.build.json",
|
|
43
|
+
"build:basic": "vite build --config examples/basic/vite.config.ts",
|
|
44
|
+
"build:dogfood": "vite build --config examples/dogfood/vite.config.ts",
|
|
45
|
+
"build:realworld": "vite build --config examples/realworld/vite.config.ts",
|
|
46
|
+
"build:mikuru-sample": "vite build --config examples/mikuru-sample/vite.config.ts",
|
|
47
|
+
"build:mikuru-vue-like": "vite build --config examples/mikuru-vue-like/vite.config.ts",
|
|
48
|
+
"ci": "npm run typecheck && npm test && npm run build && npm run build:basic && npm run build:realworld && npm run build:dogfood && npm run test:package && npm run test:pack && npm run test:e2e && npm run test:e2e:dogfood",
|
|
49
|
+
"dev:basic": "vite --config examples/basic/vite.config.ts",
|
|
50
|
+
"dev:dogfood": "vite --config examples/dogfood/vite.config.ts",
|
|
51
|
+
"dev:realworld": "vite --config examples/realworld/vite.config.ts",
|
|
52
|
+
"dev:mikuru-sample": "vite --config examples/mikuru-sample/vite.config.ts",
|
|
53
|
+
"dev:mikuru-vue-like": "vite --config examples/mikuru-vue-like/vite.config.ts",
|
|
54
|
+
"test": "vitest run",
|
|
55
|
+
"test:e2e": "playwright test",
|
|
56
|
+
"test:e2e:dogfood": "playwright test --config playwright.dogfood.config.ts",
|
|
57
|
+
"test:pack": "node tests/npm-pack-smoke.mjs",
|
|
58
|
+
"test:package": "node tests/package-usage.mjs",
|
|
59
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
60
|
+
},
|
|
61
|
+
"keywords": [
|
|
62
|
+
"compiler",
|
|
63
|
+
"framework",
|
|
64
|
+
"sfc",
|
|
65
|
+
"vue",
|
|
66
|
+
"svelte"
|
|
67
|
+
],
|
|
68
|
+
"license": "MIT",
|
|
69
|
+
"devDependencies": {
|
|
70
|
+
"@playwright/test": "^1.59.1",
|
|
71
|
+
"@types/node": "^25.6.0",
|
|
72
|
+
"happy-dom": "^20.9.0",
|
|
73
|
+
"typescript": "^6.0.3",
|
|
74
|
+
"vite": "^8.0.10",
|
|
75
|
+
"vitest": "^4.1.5"
|
|
76
|
+
},
|
|
77
|
+
"dependencies": {
|
|
78
|
+
"acorn": "^8.16.0"
|
|
79
|
+
}
|
|
80
|
+
}
|