@antelopejs/dms-frontend 0.0.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.
Files changed (54) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +131 -0
  3. package/dist/commands/build.js +66 -0
  4. package/dist/commands/clean.js +42 -0
  5. package/dist/commands/dev.js +116 -0
  6. package/dist/commands/prepare.js +60 -0
  7. package/dist/commands/start.js +49 -0
  8. package/dist/commands/verify-source.js +39 -0
  9. package/dist/common.js +24 -0
  10. package/dist/config.js +142 -0
  11. package/dist/discovery.js +123 -0
  12. package/dist/fs-sync.js +142 -0
  13. package/dist/index.js +44 -0
  14. package/dist/layer-watch.js +154 -0
  15. package/dist/layers.js +120 -0
  16. package/dist/manifest.js +109 -0
  17. package/dist/materialize.js +249 -0
  18. package/dist/ports.js +30 -0
  19. package/dist/update-check.js +173 -0
  20. package/dist/utils/cli-ui.js +178 -0
  21. package/dist/verify-source-runner.js +228 -0
  22. package/dist/workspace-setup.js +109 -0
  23. package/dist/workspace.js +76 -0
  24. package/package.json +97 -0
  25. package/templates/vue/DmsDynamicPage.vue +89 -0
  26. package/templates/vue/app-config-stub.mjs +1 -0
  27. package/templates/vue/app-runtime.ts +240 -0
  28. package/templates/vue/compress-assets.mjs +48 -0
  29. package/templates/vue/email-locales.ts +32 -0
  30. package/templates/vue/email-renderer.ts +159 -0
  31. package/templates/vue/email-runtime.ts +23 -0
  32. package/templates/vue/frontend-module.ts +1418 -0
  33. package/templates/vue/globals.d.ts +1 -0
  34. package/templates/vue/index.html +24 -0
  35. package/templates/vue/main.ts +33 -0
  36. package/templates/vue/npmrc +2 -0
  37. package/templates/vue/package.json +35 -0
  38. package/templates/vue/pnpm-workspace.yaml +4 -0
  39. package/templates/vue/server/auth/backend.mjs +83 -0
  40. package/templates/vue/server/auth/client-ip.mjs +52 -0
  41. package/templates/vue/server/auth/oauth.mjs +213 -0
  42. package/templates/vue/server/auth/routes.mjs +254 -0
  43. package/templates/vue/server/auth/session.mjs +180 -0
  44. package/templates/vue/server/client-manifest.mjs +116 -0
  45. package/templates/vue/server/email.mjs +36 -0
  46. package/templates/vue/server/inertia.mjs +79 -0
  47. package/templates/vue/server/render-token.mjs +81 -0
  48. package/templates/vue/server/tester.mjs +228 -0
  49. package/templates/vue/server.mjs +526 -0
  50. package/templates/vue/ssr-renderer.ts +146 -0
  51. package/templates/vue/tsconfig.json +31 -0
  52. package/templates/vue/typecheck-loader.mjs +13 -0
  53. package/templates/vue/vite.config.ts +161 -0
  54. package/templates/vue/vite.email.config.ts +77 -0
