mikuru 1.0.3 → 1.0.5

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 CHANGED
@@ -1,30 +1,42 @@
1
- # Changelog
2
-
3
- ## 1.0.3
4
-
5
- - Added `mikuru/env` for package-provided `.mikuru` TypeScript declarations.
6
-
7
- ## 1.0.2
8
-
9
- - Reworked the README for npm package consumers with CLI-first setup, Vite integration, package exports, TypeScript declarations, and v1 limits.
10
- - Updated npm usage docs and release documentation to match the published package contents.
11
- - Updated the starter template to depend on `mikuru@^1.0.2`.
12
-
13
- ## 1.0.1
14
-
15
- - Added the `mikuru` CLI with `mikuru create [project-name]`.
16
- - Added a Vite starter template that shows a Mikuru welcome screen and counter after setup.
17
- - Added create CLI smoke coverage and included it in CI.
18
-
19
- ## 1.0.0
20
-
21
- - Stabilized the v1 SFC compiler surface for `.mikuru` files.
22
- - Added Vite integration, generated DOM cleanup, component props/events/slots, `defineProps`, and `defineEmits`.
23
- - Added `v-if` / `v-else-if` / `v-else`, `v-show`, `v-for`, `v-model`, DOM event modifiers, style injection, and basic scoped CSS support.
24
- - Added CI, library build checks, basic example build checks, and browser E2E coverage.
25
- - Added a realworld example, public package smoke test, parser-limit coverage, debug sourceURL support, and performance smoke coverage.
26
- - Added v3 source maps, keyed `v-for` reuse, npm pack smoke coverage, and a v1 API contract.
27
- - Added a dogfood notes app written in Mikuru to exercise daily authoring flows.
28
- - Added generated DOM coverage for keyed insert/remove/reorder behavior, component cleanup, and slot cleanup.
29
- - Added explicit unsupported-syntax errors with source frames, Vite error forwarding coverage, and debug `sourceURL` path normalization coverage.
30
- - Documented runtime helpers including `nextTick`, `watch`, lifecycle callbacks, `provide`, and `inject`.
1
+ # Changelog
2
+
3
+ ## 1.0.5
4
+
5
+ - Added a `basic` project template for `mikuru create --template basic`.
6
+ - Added `mikuru create --force` and `--yes` support.
7
+ - Added generated starter and basic template build smoke coverage for packed packages.
8
+ - Added generic `MikuruComponent<Props>` and `MikuruMount<Props>` types.
9
+
10
+ ## 1.0.4
11
+
12
+ - Added a starter favicon to projects created with `mikuru create`.
13
+ - Added CLI `--version`, create help, `--template starter`, and clearer create errors.
14
+
15
+ ## 1.0.3
16
+
17
+ - Added `mikuru/env` for package-provided `.mikuru` TypeScript declarations.
18
+
19
+ ## 1.0.2
20
+
21
+ - Reworked the README for npm package consumers with CLI-first setup, Vite integration, package exports, TypeScript declarations, and v1 limits.
22
+ - Updated npm usage docs and release documentation to match the published package contents.
23
+ - Updated the starter template to depend on `mikuru@^1.0.2`.
24
+
25
+ ## 1.0.1
26
+
27
+ - Added the `mikuru` CLI with `mikuru create [project-name]`.
28
+ - Added a Vite starter template that shows a Mikuru welcome screen and counter after setup.
29
+ - Added create CLI smoke coverage and included it in CI.
30
+
31
+ ## 1.0.0
32
+
33
+ - Stabilized the v1 SFC compiler surface for `.mikuru` files.
34
+ - Added Vite integration, generated DOM cleanup, component props/events/slots, `defineProps`, and `defineEmits`.
35
+ - Added `v-if` / `v-else-if` / `v-else`, `v-show`, `v-for`, `v-model`, DOM event modifiers, style injection, and basic scoped CSS support.
36
+ - Added CI, library build checks, basic example build checks, and browser E2E coverage.
37
+ - Added a realworld example, public package smoke test, parser-limit coverage, debug sourceURL support, and performance smoke coverage.
38
+ - Added v3 source maps, keyed `v-for` reuse, npm pack smoke coverage, and a v1 API contract.
39
+ - Added a dogfood notes app written in Mikuru to exercise daily authoring flows.
40
+ - Added generated DOM coverage for keyed insert/remove/reorder behavior, component cleanup, and slot cleanup.
41
+ - Added explicit unsupported-syntax errors with source frames, Vite error forwarding coverage, and debug `sourceURL` path normalization coverage.
42
+ - Documented runtime helpers including `nextTick`, `watch`, lifecycle callbacks, `provide`, and `inject`.
package/README.md CHANGED
@@ -22,6 +22,14 @@ npm run dev
22
22
 
