feat: auto imports

This commit is contained in:
Ayo 2023-10-29 18:21:43 +01:00
parent 7fbc38b7cd
commit b7f2ac2620
14 changed files with 64 additions and 71 deletions

41
package-lock.json generated
View file

@ -3843,9 +3843,9 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
}, },
"node_modules/web-component-base": { "node_modules/web-component-base": {
"version": "1.9.5", "version": "1.11.0",
"resolved": "https://registry.npmjs.org/web-component-base/-/web-component-base-1.9.5.tgz", "resolved": "https://registry.npmjs.org/web-component-base/-/web-component-base-1.11.0.tgz",
"integrity": "sha512-wIYHFLR0FZUdofVAk26hwngHznUys2dpAYY238v1i2yYeLtO75k59WZmdxUfHf29mh2Gyle3S8A8EoKvZ+nNjA==" "integrity": "sha512-jGmw9XTNTu6fT1tnVX6YebGB38g1bYZuXo9AGXPM6j5Z9BCBFNI1fwe+sQpx/ve/p8kZF9Hkn975Xi9LwTCoGg=="
}, },
"node_modules/webidl-conversions": { "node_modules/webidl-conversions": {
"version": "3.0.1", "version": "3.0.1",
@ -3970,12 +3970,12 @@
}, },
"packages/cli": { "packages/cli": {
"name": "@mcflyjs/cli", "name": "@mcflyjs/cli",
"version": "0.0.15", "version": "0.0.16",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"citty": "^0.1.4", "citty": "^0.1.4",
"consola": "^3.2.3", "consola": "^3.2.3",
"web-component-base": "latest" "web-component-base": "^1.9.5"
}, },
"bin": { "bin": {
"mcfly": "index.js" "mcfly": "index.js"
@ -3983,13 +3983,15 @@
}, },
"packages/config": { "packages/config": {
"name": "@mcflyjs/config", "name": "@mcflyjs/config",
"version": "0.0.9", "version": "0.0.10",
"license": "MIT", "license": "MIT",
"devDependencies": {} "dependencies": {
"web-component-base": "^1.9.5"
}
}, },
"packages/core": { "packages/core": {
"name": "@mcflyjs/core", "name": "@mcflyjs/core",
"version": "0.2.10", "version": "0.2.11",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"esprima": "^4.0.1", "esprima": "^4.0.1",
@ -4031,27 +4033,30 @@
} }
}, },
"templates/basic/node_modules/@mcflyjs/cli": { "templates/basic/node_modules/@mcflyjs/cli": {
"version": "0.0.14", "version": "0.0.16",
"resolved": "https://registry.npmjs.org/@mcflyjs/cli/-/cli-0.0.14.tgz", "resolved": "https://registry.npmjs.org/@mcflyjs/cli/-/cli-0.0.16.tgz",
"integrity": "sha512-pJiob4D4W/8hN1wNiSuDzE9W/j7yTDJucGss5IBtO/7XzTkgpNHU5ThXLExnlnI20GIrmeR3R9A+5vJ7JnMYyA==", "integrity": "sha512-De70ANluAMsAhgEhHSUcbnQky7vqQ2P7qhLM7LltXfOemYz0Lt+UPTYY3K29XnZ5e3O0EVzZTYETGpeo+azkIg==",
"dependencies": { "dependencies": {
"citty": "^0.1.4", "citty": "^0.1.4",
"consola": "^3.2.3", "consola": "^3.2.3",
"web-component-base": "latest" "web-component-base": "^1.9.5"
}, },
"bin": { "bin": {
"mcfly": "index.js" "mcfly": "index.js"
} }
}, },
"templates/basic/node_modules/@mcflyjs/config": { "templates/basic/node_modules/@mcflyjs/config": {
"version": "0.0.9", "version": "0.0.10",
"resolved": "https://registry.npmjs.org/@mcflyjs/config/-/config-0.0.9.tgz", "resolved": "https://registry.npmjs.org/@mcflyjs/config/-/config-0.0.10.tgz",
"integrity": "sha512-T0JGct0dh+b6ka07HdzMckECRXdGoiZDPctolL6tQ3AvaQt9+DvoyvihJTRgNdnkJyzEDeD1fDeU0aO7tiZd6A==" "integrity": "sha512-PIDno3dXE914MjC7I9wLkOHqGeYrO79RUpyGZj+5gEHErsZYXZqBwI7ns4rQ7S3WDBbjmWnUX9Q13ctM0Wun9w==",
"dependencies": {
"web-component-base": "^1.9.5"
}
}, },
"templates/basic/node_modules/@mcflyjs/core": { "templates/basic/node_modules/@mcflyjs/core": {
"version": "0.2.9", "version": "0.2.11",
"resolved": "https://registry.npmjs.org/@mcflyjs/core/-/core-0.2.9.tgz", "resolved": "https://registry.npmjs.org/@mcflyjs/core/-/core-0.2.11.tgz",
"integrity": "sha512-RpbntTIA00SGQCZODJcTbQ8HyNl9/MXlMBujNtGsQzYX4mXrb3V0VlCBy/3VDKO2Hhzbp9Fbh4waAiNHCc/5cg==", "integrity": "sha512-lyCAUfX77liSX6ICAaKsXQg+MiqYAEQJWyn20ij4aoidOTaPj/cXUsrYnWdmSvdb0xccPci3dNTtNU0ml+PmGQ==",
"dependencies": { "dependencies": {
"esprima": "^4.0.1", "esprima": "^4.0.1",
"h3": "^1.8.2", "h3": "^1.8.2",

View file

@ -2,11 +2,7 @@
import { consola } from "consola"; import { consola } from "consola";
import { defineCommand } from "citty"; import { defineCommand } from "citty";
import { appendFileSync, copyFileSync, readFileSync } from "node:fs";
import { createRequire } from "node:module";
import { execSync as exec } from "child_process"; import { execSync as exec } from "child_process";
import { tryCatch } from "../utils/try-catch.mjs";
import path from "node:path";
export default defineCommand({ export default defineCommand({
meta: { meta: {
@ -16,32 +12,16 @@ export default defineCommand({
async run() { async run() {
consola.start("Preparing McFly workspace..."); consola.start("Preparing McFly workspace...");
const require = createRequire(import.meta.url);
const globalsPath = path.dirname(require.resolve("@mcflyjs/cli"));
const steps = [
() => exec("npx nitropack prepare", { stdio: "inherit" }),
() =>
copyFileSync(
`${globalsPath}/globals/mcfly-imports.d.ts`,
".nitro/types/mcfly-imports.d.ts"
),
() => {
const ref = `\n${readFileSync(
`${globalsPath}/globals/mcfly.d.ts`
).toString()}`;
appendFileSync(".nitro/types/nitro.d.ts", ref);
},
].map((fn) => () => tryCatch(fn));
let err; let err;
steps.every((step) => {
err = step(); try {
return !err; exec("npx nitropack prepare", { stdio: "inherit" });
}); } catch (e) {
consola.error(e);
err = e;
}
if (err) { if (err) {
consola.error(err);
consola.fail( consola.fail(
"McFly workspace preparation failed. Please make sure dependencies are installed.\n" "McFly workspace preparation failed. Please make sure dependencies are installed.\n"
); );

View file

@ -1,6 +1,6 @@
{ {
"name": "@mcflyjs/cli", "name": "@mcflyjs/cli",
"version": "0.0.15", "version": "0.0.16",
"description": "McFly CLI tools", "description": "McFly CLI tools",
"type": "module", "type": "module",
"main": "index.js", "main": "index.js",
@ -24,6 +24,6 @@
"dependencies": { "dependencies": {
"citty": "^0.1.4", "citty": "^0.1.4",
"consola": "^3.2.3", "consola": "^3.2.3",
"web-component-base": "latest" "web-component-base": "^1.9.5"
} }
} }

View file

@ -1,9 +0,0 @@
export function tryCatch(fn) {
let error;
try {
fn();
} catch (e) {
error = e;
}
return error;
}

View file

@ -18,5 +18,21 @@ export default function McFly() {
dir: "./src/components", dir: "./src/components",
}, },
], ],
imports: {
presets: [
{
from: "web-component-base/WebComponent",
imports: ["WebComponent"],
},
{
from: "@mcflyjs/core/event-handler",
imports: ["useMcFlyRoute"],
},
{
from: "@mcflyjs/core/define-config",
imports: ["defineMcFlyConfig"],
},
],
},
}; };
} }

View file

@ -1,10 +1,9 @@
{ {
"name": "@mcflyjs/config", "name": "@mcflyjs/config",
"version": "0.0.9", "version": "0.0.10",
"description": "Nitro configuration for McFly apps", "description": "Nitro configuration for McFly apps",
"type": "module", "type": "module",
"main": "index.mjs", "main": "index.mjs",
"devDependencies": {},
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1" "test": "echo \"Error: no test specified\" && exit 1"
}, },
@ -18,5 +17,8 @@
"bugs": { "bugs": {
"url": "https://github.com/ayoayco/McFly/issues" "url": "https://github.com/ayoayco/McFly/issues"
}, },
"homepage": "https://github.com/ayoayco/McFly#readme" "homepage": "https://github.com/ayoayco/McFly#readme",
"dependencies": {
"web-component-base": "^1.9.5"
}
} }

View file

@ -9,6 +9,6 @@
* @param {McFlyConfig} config * @param {McFlyConfig} config
* @returns {function(): McFlyConfig} * @returns {function(): McFlyConfig}
*/ */
export default function defineConfig(config) { export function defineMcFlyConfig(config) {
return () => config; return () => config;
} }

View file

@ -3,7 +3,7 @@ import { ELEMENT_NODE, parse, render, renderSync, walkSync } from "ultrahtml";
import { parseScript } from "esprima"; import { parseScript } from "esprima";
/** /**
* @typedef {import('./define-config.mjs').McFlyConfig} McFlyConfig * @typedef {import('./define-config.js').McFlyConfig} Config
* @typedef {import('unstorage').Storage} Storage * @typedef {import('unstorage').Storage} Storage
* @typedef {import('unstorage').StorageValue} StorageValue * @typedef {import('unstorage').StorageValue} StorageValue
* @typedef {import('ultrahtml').Node} HtmlNode * @typedef {import('ultrahtml').Node} HtmlNode
@ -14,7 +14,7 @@ import { parseScript } from "esprima";
/** /**
* Intercepts all routes and assembles the correct HTML to return * Intercepts all routes and assembles the correct HTML to return
* @param {{ * @param {{
* config: function(): McFlyConfig, * config: function(): Config,
* storage: Storage * storage: Storage
* }} param0 * }} param0
* @returns {EventHandler} * @returns {EventHandler}

2
packages/core/index.js Normal file
View file

@ -0,0 +1,2 @@
export * from "./define-config.js";
export * from "./event-handler.js";

View file

@ -1,8 +1,9 @@
{ {
"name": "@mcflyjs/core", "name": "@mcflyjs/core",
"version": "0.2.10", "version": "0.2.11",
"description": "McFly core package", "description": "McFly core package",
"type": "module", "type": "module",
"main": "index.js",
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1" "test": "echo \"Error: no test specified\" && exit 1"
}, },

View file

@ -1,5 +1,4 @@
import defineConfig from "@mcflyjs/core/define-config.mjs"; import { defineMcFlyConfig } from "#imports";
export default defineMcFlyConfig({
export default defineConfig({
components: "js", components: "js",
}); });

View file

@ -5,6 +5,5 @@
* ...reusable code are in ./src/components * ...reusable code are in ./src/components
* @see https://ayco.io/gh/McFly#special-directories * @see https://ayco.io/gh/McFly#special-directories
*/ */
import { useMcFlyRoute } from "@mcflyjs/core/event-handler.mjs";
import config from "../mcfly.config.mjs"; import config from "../mcfly.config.mjs";
export default useMcFlyRoute({ config, storage: useStorage() }); export default useMcFlyRoute({ config, storage: useStorage() });

View file

@ -1,5 +1,4 @@
import defineConfig from "@mcflyjs/core/define-config.mjs"; import { defineMcFlyConfig } from "#imports";
export default defineMcFlyConfig({
export default defineConfig({
components: "js", components: "js",
}); });

View file

@ -5,6 +5,5 @@
* ...reusable code are in ./src/components * ...reusable code are in ./src/components
* @see https://ayco.io/gh/McFly#special-directories * @see https://ayco.io/gh/McFly#special-directories
*/ */
import { useMcFlyRoute } from "@mcflyjs/core/event-handler.mjs";
import config from "../mcfly.config.mjs"; import config from "../mcfly.config.mjs";
export default useMcFlyRoute({ config, storage: useStorage() }); export default useMcFlyRoute({ config, storage: useStorage() });