create-mikrojs 0.9.0 → 0.10.0-next.7.gdacecb0

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 (119) hide show
  1. package/README.md +2 -28
  2. package/bin/create-mikrojs.js +1 -1
  3. package/package.json +8 -25
  4. package/dist/index.d.ts +0 -2
  5. package/dist/index.d.ts.map +0 -1
  6. package/dist/index.js +0 -114
  7. package/dist/index.js.map +0 -1
  8. package/dist/inspect.d.ts +0 -2
  9. package/dist/inspect.d.ts.map +0 -1
  10. package/dist/inspect.js +0 -55
  11. package/dist/inspect.js.map +0 -1
  12. package/dist/logo.d.ts +0 -2
  13. package/dist/logo.d.ts.map +0 -1
  14. package/dist/logo.js +0 -26
  15. package/dist/logo.js.map +0 -1
  16. package/dist/pkg-manager.d.ts +0 -6
  17. package/dist/pkg-manager.d.ts.map +0 -1
  18. package/dist/pkg-manager.js +0 -26
  19. package/dist/pkg-manager.js.map +0 -1
  20. package/dist/scaffold.d.ts +0 -23
  21. package/dist/scaffold.d.ts.map +0 -1
  22. package/dist/scaffold.js +0 -187
  23. package/dist/scaffold.js.map +0 -1
  24. package/dist/scaffold.test.d.ts +0 -2
  25. package/dist/scaffold.test.d.ts.map +0 -1
  26. package/dist/scaffold.test.js +0 -142
  27. package/dist/scaffold.test.js.map +0 -1
  28. package/dist/templates/_common/dependencies.d.ts +0 -13
  29. package/dist/templates/_common/dependencies.d.ts.map +0 -1
  30. package/dist/templates/_common/dependencies.js +0 -13
  31. package/dist/templates/_common/dependencies.js.map +0 -1
  32. package/dist/templates/_common/editorconfig.d.ts +0 -2
  33. package/dist/templates/_common/editorconfig.d.ts.map +0 -1
  34. package/dist/templates/_common/editorconfig.js +0 -12
  35. package/dist/templates/_common/editorconfig.js.map +0 -1
  36. package/dist/templates/_common/env-example.d.ts +0 -2
  37. package/dist/templates/_common/env-example.d.ts.map +0 -1
  38. package/dist/templates/_common/env-example.js +0 -19
  39. package/dist/templates/_common/env-example.js.map +0 -1
  40. package/dist/templates/_common/eslint-config.d.ts +0 -2
  41. package/dist/templates/_common/eslint-config.d.ts.map +0 -1
  42. package/dist/templates/_common/eslint-config.js +0 -18
  43. package/dist/templates/_common/eslint-config.js.map +0 -1
  44. package/dist/templates/_common/gitignore.d.ts +0 -2
  45. package/dist/templates/_common/gitignore.d.ts.map +0 -1
  46. package/dist/templates/_common/gitignore.js +0 -8
  47. package/dist/templates/_common/gitignore.js.map +0 -1
  48. package/dist/templates/_common/mikro-config.d.ts +0 -2
  49. package/dist/templates/_common/mikro-config.d.ts.map +0 -1
  50. package/dist/templates/_common/mikro-config.js +0 -6
  51. package/dist/templates/_common/mikro-config.js.map +0 -1
  52. package/dist/templates/_common/package-json.d.ts +0 -23
  53. package/dist/templates/_common/package-json.d.ts.map +0 -1
  54. package/dist/templates/_common/package-json.js +0 -21
  55. package/dist/templates/_common/package-json.js.map +0 -1
  56. package/dist/templates/_common/prettier-config.d.ts +0 -2
  57. package/dist/templates/_common/prettier-config.d.ts.map +0 -1
  58. package/dist/templates/_common/prettier-config.js +0 -5
  59. package/dist/templates/_common/prettier-config.js.map +0 -1
  60. package/dist/templates/_common/readme.d.ts +0 -11
  61. package/dist/templates/_common/readme.d.ts.map +0 -1
  62. package/dist/templates/_common/readme.js +0 -41
  63. package/dist/templates/_common/readme.js.map +0 -1
  64. package/dist/templates/_common/tsconfig.d.ts +0 -2
  65. package/dist/templates/_common/tsconfig.d.ts.map +0 -1
  66. package/dist/templates/_common/tsconfig.js +0 -12
  67. package/dist/templates/_common/tsconfig.js.map +0 -1
  68. package/dist/templates/sntp/mikro.config.d.ts +0 -7
  69. package/dist/templates/sntp/mikro.config.d.ts.map +0 -1
  70. package/dist/templates/sntp/mikro.config.js +0 -7
  71. package/dist/templates/sntp/mikro.config.js.map +0 -1
  72. package/dist/templates/udp-discovery/mikro.config.d.ts +0 -7
  73. package/dist/templates/udp-discovery/mikro.config.d.ts.map +0 -1
  74. package/dist/templates/udp-discovery/mikro.config.js +0 -7
  75. package/dist/templates/udp-discovery/mikro.config.js.map +0 -1
  76. package/dist/templates/wifi-access-point/mikro.config.d.ts +0 -7
  77. package/dist/templates/wifi-access-point/mikro.config.d.ts.map +0 -1
  78. package/dist/templates/wifi-access-point/mikro.config.js +0 -7
  79. package/dist/templates/wifi-access-point/mikro.config.js.map +0 -1
  80. package/dist/templates/wifi-fetch/mikro.config.d.ts +0 -7
  81. package/dist/templates/wifi-fetch/mikro.config.d.ts.map +0 -1
  82. package/dist/templates/wifi-fetch/mikro.config.js +0 -7
  83. package/dist/templates/wifi-fetch/mikro.config.js.map +0 -1
  84. package/src/templates/_common/dependencies.ts +0 -16
  85. package/src/templates/_common/editorconfig.ts +0 -11
  86. package/src/templates/_common/env-example.ts +0 -18
  87. package/src/templates/_common/eslint-config.ts +0 -17
  88. package/src/templates/_common/gitignore.ts +0 -7
  89. package/src/templates/_common/mikro-config.ts +0 -5
  90. package/src/templates/_common/package-json.ts +0 -31
  91. package/src/templates/_common/prettier-config.ts +0 -4
  92. package/src/templates/_common/readme.ts +0 -59
  93. package/src/templates/_common/tsconfig.ts +0 -12
  94. package/src/templates/blank/app/main.ts +0 -3
  95. package/src/templates/ble-beacon/app/main.ts +0 -56
  96. package/src/templates/ble-gatt/app/main.ts +0 -101
  97. package/src/templates/blinky/app/main.ts +0 -18
  98. package/src/templates/neopixel/app/color.ts +0 -23
  99. package/src/templates/neopixel/app/main.ts +0 -24
  100. package/src/templates/neopixel/app/patterns/breathe.ts +0 -22
  101. package/src/templates/neopixel/app/patterns/color-wipe.ts +0 -35
  102. package/src/templates/neopixel/app/patterns/comet.ts +0 -29
  103. package/src/templates/neopixel/app/patterns/rainbow.ts +0 -24
  104. package/src/templates/neopixel/app/patterns/sparkle.ts +0 -25
  105. package/src/templates/pwm-led/app/main.ts +0 -21
  106. package/src/templates/rtc-counter/app/main.ts +0 -22
  107. package/src/templates/schema/app/main.ts +0 -54
  108. package/src/templates/sntp/app/main.ts +0 -35
  109. package/src/templates/sntp/env.d.ts +0 -4
  110. package/src/templates/sntp/mikro.config.ts +0 -7
  111. package/src/templates/uart/app/main.ts +0 -34
  112. package/src/templates/udp-discovery/app/main.ts +0 -54
  113. package/src/templates/udp-discovery/env.d.ts +0 -4
  114. package/src/templates/udp-discovery/mikro.config.ts +0 -7
  115. package/src/templates/wifi-access-point/app/main.ts +0 -37
  116. package/src/templates/wifi-access-point/mikro.config.ts +0 -7
  117. package/src/templates/wifi-fetch/app/main.ts +0 -32
  118. package/src/templates/wifi-fetch/env.d.ts +0 -4
  119. package/src/templates/wifi-fetch/mikro.config.ts +0 -7