23
23
  The generated starter includes Vite, TypeScript, the package-provided `.mikuru` module declaration, and a welcome component at `src/App.mikuru`.
24
24
 
25
+ Use the `basic` template when you want a small component composition example:
26
+
27
+ ```sh
28
+ npx mikuru create my-basic-app --template basic
29
+ ```
30
+
31
+ `mikuru create` also accepts `--force` for non-empty directories and `--yes` / `-y` to use default answers for prompts.
32
+
25
33
  ## Add Mikuru to a Vite App
26
34
 
27
35
  Install Mikuru and the Vite tooling:
@@ -88,6 +96,18 @@ For TypeScript projects, add a local declaration file such as `src/mikuru-env.d.
88
96
  import "mikuru/env";
89
97
  ```
90
98
 
99
+ You can use the exported component types for typed wrappers or hand-written integrations:
100
+
101
+ ```ts
102
+ import type { MikuruComponent } from "mikuru/env";
103
+
104
+ type GreetingProps = {
105
+ name: string;
106
+ };
107
+
108
+ declare const Greeting: MikuruComponent<GreetingProps>;
109
+ ```
110
+
91
111
  ## Supported v1 Surface
92
112
 
93
113
  - `.mikuru` SFCs with `<template>`, `<script>`, and `<style>`
@@ -133,6 +153,7 @@ The package also provides the `mikuru` binary:
133
153
 
134
154
  ```sh
135
155
  npx mikuru create my-app
156
+ npx mikuru create my-basic-app --template basic
136
157
  ```
137
158
 
138
159
  ## Not Included in v1
package/dist/cli.js CHANGED
@@ -2,34 +2,121 @@
2
2
  import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
3
3
  import { basename, dirname, join, resolve } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
- const command = process.argv[2];
6
- const targetArg = process.argv[3];
5
+ const availableTemplates = ["starter", "basic"];
6
+ const args = process.argv.slice(2);
7
+ const command = args[0];
7
8
  if (command === "--help" || command === "-h" || !command) {
8
9
  printHelp();
9
10
  process.exit(0);
10
11
  }
12
+ if (command === "--version" || command === "-v") {
13
+ console.log(readPackageVersion());
14
+ process.exit(0);
15
+ }
11
16
  if (command !== "create") {
12
17
  console.error(`Unknown command: ${command}`);
13
18
  printHelp();
14
19
  process.exit(1);
15
20
  }
21
+ const createOptions = parseCreateArgs(args.slice(1));
22
+ if (!createOptions) {
23
+ process.exit(1);
24
+ }
25
+ const { force, targetArg, templateName } = createOptions;
16
26
  const targetDir = resolve(process.cwd(), targetArg ?? "mikuru-app");
17
27
  const appName = toPackageName(basename(targetDir));