@@ -0,0 +1,13 @@
1
+ import { registerHooks } from "node:module";
2
+
3
+ const APP_CONFIG_IMPORT = "#build/app.config";
4
+ const APP_CONFIG_URL = new URL("./app-config-stub.mjs", import.meta.url).href;
5
+
6
+ registerHooks({
7
+ resolve(specifier, context, nextResolve) {
8
+ if (specifier === APP_CONFIG_IMPORT) {
9
+ return { url: APP_CONFIG_URL, shortCircuit: true };
10
+ }
11
+ return nextResolve(specifier, context);
12
+ },
13
+ });
@@ -0,0 +1,161 @@
1
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
2
+ import { basename, resolve } from "node:path";
3
+ import ui from "@nuxt/ui/vite";
4
+ import vue from "@vitejs/plugin-vue";
5
+ import { defineConfig } from "vite";
6
+
7
+ interface FrontendModuleRegistryEntry {
8
+ id: string;
9
+ root: string;
10
+ priority: number;
11
+ }
12
+
13
+ interface FrontendModuleRegistry {
14
+ modules: FrontendModuleRegistryEntry[];
15
+ }
16
+
17
+ const registryPath = resolve(__dirname, "generated-frontend-modules.json");
18
+ const registry = JSON.parse(
19
+ readFileSync(registryPath, "utf8"),
20
+ ) as FrontendModuleRegistry;
21
+ const moduleRoots = registry.modules.map((module) => module.root);
22
+ const frontendSourceRoots = moduleRoots.flatMap((root) => {
23
+ const layersRoot = resolve(root, "layers");
24
+ if (!existsSync(layersRoot)) return [root];
25
+ return readdirSync(layersRoot).map((name) => resolve(layersRoot, name));
26
+ });
27
+ const stableModuleAliases = Object.fromEntries(
28
+ [...registry.modules].reverse().flatMap((module) => {
29
+ const layersRoot = resolve(module.root, "layers");
30
+ if (existsSync(layersRoot)) {
31
+ return readdirSync(layersRoot).map((name) => [
32
+ `#${name}`,
33
+ resolve(layersRoot, name),
34
+ ]);
35
+ }
36
+ const moduleName = basename(module.root).replace(/^.*__/, "");
37
+ return [[`#${moduleName}`, module.root]];
38
+ }),
39
+ );
40
+ const importDirectories = frontendSourceRoots.flatMap((root) =>
41
+ [
42
+ "app/composables/**/*",
43
+ "app/types/**/*",
44
+ "app/utils/**/*",
45
+ "app/build/composables/**/*",
46
+ "app/build/types/**/*",
47
+ ].map((glob) => ({ glob: resolve(root, glob), types: true })),
48
+ );
49
+ const optimizedDependencies = [
50
+ "vue",
51
+ "@inertiajs/vue3",
52
+ "@unhead/vue",
53
+ "@unhead/vue/client",
54
+ "vue-i18n",
55
+ "@vueuse/core",
56
+ "reka-ui",
57
+ "@internationalized/date",
58
+ "vuedraggable",
59
+ "vue3-apexcharts",
60
+ "apexcharts",
61
+ "tailwind-variants",
62
+ "ofetch",
63
+ "ufo",
64
+ "defu",
65
+ "zod",
66
+ "json-schema-to-zod",
67
+ "striptags",
68
+ ];
69
+ const uiLinkImport = "@nuxt/ui/components/Link.vue";
70
+ const uiInertiaLinkImport = resolve(
71
+ __dirname,
72
+ "node_modules/@nuxt/ui/dist/runtime/vue/overrides/inertia/Link.vue",
73
+ );
74
+
75
+ export default defineConfig({
76
+ plugins: [
77
+ {
78
+ name: "dms-ui-inertia-link",
79
+ enforce: "pre",
80
+ resolveId(id) {
81
+ return id === uiLinkImport ? uiInertiaLinkImport : null;
82
+ },
83
+ },
84
+ vue(),
85
+ ui({
86
+ router: "inertia",
87
+ icon: { clientBundle: { scan: true } },
88
+ components: { dirs: [] },
89
+ autoImport: {
90
+ dirs: importDirectories,
91
+ dirsScanOptions: { types: true },
92
+ imports: [
93
+ "vue",
94
+ {
95
+ [resolve(__dirname, "frontend-module.ts")]: [
96
+ "$fetch",
97
+ "abortNavigation",
98
+ "clearError",
99
+ "createError",
100
+ "defineAppConfig",
101
+ "defineDmsPlugin",
102
+ "defineDmsMiddleware",
103
+ "defineDmsPageMeta",
104
+ "navigateDms",
105
+ "prefetchComponents",
106
+ "preloadComponents",
107
+ "refreshDmsData",
108
+ "showError",
109
+ "useDmsAsyncData",
110
+ "useDmsCookie",
111
+ "useColorMode",
112
+ "useDmsFetch",
113
+ "useHead",
114
+ "useI18n",
115
+ "useError",
116
+ "useDmsLazyAsyncData",
117
+ "useDmsApp",
118
+ "useDmsRoute",
119
+ "useDmsRouter",
120
+ "useDmsRuntimeConfig",
121
+ "useSeoMeta",
122
+ "useDmsState",
123
+ "useDmsAppConfig",
124
+ "DmsClientOnly",
125
+ "DmsLink",
126
+ "useUserSession",
127
+ ],
128
+ },
129
+ ],
130
+ dts: "auto-imports.d.ts",
131
+ vueTemplate: true,
132
+ },
133
+ }),
134
+ ],
135
+ resolve: {
136
+ dedupe: ["vue", "reka-ui", "@nuxt/ui"],
137
+ alias: {
138
+ "#dms-inertia/frontend-module": resolve(__dirname, "frontend-module.ts"),
139
+ "#build/nuxt-icon-client-bundle": "virtual:nuxt-ui-icons",
140
+ "#shortcuts-aggregated": resolve(
141
+ __dirname,
142
+ "shortcuts-aggregated.generated.ts",
143
+ ),
144
+ ...stableModuleAliases,
145
+ ...Object.fromEntries(
146
+ registry.modules.map((module) => [
147
+ `@frontend/${module.id}`,
148
+ module.root,
149
+ ]),
150
+ ),
151
+ },
152
+ },
153
+ optimizeDeps: {
154
+ include: optimizedDependencies,
155
+ // Avoid crawling every module page at startup, but optimize dependencies as pages load.
156
+ entries: [],
157
+ },
158
+ ssr: { noExternal: ["@nuxt/icon", "@nuxt/ui"] },
159
+ server: { strictPort: true, allowedHosts: [".onamp.dev"] },
160
+ build: { manifest: true, outDir: "dist/client" },
161
+ });
@@ -0,0 +1,77 @@
1
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
2
+ import { basename, resolve } from "node:path";
3
+ import vue from "@vitejs/plugin-vue";
4
+ import AutoImport from "unplugin-auto-import/vite";
5
+ import { defineConfig } from "vite";
6
+
7
+ interface FrontendModuleRegistryEntry {
8
+ id: string;
9
+ root: string;
10
+ }
11
+
12
+ interface FrontendModuleRegistry {
13
+ modules: FrontendModuleRegistryEntry[];
14
+ }
15
+
16
+ const registry = JSON.parse(
17
+ readFileSync(resolve(__dirname, "generated-frontend-modules.json"), "utf8"),
18
+ ) as FrontendModuleRegistry;
19
+ const moduleAliases = Object.fromEntries(
20
+ registry.modules.map((module) => [`@frontend/${module.id}`, module.root]),
21
+ );
22
+ const stableModuleAliases = Object.fromEntries(
23
+ [...registry.modules].reverse().flatMap((module) => {
24
+ const layersRoot = resolve(module.root, "layers");
25
+ if (existsSync(layersRoot)) {
26
+ return readdirSync(layersRoot).map((name) => [
27
+ `#${name}`,
28
+ resolve(layersRoot, name),
29
+ ]);
30
+ }
31
+ const moduleName = basename(module.root).replace(/^.*__/, "");
32
+ return [[`#${moduleName}`, module.root]];
33
+ }),
34
+ );
35
+
36
+ export default defineConfig({
37
+ plugins: [
38
+ {
39
+ name: "dms-email-locale-assets",
40
+ buildStart() {
41
+ const directory = resolve(__dirname, "locales.generated");
42
+ for (const file of readdirSync(directory).filter((name) =>
43
+ name.endsWith(".json"),
44
+ )) {
45
+ this.emitFile({
46
+ type: "asset",
47
+ fileName: `locales/${file}`,
48
+ source: readFileSync(resolve(directory, file), "utf8"),
49
+ });
50
+ }
51
+ },
52
+ },
53
+ vue(),
54
+ AutoImport({
55
+ dts: false,
56
+ imports: [
57
+ {
58
+ [resolve(__dirname, "email-runtime.ts")]: [
59
+ "useDmsAppConfig",
60
+ "useDmsRuntimeConfig",
61
+ "defineAppConfig",
62
+ ],
63
+ },
64
+ ],
65
+ }),
66
+ ],
67
+ resolve: {
68
+ dedupe: ["vue"],
69
+ alias: { ...stableModuleAliases, ...moduleAliases },
70
+ },
71
+ build: {
72
+ manifest: true,
73
+ ssrEmitAssets: true,
74
+ outDir: "dist/server",
75
+ ssr: "email-renderer.ts",
76
+ },
77
+ });