package/README.md CHANGED
@@ -1,33 +1,7 @@
1
1
  # create-mikrojs
2
2
 
3
- Scaffolding tool for new Mikro.js projects.
3
+ Deprecated alias for [`create-mikro`](../create-mikro). Use `npm create mikro` instead.
4
4
 
5
5
  ```sh
6
- npm create mikrojs my-project
7
- ```
8
-
9
- ## Templates
10
-
11
- | Template | Description |
12
- | ------------------- | --------------------------- |
13
- | `blank` | Empty starter project |
14
- | `blinky` | Blink an LED |
15
- | `pwm-led` | PWM LED fading |
16
- | `neopixel` | RGB LED strip |
17
- | `wifi-fetch` | WiFi + HTTP request |
18
- | `wifi-access-point` | WiFi hotspot |
19
- | `sntp` | NTP time sync |
20
- | `rtc-counter` | RTC counter with deep sleep |
21
-
22
- ## Usage
23
-
24
- ```sh
25
- # Interactive (prompts for template)
26
- npm create mikrojs my-project
27
-
28
- # With template
29
- npm create mikrojs -- my-project --template blinky
30
-
31
- # With pnpm
32
- pnpm create mikrojs my-project --template blinky
6
+ npm create mikro my-project --template blinky
33
7
  ```
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import '../dist/index.js'
2
+ import 'create-mikro'
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "create-mikrojs",
3
- "version": "0.9.0",
4
- "description": "Create a new Mikro.js project",
3
+ "version": "0.10.0-next.7.gdacecb0",
4
+ "description": "Create a new Mikro.js project (alias for create-mikro)",
5
5
  "keywords": [
6
6
  "esp32",
7
7
  "javascript",
@@ -10,51 +10,34 @@
10
10
  "quickjs",
11
11
  "typescript"
12
12
  ],