18
- if (existsSync(targetDir) && readdirSync(targetDir).length > 0) {
19
- console.error(`Target directory is not empty: ${targetDir}`);
28
+ if (!force && existsSync(targetDir) && readdirSync(targetDir).length > 0) {
29
+ console.error(`Cannot create a Mikuru app in a non-empty directory: ${targetDir}`);
30
+ console.error("Choose a new directory name, empty the target directory, or pass --force to overwrite template files.");
20
31
  process.exit(1);
21
32
  }
22
- const templateDir = resolve(dirname(fileURLToPath(import.meta.url)), "../templates/starter");
33
+ const templateDir = resolve(dirname(fileURLToPath(import.meta.url)), `../templates/${templateName}`);
23
34
  copyTemplate(templateDir, targetDir, { appName });
24
- console.log(`Created ${appName} in ${targetDir}`);
35
+ console.log(`Created ${appName}`);
36
+ console.log(` Template: ${templateName}`);
37
+ console.log(` Location: ${targetDir}`);
25
38
  console.log("");
26
39
  console.log("Next steps:");
27
40
  console.log(` cd ${basename(targetDir)}`);
28
41
  console.log(" npm install");
29
42
  console.log(" npm run dev");
30
43
  function printHelp() {
31
- console.log("Usage:");
32
- console.log(" mikuru create [project-name]");
44
+ console.log(`Usage:
45
+ mikuru create [project-name] [--template starter|basic]
46
+ mikuru --version
47
+ mikuru --help
48
+
49
+ Commands:
50
+ create Create a new Mikuru app.
51
+
52
+ Options:
53
+ -h, --help Show help.
54
+ -v, --version Show the installed Mikuru version.`);
55
+ }
56
+ function printCreateHelp() {
57
+ console.log(`Usage:
58
+ mikuru create [project-name] [--template starter|basic]
59
+
60
+ Options:
61
+ --template <name> Template to use. Available: ${availableTemplates.join(", ")}.
62
+ --force Create into a non-empty directory and overwrite template files.
63
+ -y, --yes Use default answers for prompts. Currently accepted for future compatibility.
64
+ -h, --help Show create help.`);
65
+ }
66
+ function parseCreateArgs(createArgs) {
67
+ let force = false;
68
+ let targetArg;
69
+ let templateName = "starter";
70
+ let yes = false;
71
+ for (let i = 0; i < createArgs.length; i++) {
72
+ const arg = createArgs[i];
73
+ if (arg === "--help" || arg === "-h") {
74
+ printCreateHelp();
75
+ process.exit(0);
76
+ }
77
+ if (arg === "--force") {
78
+ force = true;
79
+ continue;
80
+ }
81
+ if (arg === "--yes" || arg === "-y") {
82
+ yes = true;
83
+ continue;
84
+ }
85
+ if (arg === "--template") {
86
+ const nextValue = createArgs[++i];
87
+ if (!nextValue) {
88
+ console.error("Missing value for --template.");
89
+ printCreateHelp();
90
+ return undefined;
91
+ }
92
+ templateName = nextValue;
93
+ continue;
94
+ }
95
+ if (arg.startsWith("--template=")) {
96
+ templateName = arg.slice("--template=".length);
97
+ continue;
98
+ }
99
+ if (arg.startsWith("-")) {
100
+ console.error(`Unknown create option: ${arg}`);
101
+ printCreateHelp();
102
+ return undefined;
103
+ }
104
+ if (targetArg) {
105
+ console.error(`Unexpected extra argument: ${arg}`);
106
+ printCreateHelp();
107
+ return undefined;
108
+ }
109
+ targetArg = arg;
110
+ }
111
+ if (!isTemplateName(templateName)) {
112
+ console.error(`Unknown template: ${templateName}`);
113
+ console.error(`Available templates: ${availableTemplates.join(", ")}`);
114
+ return undefined;
115
+ }
116
+ return { force, targetArg, templateName, yes };
117
+ }
118
+ function isTemplateName(value) {
119
+ return availableTemplates.includes(value);
33
120
  }
34
121
  function copyTemplate(sourceDir, targetDir, variables) {
35
122
  mkdirSync(targetDir, { recursive: true });
@@ -51,7 +138,7 @@ function copyTemplate(sourceDir, targetDir, variables) {
51
138
  }
52
139
  }
53
140
  function isTextTemplate(path) {
54
- return /\.(css|html|json|mikuru|ts)$/.test(path) || path.endsWith("_gitignore");
141
+ return /\.(css|html|json|mikuru|svg|ts)$/.test(path) || path.endsWith("_gitignore");
55
142
  }
56
143
  function toPackageName(value) {
57
144
  return value
@@ -60,4 +147,9 @@ function toPackageName(value) {
60
147
  .replace(/[^a-z0-9._-]+/g, "-")
61
148
  .replace(/^-+|-+$/g, "") || "mikuru-app";
62
149
  }
150
+ function readPackageVersion() {
151
+ const packageJsonPath = resolve(dirname(fileURLToPath(import.meta.url)), "../package.json");
152
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
153
+ return packageJson.version ?? "0.0.0";
154
+ }
63
155
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,OAAO,CAAU,CAAC;AAUzD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;IACzD,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IAC7C,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,IAAI,CAAC,aAAa,EAAE,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,aAAa,CAAC;AACzD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,IAAI,YAAY,CAAC,CAAC;AACpE,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AAEnD,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACzE,OAAO,CAAC,KAAK,CAAC,wDAAwD,SAAS,EAAE,CAAC,CAAC;IACnF,OAAO,CAAC,KAAK,CAAC,uGAAuG,CAAC,CAAC;IACvH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,YAAY,EAAE,CAAC,CAAC;AAErG,YAAY,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAElD,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,GAAG,CAAC,eAAe,YAAY,EAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAE7B,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;sDAUwC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CAAC,GAAG,CAAC;;;;qDAIuC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;;;yCAGzC,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,eAAe,CAAC,UAAoB;IAC3C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,SAA6B,CAAC;IAClC,IAAI,YAAY,GAAG,SAAS,CAAC;IAC7B,IAAI,GAAG,GAAG,KAAK,CAAC;IAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAE1B,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACrC,eAAe,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,KAAK,GAAG,IAAI,CAAC;YACb,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACpC,GAAG,GAAG,IAAI,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBAC/C,eAAe,EAAE,CAAC;gBAClB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,YAAY,GAAG,SAAS,CAAC;YACzB,SAAS;QACX,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC/C,SAAS;QACX,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;YAC/C,eAAe,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;YACnD,eAAe,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,SAAS,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAQ,kBAAwC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB,EAAE,SAAiB,EAAE,SAA8B;IACxF,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QAElC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YAChD,SAAS;QACX,CAAC;QAED,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,qBAAqB,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;YACtG,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACnC,SAAS;QACX,CAAC;QAED,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK;SACT,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC;AAC7C,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAC5F,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAyB,CAAC;IAC9F,OAAO,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC;AACxC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mikuru",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "A compile-first JavaScript framework with Vue-like authoring and Svelte-like generated DOM updates.",
@@ -0,0 +1,3 @@
1
+ node_modules
2
+ dist
3
+ *.local
@@ -0,0 +1,13 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" href="/favicon.svg" type="image/svg+xml" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Mikuru Basic</title>
8
+ </head>
9
+ <body>
10
+ <main id="app"></main>
11
+ <script type="module" src="/src/main.ts"></script>
12
+ </body>
13
+ </html>
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "__MIKURU_APP_NAME__",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "preview": "vite preview"
10
+ },
11
+ "dependencies": {
12
+ "mikuru": "^1.0.5"
13
+ },
14
+ "devDependencies": {
15
+ "typescript": "^6.0.3",
16
+ "vite": "^8.0.10"
17
+ }
18
+ }
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="Mikuru">
2
+ <rect width="64" height="64" rx="16" fill="#fff1f7" />
3
+ <path d="M16 46V18h8l8 13 8-13h8v28h-8V31l-8 12-8-12v15z" fill="#ec4899" />
4
+ </svg>
@@ -0,0 +1,37 @@
1
+ <template>
2
+ <section class="app">
3
+ <h1>Mikuru Counter</h1>
4
+ <button @click="increment">count: {{ count }}</button>
5
+ <MoodBadge label="Mood" v-model="mood">
6
+ <span>Current mood is {{ mood }}</span>
7
+ </MoodBadge>
8
+ </section>
9
+ </template>
10
+
11
+ <script>
12
+ import { ref } from "mikuru";
13
+ import MoodBadge from "./MoodBadge.mikuru";
14
+
15
+ const count = ref(0);
16
+ const mood = ref("curious");
17
+
18
+ function increment() {
19
+ count.value += 1;
20
+ mood.value = count.value % 2 === 0 ? "curious" : "building";
21
+ }
22
+ </script>
23
+
24
+ <style scoped>
25
+ .app {
26
+ display: grid;
27
+ gap: 16px;
28
+ max-width: 520px;
29
+ margin: 48px auto;
30
+ font-family: system-ui, sans-serif;
31
+ }
32
+
33
+ button {
34
+ font: inherit;
35
+ width: fit-content;
36
+ }
37
+ </style>
@@ -0,0 +1,26 @@
1
+ <template>
2
+ <article class="badge">
3
+ <strong>{{ label }}</strong>
4
+ <button @click="toggle">{{ modelValue }}</button>
5
+ <slot />
6
+ </article>
7
+ </template>
8
+
9
+ <script>
10
+ const { label, modelValue } = defineProps({ label: String, modelValue: String });
11
+ const emit = defineEmits(["update:modelValue"]);
12
+
13
+ function toggle() {
14
+ emit("update:modelValue", modelValue.value === "curious" ? "building" : "curious");
15
+ }
16
+ </script>
17
+
18
+ <style scoped>
19
+ .badge {
20
+ display: grid;
21
+ gap: 8px;
22
+ padding: 12px;
23
+ border: 1px solid #d7dce2;
24
+ border-radius: 8px;
25
+ }
26
+ </style>
@@ -0,0 +1,9 @@
1
+ import App from "./App.mikuru";
2
+
3
+ const root = document.getElementById("app");
4
+
5
+ if (!root) {
6
+ throw new Error("Missing #app root");
7
+ }
8
+
9
+ App.mount(root);
@@ -0,0 +1 @@
1
+ import "mikuru/env";
@@ -0,0 +1,6 @@
1
+ import { defineConfig } from "vite";
2
+ import { mikuru } from "mikuru/vite";
3
+
4
+ export default defineConfig({
5
+ plugins: [mikuru()]
6
+ });
@@ -2,6 +2,7 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
+ <link rel="icon" href="/favicon.svg" type="image/svg+xml" />
5
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
7
  <title>Mikuru App</title>
