silgi 0.9.35 → 0.10.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.
@@ -1,8 +1,9 @@
1
- const version = "0.9.35";
1
+ const version = "0.10.1";
2
2
  const peerDependencies = {
3
3
  "@fastify/deepmerge": "^2.0.2",
4
4
  "@nuxt/kit": "^3.15.3",
5
5
  "@nuxt/schema": "^3.15.4",
6
+ "@silgi/ecosystem": "^0.0.10",
6
7
  h3: "^1.14.0",
7
8
  nitropack: "^2.10.4",
8
9
  nuxt: "^3.15.3",
@@ -1,7 +1,15 @@
1
+ import { tryUseSilgiCLI, useSilgiCLI } from 'silgi/core';
1
2
  import satisfies from 'semver/functions/satisfies.js';
2
- import { useSilgiCLI } from 'silgi/core';
3
3
  import { version } from 'silgi/meta';
4
4
 
5
+ function hasError(type, silgi) {
6
+ silgi = silgi ?? tryUseSilgiCLI() ?? void 0;
7
+ if (silgi && silgi.errors.some((error) => error.type === type)) {
8
+ return true;
9
+ }
10
+ return false;
11
+ }
12
+
5
13
  const SEMANTIC_VERSION_RE = /-\d+\.[0-9a-f]+/;
6
14
  function normalizeSemanticVersion(version) {
7
15
  return version.replace(SEMANTIC_VERSION_RE, "");
@@ -27,4 +35,4 @@ function hasInstalledModule(moduleKey, silgi = useSilgiCLI()) {
27
35
  return find?.installed ?? false;
28
36
  }
29
37
 
30
- export { checkSilgiCompatibility as c, hasInstalledModule as h };
38
+ export { hasInstalledModule as a, checkSilgiCompatibility as c, hasError as h };
@@ -0,0 +1,119 @@
1
+ import { watch } from 'chokidar';
2
+ import { defineCommand } from 'citty';
3
+ import consola from 'consola';
4
+ import { basename, resolve } from 'pathe';
5
+ import { version } from 'silgi/meta';
6
+ import { silgiCLICtx } from 'silgi/core';
7
+ import { h as hasError } from './compatibility.mjs';
8
+ import { s as scanFiles, b as writeScanFiles, c as createSilgiCLI, p as prepare, w as writeTypesAndFiles, a as writeCoreFile } from './writeTypesAndFiles.mjs';
9
+ import { c as commonArgs } from './common.mjs';
10
+ import 'semver/functions/satisfies.js';
11
+ import 'node:fs';
12
+ import 'node:fs/promises';
13
+ import 'hookable';
14
+ import 'silgi/kit';
15
+ import 'silgi/runtime/meta';
16
+ import 'silgi/types';
17
+ import 'unimport';
18
+ import './env.mjs';
19
+ import '@clack/prompts';
20
+ import 'dotenv';
21
+ import 'mlly';
22
+ import 'scule';
23
+ import 'dev-jiti';
24
+ import 'node:url';
25
+ import 'defu';
26
+ import 'ufo';
27
+ import 'globby';
28
+ import 'ignore';
29
+ import '@oxc-parser/wasm';
30
+ import 'klona';
31
+ import 'unstorage';
32
+ import './loader.mjs';
33
+ import 'c12';
34
+ import 'compatx';
35
+ import 'klona/full';
36
+ import 'std-env';
37
+ import 'consola/utils';
38
+ import 'escape-string-regexp';
39
+ import 'pkg-types';
40
+ import 'pathe/utils';
41
+ import './types.mjs';
42
+
43
+ async function reloadScan(silgi, path, _stats) {
44
+ const startTime = performance.now();
45
+ silgi.errors = [];
46
+ if (silgiCLICtx.tryUse()) {
47
+ silgiCLICtx.unset();
48
+ silgiCLICtx.set(silgi);
49
+ } else {
50
+ silgiCLICtx.set(silgi);
51
+ silgi.hook("close", () => silgiCLICtx.unset());
52
+ }
53
+ silgi.hooks.removeAllHooks();
54
+ await scanFiles(silgi, silgi.options.devServer.watch);
55
+ if (!hasError("Parser", silgi)) {
56
+ await writeScanFiles(silgi);
57
+ }
58
+ silgi.errors = [];
59
+ const endTime = performance.now();
60
+ const elapsedTime = Math.round(endTime - startTime);
61
+ silgi.logger.success(`${basename(path)} - ${elapsedTime}ms`);
62
+ }
63
+
64
+ const dev = defineCommand({
65
+ meta: {
66
+ name: "dev",
67
+ description: "Start the development server for the project",
68
+ version: version
69
+ },
70
+ args: {
71
+ ...commonArgs,
72
+ preset: {
73
+ type: "string",
74
+ description: "The build preset to use (you can also use `SILGI_PRESET` environment variable)."
75
+ },
76
+ stub: {
77
+ type: "boolean",
78
+ description: "Run in silgi development mode"
79
+ }
80
+ },
81
+ async run({ args }) {
82
+ const rootDir = resolve(args.dir || args._dir || ".");
83
+ const silgi = await createSilgiCLI({
84
+ rootDir,
85
+ dev: args.stub,
86
+ stub: args.stub,
87
+ preset: args.preset,
88
+ commandType: "prepare"
89
+ });
90
+ await prepare();
91
+ await writeTypesAndFiles(silgi);
92
+ await writeCoreFile(silgi);
93
+ let watcher;
94
+ if (silgi.options.devServer.watch.length > 0) {
95
+ watcher = watch(silgi.options.devServer.watch, silgi.options.watchOptions);
96
+ watcher.on("add", (...data) => reloadScan(silgi, ...data)).on("change", (...data) => reloadScan(silgi, ...data));
97
+ }
98
+ const close = async () => {
99
+ await silgi.close();
100
+ if (watcher) {
101
+ watcher.close();
102
+ }
103
+ await silgi.callHook("close", silgi);
104
+ consola.withTag("silgi").success("Process terminated");
105
+ };
106
+ process.on("SIGINT", async () => {
107
+ consola.withTag("silgi").info("Shutting down...");
108
+ await close();
109
+ process.exit(0);
110
+ });
111
+ await silgi.callHook("close", silgi);
112
+ consola.withTag("silgi").success("Prepare completed");
113
+ consola.withTag("silgi").info("Process is still running. Press Ctrl+C to exit.");
114
+ setInterval(() => {
115
+ }, 1e3);
116
+ }
117
+ });
118
+
119
+ export { dev as default };
@@ -17,7 +17,8 @@ const main = defineCommand({
17
17
  prepare: () => import('./prepare.mjs').then((m) => m.default),
18
18
  init: () => import('./init.mjs').then((m) => m.default),
19
19
  run: () => import('./run.mjs').then((m) => m.default),
20
- install: () => import('./install.mjs').then((m) => m.default)
20
+ install: () => import('./install.mjs').then((m) => m.default),
21
+ dev: () => import('./dev.mjs').then((m) => m.default)
21
22
  },
22
23
  run({ args }) {
23
24
  if (args.version)
package/dist/cli/init.mjs CHANGED
@@ -1,5 +1,7 @@
1
1
  import { writeFileSync } from 'node:fs';
2
+ import * as p from '@clack/prompts';
2
3
  import { defineCommand } from 'citty';
4
+ import consola from 'consola';
3
5
 
4
6
  const init = defineCommand({
5
7
  meta: {
@@ -9,12 +11,53 @@ const init = defineCommand({
9
11
  },
10
12
  args: {},
11
13
  async run() {
12
- const context = `import { defineSilgiConfig } from 'silgi/config'
13
-
14
- export default defineSilgiConfig({
15
-
16
- })`;
17
- writeFileSync("silgi.config.ts", context);
14
+ p.intro("Initializing silgi config");
15
+ const framework = await p.select({
16
+ message: "Choose a framework",
17
+ options: [
18
+ { label: "Nitro", value: "nitro" },
19
+ { label: "Nuxt", value: "nuxt" },
20
+ { label: "H3", value: "h3" },
21
+ { label: "NPM Package", value: "npm-package" }
22
+ ]
23
+ });
24
+ if (p.isCancel(framework)) {
25
+ consola.info("Silgi config initialization canceled");
26
+ return;
27
+ }
28
+ const context = [
29
+ `import { defineSilgiConfig } from 'silgi/config'`,
30
+ "",
31
+ "export default defineSilgiConfig({",
32
+ ` preset: '${framework}',`,
33
+ ` compatibilityDate: '${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}',`,
34
+ " // Please create a namespace for your project",
35
+ " namespaces: [],",
36
+ "",
37
+ "})",
38
+ ""
39
+ ];
40
+ if (framework === "nitro" || framework === "nuxt") {
41
+ const plugin = [
42
+ `import { buildSilgi } from '../silgi/core'`,
43
+ "",
44
+ "export default defineNitroPlugin(async (nitro) => {",
45
+ " const _silgi = buildSilgi(",
46
+ " nitro,",
47
+ " {},",
48
+ " {",
49
+ " storage: useStorage(),",
50
+ " runtimeConfig: useRuntimeConfig(),",
51
+ " },",
52
+ " )",
53
+ "})",
54
+ ""
55
+ ];
56
+ writeFileSync("server/plugins/silgi.ts", plugin.join("\n"));
57
+ consola.success("Silgi plugin created, see server/plugins/silgi.ts");
58
+ }
59
+ writeFileSync("silgi.config.ts", context.join("\n"));
60
+ consola.success("Silgi config created, see silgi.config.ts");
18
61
  }
19
62
  });
20
63
 
@@ -25,6 +25,9 @@ const SilgiCLIDefaults = {
25
25
  runtimeConfig: {
26
26
  app: { baseURL: "/" }
27
27
  },
28
+ devServer: {
29
+ watch: []
30
+ },
28
31
  // Dirs
29
32
  scanDirs: [],
30
33
  build: {