13
- "homepage": "https://github.com/mikrojs/mikrojs#readme",
13
+ "homepage": "https://github.com/mikrojs/mikro#readme",
14
14
  "bugs": {
15
- "url": "https://github.com/mikrojs/mikrojs/issues"
15
+ "url": "https://github.com/mikrojs/mikro/issues"
16
16
  },
17
17
  "license": "MIT",
18
18
  "author": "Bjørge Næss <bjoerge@gmail.com>",
19
19
  "repository": {
20
20
  "type": "git",
21
- "url": "git+https://github.com/mikrojs/mikrojs.git"
21
+ "url": "git+https://github.com/mikrojs/mikro.git"
22
22
  },
23
23
  "bin": {
24
24
  "create-mikrojs": "bin/create-mikrojs.js"
25
25
  },
26
26
  "files": [
27
- "dist",
28
- "src/templates",
29
27
  "bin"
30
28
  ],
31
29
  "type": "module",
32
30
  "sideEffects": false,
33
31
  "exports": {
34
- ".": "./dist/index.js"
32
+ "./package.json": "./package.json"
35
33
  },
36
34
  "dependencies": {
37
- "@clack/prompts": "^1.2.0",
38
- "@optique/core": "^1.0.2",
39
- "@optique/run": "^1.0.2",
40
- "type-fest": "^5.6.0"
41
- },
42
- "devDependencies": {
43
- "@types/node": "^24.12.2",
44
- "eslint": "^10.2.1",
45
- "prettier": "^3.4.0",
46
- "typescript": "^6.0.3",
47
- "typescript-eslint": "^8.59.0",
48
- "@mikrojs/eslint-plugin": "0.9.0"
35
+ "create-mikro": "0.10.0-next.7.gdacecb0"
49
36
  },
50
37
  "engines": {
51
38
  "node": ">=24.0.0"
52
39
  },
53
40
  "scripts": {
54
- "build:ts": "tsc -p tsconfig.build.json",
55
- "inspect": "tsx src/inspect.ts",
56
- "publint": "publint",
57
- "test": "vitest run",
58
- "typecheck": "tsc --noEmit"
41
+ "publint": "publint"
59
42
  }
60
43
  }