7
8
  </head>
@@ -9,7 +9,7 @@
9
9
  "preview": "vite preview"
10
10
  },
11
11
  "dependencies": {
12
- "mikuru": "^1.0.3"
12
+ "mikuru": "^1.0.5"
13
13
  },
14
14
  "devDependencies": {
15
15
  "typescript": "^6.0.3",
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="Mikuru">
2
+ <rect width="64" height="64" rx="16" fill="#fff1f7" />
3
+ <path d="M16 46V18h8l8 13 8-13h8v28h-8V31l-8 12-8-12v15z" fill="#ec4899" />
4
+ </svg>
package/types/env.d.ts CHANGED
@@ -3,19 +3,19 @@ type EnvMikuruComponentInstance = {
3
3
  unmount(): void;
4
4
  };
5
5
 
6
- type EnvMikuruMount = (
6
+ type EnvMikuruMount<Props = Record<string, unknown>> = (
7
7
  target: Element | DocumentFragment,
8
- props?: Record<string, unknown>
8
+ props?: Props
9
9
  ) => EnvMikuruComponentInstance;
10
10
 
11
- type EnvMikuruComponent = {
12
- mount: EnvMikuruMount;
11
+ type EnvMikuruComponent<Props = Record<string, unknown>> = {
12
+ mount: EnvMikuruMount<Props>;
13
13
  };
14
14
 
15
15
  declare module "mikuru/env" {
16
16
  export type MikuruComponentInstance = EnvMikuruComponentInstance;
17
- export type MikuruMount = EnvMikuruMount;
18
- export type MikuruComponent = EnvMikuruComponent;
17
+ export type MikuruMount<Props = Record<string, unknown>> = EnvMikuruMount<Props>;
18
+ export type MikuruComponent<Props = Record<string, unknown>> = EnvMikuruComponent<Props>;
19
19
  }
20
20
 
21
21
  declare module "*.mikuru" {