package/dist/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js DELETED
@@ -1,114 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { fileURLToPath } from 'node:url';
4
- import * as p from '@clack/prompts';
5
- import { message, object, optional } from '@optique/core';
6
- import { argument, option } from '@optique/core/primitives';
7
- import { defineProgram } from '@optique/core/program';
8
- import { string } from '@optique/core/valueparser';
9
- import { run } from '@optique/run';
10
- import { printLogo } from './logo.js';
11
- import { detectPkgManager, installCommand, mikroCommand } from './pkg-manager.js';
12
- import { scaffold, TEMPLATES } from './scaffold.js';
13
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
14
- const templatesDir = path.resolve(__dirname, '..', 'src', 'templates');
15
- const pkg = JSON.parse(fs.readFileSync(path.resolve(__dirname, '..', 'package.json'), 'utf-8'));
16
- const args = object({
17
- name: optional(argument(string({ metavar: 'NAME' }))),
18
- template: optional(option('-t', '--template', string({ metavar: 'TEMPLATE' }), {
19
- description: message `Template to use`,
20
- })),
21
- });
22
- const prog = defineProgram({
23
- parser: args,
24
- metadata: {
25
- name: 'create-mikrojs',
26
- version: pkg.version,
27
- author: message `Bjørge Næss <bjoerge@gmail.com>`,
28
- bugs: message `https://github.com/mikrojs/mikrojs/issues`,
29
- },
30
- });
31
- async function main(config) {
32
- const templateNames = TEMPLATES.map((t) => t.name);
33
- printLogo();
34
- p.intro(`Create a new Mikro.js project (v${pkg.version})`);
35
- const projectName = config.name ||
36
- (await p.text({
37
- message: 'Project name',
38
- placeholder: 'my-mikrojs-project',
39
- defaultValue: 'my-mikrojs-project',
40
- validate: (value = '') => {
41
- if (!value.trim())
42
- return 'Project name is required';
43
- if (/[^a-zA-Z0-9._-]/.test(value))
44
- return 'Project name contains invalid characters';
45
- },
46
- }));
47
- if (p.isCancel(projectName)) {
48
- p.cancel('Cancelled.');
49
- process.exit(0);
50
- }
51
- if (config.template && !templateNames.includes(config.template)) {
52
- p.cancel(`Unknown template "${config.template}". Available templates: ${templateNames.join(', ')}`);
53
- process.exit(1);
54
- }
55
- const template = config.template ||
56
- (await p.select({
57
- message: 'Select a template',
58
- options: TEMPLATES.map((t) => ({
59
- label: t.name,
60
- hint: t.description,
61
- value: t.name,
62
- })),
63
- }));
64
- if (p.isCancel(template)) {
65
- p.cancel('Cancelled.');
66
- process.exit(0);
67
- }
68
- const targetDir = path.resolve(process.cwd(), projectName);
69
- const isCwd = targetDir === process.cwd();
70
- const pkgName = isCwd ? path.basename(targetDir) : projectName;
71
- if (isCwd) {
72
- if (fs.existsSync(path.join(targetDir, 'package.json'))) {
73
- p.cancel('Current directory already contains a package.json.');
74
- process.exit(1);
75
- }
76
- }
77
- else if (fs.existsSync(targetDir) && fs.readdirSync(targetDir).length > 0) {
78
- p.cancel(`Directory "${projectName}" already exists and is not empty.`);
79
- process.exit(1);
80
- }
81
- const pm = detectPkgManager();
82
- scaffold({
83
- targetDir,
84
- template,
85
- projectName: pkgName,
86
- mikrojsVersion: pkg.version,
87
- templatesDir,
88
- pkgManager: pm,
89
- });
90
- const templateMeta = TEMPLATES.find((t) => t.name === template);
91
- const steps = [];
92
- if (!isCwd)
93
- steps.push(`cd ${projectName}`);
94
- steps.push(installCommand(pm));
95
- steps.push('# connect your ESP32 via USB');
96
- steps.push(mikroCommand(pm, 'flash'));
97
- if (templateMeta?.wifiSetup) {
98
- steps.push('# set WIFI_SSID and WIFI_PASSPHRASE — see README.md');
99
- }
100
- steps.push(mikroCommand(pm, 'dev'));
101
- p.note(steps.join('\n'), 'Next steps');
102
- p.outro(isCwd ? 'Project created in current directory.' : `Project created in ${projectName}/`);
103
- }
104
- const config = run(prog, {
105
- help: 'both',
106
- version: 'both',
107
- args: process.argv.slice(2),
108
- });
109
- main(config).catch((error) => {
110
- // eslint-disable-next-line no-console
111
- console.error(error);
112
- process.exit(1);
113
- });
114
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/inspect.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=inspect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":""}
package/dist/inspect.js DELETED
@@ -1,55 +0,0 @@
1
- /* eslint-disable no-console */
2
- import { execSync } from 'node:child_process';
3
- import { mkdirSync, mkdtempSync, readdirSync, symlinkSync } from 'node:fs';
4
- import { tmpdir } from 'node:os';
5
- import path from 'node:path';
6
- import { scaffold, TEMPLATES } from './scaffold.js';
7
- const tempDir = mkdtempSync(path.join(tmpdir(), 'create-mikrojs-inspect-'));
8
- const templateNames = TEMPLATES.map((t) => t.name);
9
- const templatesDir = path.join(import.meta.dirname, 'templates');
10
- // Parse args
11
- const args = process.argv.slice(2).filter((a) => a !== '--');
12
- let template;
13
- for (let i = 0; i < args.length; i++) {
14
- if ((args[i] === '-t' || args[i] === '--template') && args[i + 1]) {
15
- template = args[++i];
16
- }
17
- }
18
- if (!template || !templateNames.includes(template)) {
19
- console.error(`Usage: pnpm inspect -- -t <template>`);
20
- console.error(`Templates: ${templateNames.join(', ')}`);
21
- process.exit(1);
22
- }
23
- const projectDir = path.join(tempDir, 'my-project');
24
- scaffold({
25
- targetDir: projectDir,
26
- template,
27
- projectName: 'my-project',
28
- mikrojsVersion: '0.0.0',
29
- templatesDir,
30
- pkgManager: 'npm',
31
- });
32
- // Symlink workspace mikrojs package so the CLI is available
33
- const mikrojsPkgDir = path.resolve(import.meta.dirname, '..', '..', 'mikrojs');
34
- const nodeModules = path.join(projectDir, 'node_modules');
35
- const binDir = path.join(nodeModules, '.bin');
36
- mkdirSync(binDir, { recursive: true });
37
- symlinkSync(mikrojsPkgDir, path.join(nodeModules, 'mikrojs'));
38
- symlinkSync(path.join(mikrojsPkgDir, 'bin', 'mikrojs.js'), path.join(binDir, 'mikro'));
39
- symlinkSync(path.join(mikrojsPkgDir, 'bin', 'mikrojs.js'), path.join(binDir, 'mikrojs'));
40
- console.log(`\nScaffolded "${template}" into ${projectDir}`);
41
- // List files (skip node_modules)
42
- const files = readdirSync(projectDir, { recursive: true, withFileTypes: false }).filter((f) => !f.startsWith('node_modules'));
43
- for (const f of files) {
44
- console.log(` ${f}`);
45
- }
46
- console.log(`\nDropping you into ${projectDir}`);
47
- console.log(`Exit the shell to clean up.\n`);
48
- try {
49
- execSync(`${process.env.SHELL || 'bash'}`, { stdio: 'inherit', cwd: projectDir });
50
- }
51
- finally {
52
- execSync(`rm -rf ${tempDir}`);
53
- console.log(`Cleaned up ${tempDir}`);
54
- }
55
- //# sourceMappingURL=inspect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"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"}
package/dist/logo.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare function printLogo(): void;
2
- //# sourceMappingURL=logo.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logo.d.ts","sourceRoot":"","sources":["../src/logo.ts"],"names":[],"mappings":"AAiBA,wBAAgB,SAAS,SASxB"}
package/dist/logo.js DELETED
@@ -1,26 +0,0 @@
1
- const d = '\x1b[2m';
2
- const y = '\x1b[43m\x1b[30m';
3
- const b = '\x1b[1m';
4
- const r = '\x1b[0m';
5
- // prettier-ignore
6
- const logo = [
7
- ` ${d}╷ ╷ ╷ ╷ ╷${r}`,
8
- ` ${d}╭─┴─┴─┴─┴─┴─╮${r}`,
9
- ` ${d}──┤${r} ◦ ${d}├──${r}`,
10
- ` ${d}──┤${r} ${y} ${r} ${d} ├──${r}`,
11
- ` ${d}──┤${r} ${y} ${b}JS${r}${y} ${r} ${d} ├──${r}`,
12
- ` ${d}──┤${r} ${d}├──${r}`,
13
- ` ${d}╰─┬─┬─┬─┬─┬─╯${r}`,
14
- ` ${d}╵ ╵ ╵ ╵ ╵${r}`,
15
- ];
16
- export function printLogo() {
17
- // eslint-disable-next-line no-console
18
- console.log();
19
- for (const line of logo) {
20
- // eslint-disable-next-line no-console
21
- console.log(line);
22
- }
23
- // eslint-disable-next-line no-console
24
- console.log();
25
- }
26
- //# sourceMappingURL=logo.js.map
package/dist/logo.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"logo.js","sourceRoot":"","sources":["../src/logo.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,GAAG,SAAS,CAAA;AACnB,MAAM,CAAC,GAAG,kBAAkB,CAAA;AAC5B,MAAM,CAAC,GAAG,SAAS,CAAA;AACnB,MAAM,CAAC,GAAG,SAAS,CAAA;AAEnB,kBAAkB;AAClB,MAAM,IAAI,GAAG;IACX,SAAS,CAAC,YAAY,CAAC,EAAE;IACzB,OAAO,CAAC,gBAAgB,CAAC,EAAE;IAC3B,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;IACrC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;IAC7C,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;IACzD,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;IACrC,OAAO,CAAC,gBAAgB,CAAC,EAAE;IAC3B,SAAS,CAAC,YAAY,CAAC,EAAE;CAC1B,CAAA;AAED,MAAM,UAAU,SAAS;IACvB,sCAAsC;IACtC,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC;IACD,sCAAsC;IACtC,OAAO,CAAC,GAAG,EAAE,CAAA;AACf,CAAC"}
@@ -1,6 +0,0 @@
1
- export type PkgManager = 'npm' | 'pnpm' | 'yarn' | 'bun';
2
- export declare function detectPkgManager(): PkgManager;
3
- export declare function installCommand(pm: PkgManager): string;
4
- export declare function runCommand(pm: PkgManager, script: string): string;
5
- export declare function mikroCommand(pm: PkgManager, cmd: string): string;
6
- //# sourceMappingURL=pkg-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pkg-manager.d.ts","sourceRoot":"","sources":["../src/pkg-manager.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;AAExD,wBAAgB,gBAAgB,IAAI,UAAU,CAM7C;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,UAAU,GAAG,MAAM,CAErD;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhE"}
@@ -1,26 +0,0 @@
1
- export function detectPkgManager() {
2
- const userAgent = process.env.npm_config_user_agent;
3
- if (userAgent?.startsWith('pnpm/'))
4
- return 'pnpm';
5
- if (userAgent?.startsWith('yarn/'))
6
- return 'yarn';
7
- if (userAgent?.startsWith('bun/'))
8
- return 'bun';
9
- return 'npm';
10
- }
11
- export function installCommand(pm) {
12
- return `${pm} install`;
13
- }
14
- export function runCommand(pm, script) {
15
- if (pm === 'npm' || pm === 'bun')
16
- return `${pm} run ${script}`;
17
- return `${pm} ${script}`;
18
- }
19
- export function mikroCommand(pm, cmd) {
20
- if (pm === 'npm')
21
- return `npx mikro ${cmd}`;
22
- if (pm === 'bun')
23
- return `bunx mikro ${cmd}`;
24
- return `${pm} mikro ${cmd}`;
25
- }
26
- //# sourceMappingURL=pkg-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pkg-manager.js","sourceRoot":"","sources":["../src/pkg-manager.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB;IAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAA;IACnD,IAAI,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAA;IACjD,IAAI,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAA;IACjD,IAAI,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAA;IAC/C,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAc;IAC3C,OAAO,GAAG,EAAE,UAAU,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAc,EAAE,MAAc;IACvD,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,GAAG,EAAE,QAAQ,MAAM,EAAE,CAAA;IAC9D,OAAO,GAAG,EAAE,IAAI,MAAM,EAAE,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAc,EAAE,GAAW;IACtD,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,aAAa,GAAG,EAAE,CAAA;IAC3C,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,cAAc,GAAG,EAAE,CAAA;IAC5C,OAAO,GAAG,EAAE,UAAU,GAAG,EAAE,CAAA;AAC7B,CAAC"}
@@ -1,23 +0,0 @@
1
- import { type PkgManager } from './pkg-manager.js';
2
- interface TemplateMeta {
3
- name: string;
4
- description: string;
5
- hardware?: string;
6
- wiring?: string;
7
- /** true = generate WiFi credentials setup section */
8
- wifiSetup?: boolean;
9
- /** Env vars consumed by this template — listed in .env.example and .env */
10
- envVars?: readonly string[];
11
- }
12
- export declare const TEMPLATES: readonly TemplateMeta[];
13
- export interface ScaffoldOptions {
14
- targetDir: string;
15
- template: string;
16
- projectName: string;
17
- mikrojsVersion: string;
18
- templatesDir: string;
19
- pkgManager: PkgManager;
20
- }
21
- export declare function scaffold(options: ScaffoldOptions): void;
22
- export {};
23
- //# sourceMappingURL=scaffold.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAgB9D,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qDAAqD;IACrD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC5B;AAED,eAAO,MAAM,SAAS,EAAE,SAAS,YAAY,EA4HnC,CAAA;AAEV,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,UAAU,CAAA;CACvB;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,eAAe,QA6DhD"}
package/dist/scaffold.js DELETED
@@ -1,187 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { mikroCommand } from './pkg-manager.js';
4
- import { dependencies, devDependencies, eslintDevDependencies, } from './templates/_common/dependencies.js';
5
- import { editorconfig } from './templates/_common/editorconfig.js';
6
- import { envExample } from './templates/_common/env-example.js';
7
- import { eslintConfig } from './templates/_common/eslint-config.js';
8
- import { gitignore } from './templates/_common/gitignore.js';
9
- import { mikroConfig } from './templates/_common/mikro-config.js';
10
- import { packageJson } from './templates/_common/package-json.js';
11
- import { prettierConfig } from './templates/_common/prettier-config.js';
12
- import { readme } from './templates/_common/readme.js';
13
- import { tsconfigJson } from './templates/_common/tsconfig.js';
14
- export const TEMPLATES = [
15
- {
16
- name: 'blank',
17
- description: 'Empty starter project. Prints heap memory usage and exits.',
18
- },
19
- {
20
- name: 'blinky',
21
- description: 'Blink an LED on and off. The "hello world" of microcontrollers.',
22
- hardware: 'Any ESP32 board with a built-in LED, or an external LED connected to a GPIO pin.\n\nChange `PIN` in `app/main.ts` to match your board.',
23
- wiring: `\`\`\`
24
- ESP32 LED
25
- ┌──────┐
26
- │ GPIO ├───[330Ω]───►|── GND
27
- │ 20 │ (anode) (cathode)
28
- └──────┘
29
- \`\`\`
30
-
31
- Connect the LED's longer leg (anode) to GPIO 20 through a 330-ohm resistor. Connect the shorter leg (cathode) to GND.`,
32
- },
33
- {
34
- name: 'pwm-led',
35
- description: 'Fade an LED in and out using PWM.',
36
- hardware: 'LED + resistor on GPIO 21. Change `LED_PIN` in `app/main.ts` for your board.',
37
- wiring: `\`\`\`
38
- ESP32 LED
39
- ┌──────┐
40
- │ GPIO ├───[330Ω]───►|── GND
41
- │ 21 │ (anode) (cathode)
42
- └──────┘
43
- \`\`\``,
44
- },
45
- {
46
- name: 'neopixel',
47
- description: 'Animated NeoPixel/WS2812B LED patterns: rainbow, comet, breathe, sparkle, color wipe.',
48
- hardware: [
49
- 'Any ESP32 board + a NeoPixel-compatible LED strip (WS2812 or SK6812).',
50
- '',
51
- 'Configured for 24 LEDs on GPIO 8 at full brightness.',
52
- 'Edit `PIN`, `NUM_LEDS`, `BRIGHTNESS` in `app/main.ts`.',
53
- ].join('\n'),
54
- wiring: `\`\`\`
55
- ESP32 NeoPixel Strip
56
- ┌──────┐ ┌──────────┐
57
- │ GPIO ├───────────┤ DIN │
58
- │ 8 │ │ │
59
- │ 5V ├───────────┤ 5V │
60
- │ GND ├───────────┤ GND │
61
- └──────┘ └──────────┘
62
- \`\`\`
63
-
64
- For long strips (>8 LEDs), power the strip from an external 5V supply, not the board's USB.`,
65
- },
66
- {
67
- name: 'wifi-fetch',
68
- description: 'Connect to WiFi and fetch JSON from an HTTP API.',
69
- hardware: 'Any ESP32 board with WiFi + a WiFi network with internet access.',
70
- wifiSetup: true,
71
- envVars: ['WIFI_SSID', 'WIFI_PASSPHRASE'],
72
- },
73
- {
74
- name: 'wifi-access-point',
75
- description: 'Turn the ESP32 into a WiFi access point. Logs station connect/disconnect events.',
76
- hardware: 'Any ESP32 board with WiFi.',
77
- },
78
- {
79
- name: 'sntp',
80
- description: 'Sync the device clock via NTP so `new Date()` returns real wall-clock time.',
81
- hardware: 'Any ESP32 board with WiFi + a WiFi network with internet access.',
82
- wifiSetup: true,
83
- envVars: ['WIFI_SSID', 'WIFI_PASSPHRASE'],
84
- },
85
- {
86
- name: 'rtc-counter',
87
- description: 'Count wake-ups from deep sleep using RTC memory. The counter survives deep sleep but resets on power loss.',
88
- hardware: 'Any ESP32 board.',
89
- },
90
- {
91
- name: 'schema',
92
- description: 'Define and validate runtime data shapes with `mikrojs/schema`, including tagged unions.',
93
- hardware: 'Any ESP32 board.',
94
- },
95
- {
96
- name: 'uart',
97
- description: 'Send and receive bytes over UART using a loopback wire.',
98
- hardware: 'Any ESP32 board with at least two free GPIO pins.\n\nChange `TX_PIN` and `RX_PIN` in `app/main.ts` to match your board.',
99
- wiring: `\`\`\`
100
- ESP32C6
101
- ┌──────┐
102
- │ GPIO ├──┐
103
- │ 16 │ │ jumper wire
104
- │ GPIO ├──┘
105
- │ 17 │
106
- └──────┘
107
- \`\`\`
108
-
109
- Connect GPIO 16 (RX) to GPIO 17 (TX) with a jumper wire so the example can read back its own writes.`,
110
- },
111
- {
112
- name: 'udp-discovery',
113
- description: 'Devices on the same LAN find each other via UDP multicast announcements every couple of seconds.',
114
- hardware: 'Any ESP32 board with WiFi + a WiFi network.',
115
- wifiSetup: true,
116
- envVars: ['WIFI_SSID', 'WIFI_PASSPHRASE'],
117
- },
118
- {
119
- name: 'ble-beacon',
120
- description: 'Broadcast a sensor reading in BLE advertising packets. No connections; just transmit.',
121
- hardware: 'Any ESP32 family board with BLE (ESP32-C3, ESP32-C6, ESP32-S3, original ESP32). ESP32-S2 has no BLE radio.',
122
- },
123
- {
124
- name: 'ble-gatt',
125
- description: 'Connectable GATT peripheral with live notifications and a writable command characteristic.',
126
- hardware: 'Any ESP32 family board with BLE (ESP32-C3, ESP32-C6, ESP32-S3, original ESP32). ESP32-S2 has no BLE radio.',
127
- },
128
- ];
129
- export function scaffold(options) {
130
- const { targetDir, template, projectName, mikrojsVersion, templatesDir, pkgManager } = options;
131
- // Create project directory
132
- fs.mkdirSync(targetDir, { recursive: true });
133
- // Copy template files
134
- const templateDir = path.join(templatesDir, template);
135
- copyDir(templateDir, targetDir);
136
- // Write shared files
137
- fs.writeFileSync(path.join(targetDir, 'package.json'), JSON.stringify(packageJson(projectName, {
138
- dependencies: { ...dependencies, mikrojs: `^${mikrojsVersion}` },
139
- devDependencies: {
140
- ...devDependencies,
141
- ...eslintDevDependencies,
142
- '@mikrojs/eslint-plugin': `^${mikrojsVersion}`,
143
- },
144
- }), null, 2) + '\n');
145
- const hasEnvDts = fs.existsSync(path.join(targetDir, 'env.d.ts'));
146
- fs.writeFileSync(path.join(targetDir, 'tsconfig.json'), tsconfigJson(hasEnvDts ? ['env.d.ts'] : []));
147
- fs.writeFileSync(path.join(targetDir, 'eslint.config.js'), eslintConfig);
148
- fs.writeFileSync(path.join(targetDir, '.prettierrc.json'), prettierConfig);
149
- // Write a default mikro.config.ts unless the template ships its own.
150
- const mikroConfigPath = path.join(targetDir, 'mikro.config.ts');
151
- if (!fs.existsSync(mikroConfigPath)) {
152
- fs.writeFileSync(mikroConfigPath, mikroConfig);
153
- }
154
- fs.writeFileSync(path.join(targetDir, '.editorconfig'), editorconfig);
155
- fs.writeFileSync(path.join(targetDir, '.gitignore'), gitignore);
156
- const templateMeta = TEMPLATES.find((t) => t.name === template);
157
- const envFileContent = envExample(templateMeta?.envVars);
158
- fs.writeFileSync(path.join(targetDir, '.env.example'), envFileContent);
159
- // Also scaffold a .env (gitignored) so users can fill values in
160
- // directly without copying from .env.example.
161
- fs.writeFileSync(path.join(targetDir, '.env'), envFileContent);
162
- const setup = templateMeta?.wifiSetup
163
- ? `Set your WiFi credentials on the device:\n\n\`\`\`sh\n${mikroCommand(pkgManager, 'env set WIFI_SSID YourNetworkName --no-secret')}\n${mikroCommand(pkgManager, 'env set WIFI_PASSPHRASE')}\n\`\`\``
164
- : undefined;
165
- fs.writeFileSync(path.join(targetDir, 'README.md'), readme({
166
- projectName,
167
- description: templateMeta?.description ?? '',
168
- pm: pkgManager,
169
- hardware: templateMeta?.hardware,
170
- wiring: templateMeta?.wiring,
171
- setup,
172
- }));
173
- }
174
- function copyDir(src, dest) {
175
- fs.mkdirSync(dest, { recursive: true });
176
- for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
177
- const srcPath = path.join(src, entry.name);
178
- const destPath = path.join(dest, entry.name);
179
- if (entry.isDirectory()) {
180
- copyDir(srcPath, destPath);
181
- }
182
- else {
183
- fs.copyFileSync(srcPath, destPath);
184
- }
185
- }
186
- }
187
- //# sourceMappingURL=scaffold.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=scaffold.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scaffold.test.d.ts","sourceRoot":"","sources":["../src/scaffold.test.ts"],"names":[],"mappings":""}