@holo-js/adapter-nuxt 0.1.1 → 0.1.3

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/dist/module.d.mts CHANGED
@@ -1,8 +1,34 @@
1
1
  import { LoadedHoloConfig, HoloConfigMap } from '@holo-js/config';
2
- import { ModuleOptions as ModuleOptions$1 } from '@holo-js/storage';
3
2
 
4
3
  type ModuleOptions = Record<string, never>;
5
- declare function toStorageModuleOptions(loaded: LoadedHoloConfig<HoloConfigMap>): ModuleOptions$1;
4
+ type StorageDriver = 'local' | 'public' | 's3';
5
+ type StorageVisibility = 'private' | 'public';
6
+ type StorageDiskConfig = {
7
+ driver: StorageDriver;
8
+ visibility?: StorageVisibility;
9
+ root?: string;
10
+ url?: string;
11
+ bucket?: string;
12
+ region?: string;
13
+ endpoint?: string;
14
+ accessKeyId?: string;
15
+ secretAccessKey?: string;
16
+ sessionToken?: string;
17
+ forcePathStyleEndpoint?: boolean;
18
+ [key: string]: unknown;
19
+ };
20
+ type StorageModuleOptions = {
21
+ defaultDisk?: string;
22
+ routePrefix?: string;
23
+ disks?: Record<string, StorageDiskConfig>;
24
+ };
25
+ type StorageS3Module = {
26
+ default: unknown;
27
+ };
28
+ declare function hasModuleNotFoundCode(error: unknown, expectedSpecifier: string): boolean;
29
+ declare function importOptionalStorageS3Module(): Promise<StorageS3Module | undefined>;
30
+ declare function hasLoadedConfigFile(loaded: LoadedHoloConfig<HoloConfigMap>, configName: string): boolean;
31
+ declare function toStorageModuleOptions(loaded: LoadedHoloConfig<HoloConfigMap>): StorageModuleOptions;
6
32
  declare const _default: {
7
33
  meta?: {
8
34
  name?: string;
@@ -11,9 +37,14 @@ declare const _default: {
11
37
  setup: (options: ModuleOptions, nuxt: unknown) => void | Promise<void>;
12
38
  };
13
39
 
40
+ declare const moduleInternals: {
41
+ hasModuleNotFoundCode: typeof hasModuleNotFoundCode;
42
+ hasLoadedConfigFile: typeof hasLoadedConfigFile;
43
+ importOptionalStorageS3Module: typeof importOptionalStorageS3Module;
44
+ };
14
45
  declare const adapterNuxtInternals: {
15
46
  toStorageModuleOptions: typeof toStorageModuleOptions;
16
47
  };
17
48
 
18
- export { adapterNuxtInternals, _default as default };
49
+ export { adapterNuxtInternals, _default as default, moduleInternals };
19
50
  export type { ModuleOptions };
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@holo-js/adapter-nuxt",
3
3
  "configKey": "@holo-js/adapter-nuxt",
4
- "version": "0.1.1",
4
+ "version": "0.1.3",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "unknown"
package/dist/module.mjs CHANGED
@@ -1,8 +1,58 @@
1
1
  import { resolve } from 'node:path';
2
2
  import { defineNuxtModule, createResolver, addServerPlugin, addImports, addServerImportsDir, addServerHandler } from '@nuxt/kit';
3
3
  import { loadConfigDirectory } from '@holo-js/config';
4
- import { mergeModuleOptions, normalizeModuleOptions, applyNitroStorageConfig, hasPublicLocalDisk } from '@holo-js/storage';
5
4
 
5
+ function escapeRegExp(value) {
6
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
7
+ }
8
+ function hasModuleNotFoundCode(error, expectedSpecifier) {
9
+ if (!error || typeof error !== "object") {
10
+ return false;
11
+ }
12
+ if ("code" in error && error.code === "ERR_MODULE_NOT_FOUND") {
13
+ const message = "message" in error && typeof error.message === "string" ? error.message : "";
14
+ const escapedSpecifier = escapeRegExp(expectedSpecifier);
15
+ if ([
16
+ new RegExp(`Cannot find package ['"]${escapedSpecifier}['"]`),
17
+ new RegExp(`Cannot find module ['"]${escapedSpecifier}['"]`),
18
+ new RegExp(`Could not resolve ['"]${escapedSpecifier}['"]`),
19
+ new RegExp(`Failed to load url\\s+(?:['"\`]${escapedSpecifier}['"\`]|${escapedSpecifier}(?=[\\s(]|$))`)
20
+ ].some((pattern) => pattern.test(message))) {
21
+ return true;
22
+ }
23
+ }
24
+ if ("cause" in error) {
25
+ return hasModuleNotFoundCode(error.cause, expectedSpecifier);
26
+ }
27
+ return false;
28
+ }
29
+ async function importOptionalStorageModule() {
30
+ try {
31
+ return await import('@holo-js/storage');
32
+ } catch (error) {
33
+ if (hasModuleNotFoundCode(error, "@holo-js/storage")) {
34
+ return void 0;
35
+ }
36
+ throw error;
37
+ }
38
+ }
39
+ async function importOptionalStorageS3Module() {
40
+ try {
41
+ const storageS3 = await import('@holo-js/storage-s3');
42
+ return typeof storageS3.default === "undefined" ? void 0 : storageS3;
43
+ } catch (error) {
44
+ if (hasModuleNotFoundCode(error, "@holo-js/storage-s3")) {
45
+ return void 0;
46
+ }
47
+ throw error;
48
+ }
49
+ }
50
+ function hasLoadedConfigFile(loaded, configName) {
51
+ return loaded.loadedFiles.some((filePath) => {
52
+ const normalizedPath = filePath.replaceAll("\\", "/");
53
+ return normalizedPath.endsWith(`/config/${configName}.ts`) || normalizedPath.endsWith(`/config/${configName}.mts`) || normalizedPath.endsWith(`/config/${configName}.js`) || normalizedPath.endsWith(`/config/${configName}.mjs`) || normalizedPath.endsWith(`/config/${configName}.cts`) || normalizedPath.endsWith(`/config/${configName}.cjs`);
54
+ });
55
+ }
6
56
  function toStorageModuleOptions(loaded) {
7
57
  return {
8
58
  defaultDisk: loaded.storage.defaultDisk,
@@ -24,6 +74,7 @@ const module$1 = defineNuxtModule({
24
74
  preferCache: process.env.NODE_ENV === "production",
25
75
  processEnv: process.env
26
76
  });
77
+ const storageModule = await importOptionalStorageModule();
27
78
  const loadedStorageOptions = toStorageModuleOptions(loaded);
28
79
  const s3Driver = resolver.resolve("./runtime/drivers/s3.js");
29
80
  opts.nitro = opts.nitro || { storage: {} };
@@ -36,43 +87,59 @@ const module$1 = defineNuxtModule({
36
87
  projectRoot: rootDir
37
88
  };
38
89
  opts.runtimeConfig.db = loaded.database;
39
- const mergedStorageOptions = mergeModuleOptions(void 0, loadedStorageOptions);
40
- const normalizedStorage = normalizeModuleOptions(mergedStorageOptions);
90
+ const storageConfigured = hasLoadedConfigFile(loaded, "storage");
91
+ if (!storageModule && storageConfigured) {
92
+ throw new Error("[@holo-js/adapter-nuxt] Storage config requires @holo-js/storage to be installed.");
93
+ }
94
+ const mergedStorageOptions = storageModule?.mergeModuleOptions(void 0, loadedStorageOptions);
95
+ const normalizedStorage = mergedStorageOptions ? storageModule?.normalizeModuleOptions(mergedStorageOptions) : void 0;
41
96
  opts._holoStorageModuleOptions = mergedStorageOptions;
42
- opts.runtimeConfig.holoStorage = normalizedStorage;
97
+ if (normalizedStorage && Object.values(normalizedStorage.disks).some((disk) => disk.driver === "s3")) {
98
+ if (!await importOptionalStorageS3Module()) {
99
+ throw new Error("[@holo-js/adapter-nuxt] S3 storage disks require @holo-js/storage-s3 to be installed.");
100
+ }
101
+ }
102
+ if (normalizedStorage) {
103
+ opts.runtimeConfig.holoStorage = normalizedStorage;
104
+ }
43
105
  if (!opts._holoCoreRuntimeRegistered) {
44
- addServerPlugin(resolver.resolve("./runtime/plugins/init"));
45
- addImports([
106
+ const imports = [
46
107
  { name: "holo", as: "holo", from: resolver.resolve("./runtime/composables") },
47
108
  { name: "useHoloDb", as: "useHoloDb", from: resolver.resolve("./runtime/composables") },
48
109
  { name: "useHoloEnv", as: "useHoloEnv", from: resolver.resolve("./runtime/composables") },
49
- { name: "useHoloDebug", as: "useHoloDebug", from: resolver.resolve("./runtime/composables") },
50
- { name: "useStorage", as: "useStorage", from: resolver.resolve("./runtime/composables") },
51
- { name: "Storage", as: "Storage", from: resolver.resolve("./runtime/composables") }
52
- ]);
110
+ { name: "useHoloDebug", as: "useHoloDebug", from: resolver.resolve("./runtime/composables") }
111
+ ];
112
+ if (storageModule) {
113
+ imports.push(
114
+ { name: "useStorage", as: "useStorage", from: resolver.resolve("./runtime/composables/storage") },
115
+ { name: "Storage", as: "Storage", from: resolver.resolve("./runtime/composables/storage") }
116
+ );
117
+ }
118
+ addServerPlugin(resolver.resolve("./runtime/plugins/init"));
119
+ addImports(imports);
53
120
  addServerImportsDir(resolver.resolve("./runtime/server/imports"));
54
121
  addServerImportsDir(resolve(sourceDir, "server/models"));
55
122
  opts._holoCoreRuntimeRegistered = true;
56
123
  }
57
- if (!opts._holoStorageRuntimeRegistered) {
124
+ if (storageModule && !opts._holoStorageRuntimeRegistered) {
58
125
  addServerPlugin(resolver.resolve("./runtime/plugins/storage"));
59
126
  opts._holoStorageRuntimeRegistered = true;
60
127
  }
61
- if (!opts.nitro.storage || Object.keys(opts.nitro.storage).every((key) => !key.startsWith("holo:"))) {
62
- applyNitroStorageConfig(opts, normalizedStorage, s3Driver);
128
+ if (storageModule && normalizedStorage && (!opts.nitro.storage || Object.keys(opts.nitro.storage).every((key) => !key.startsWith("holo:")))) {
129
+ storageModule.applyNitroStorageConfig(opts, normalizedStorage, s3Driver);
63
130
  }
64
131
  const runtimePath = resolver.resolve("./runtime");
65
132
  if (!opts.build.transpile.includes(runtimePath)) {
66
133
  opts.build.transpile.push(runtimePath);
67
134
  }
68
- if (!opts._holoStorageFinalizeRegistered) {
135
+ if (storageModule && !opts._holoStorageFinalizeRegistered) {
69
136
  opts._holoStorageFinalizeRegistered = true;
70
137
  nuxt.hook("modules:done", () => {
71
- const finalNormalized = normalizeModuleOptions(opts._holoStorageModuleOptions);
138
+ const finalNormalized = storageModule.normalizeModuleOptions(opts._holoStorageModuleOptions);
72
139
  opts.runtimeConfig = opts.runtimeConfig || {};
73
140
  opts.runtimeConfig.holoStorage = finalNormalized;
74
- applyNitroStorageConfig(opts, finalNormalized, s3Driver);
75
- if (hasPublicLocalDisk(finalNormalized)) {
141
+ storageModule.applyNitroStorageConfig(opts, finalNormalized, s3Driver);
142
+ if (storageModule.hasPublicLocalDisk(finalNormalized)) {
76
143
  addServerHandler({
77
144
  route: `${finalNormalized.routePrefix}/**`,
78
145
  handler: resolver.resolve("./runtime/server/routes/storage.get")
@@ -88,8 +155,13 @@ const module$1 = defineNuxtModule({
88
155
  }
89
156
  }
90
157
  });
158
+ const moduleInternals = {
159
+ hasModuleNotFoundCode,
160
+ hasLoadedConfigFile,
161
+ importOptionalStorageS3Module
162
+ };
91
163
  const adapterNuxtInternals = {
92
164
  toStorageModuleOptions
93
165
  };
94
166
 
95
- export { adapterNuxtInternals, module$1 as default };
167
+ export { adapterNuxtInternals, module$1 as default, moduleInternals };
@@ -1,16 +1,3 @@
1
- export {
2
- Storage,
3
- configureStorageRuntime,
4
- resetStorageRuntime,
5
- useStorage,
6
- type StorageBackend,
7
- type StorageContent,
8
- type StorageDisk,
9
- type StorageInstance,
10
- type StorageRuntimeBindings,
11
- type TemporaryUrlOptions,
12
- } from '@holo-js/storage/runtime'
13
-
14
1
  export interface HoloRuntimeConnection {
15
2
  driver?: 'sqlite' | 'postgres' | 'mysql'
16
3
  url?: string
@@ -1,9 +1,3 @@
1
- export {
2
- Storage,
3
- configureStorageRuntime,
4
- resetStorageRuntime,
5
- useStorage
6
- } from "@holo-js/storage/runtime";
7
1
  import {
8
2
  createHoloProjectAccessors,
9
3
  initializeHoloAdapterProject
@@ -0,0 +1,12 @@
1
+ export {
2
+ Storage,
3
+ configureStorageRuntime,
4
+ resetStorageRuntime,
5
+ useStorage,
6
+ type StorageBackend,
7
+ type StorageContent,
8
+ type StorageDisk,
9
+ type StorageInstance,
10
+ type StorageRuntimeBindings,
11
+ type TemporaryUrlOptions,
12
+ } from '@holo-js/storage/runtime'
@@ -0,0 +1,6 @@
1
+ export {
2
+ Storage,
3
+ configureStorageRuntime,
4
+ resetStorageRuntime,
5
+ useStorage
6
+ } from "@holo-js/storage/runtime";
@@ -1 +1 @@
1
- export { default } from "@holo-js/storage/runtime/drivers/s3";
1
+ export { default } from "@holo-js/storage-s3";
package/dist/types.d.mts CHANGED
@@ -1,3 +1,3 @@
1
- export { type adapterNuxtInternals, default } from './module.mjs'
1
+ export { type adapterNuxtInternals, default, type moduleInternals } from './module.mjs'
2
2
 
3
3
  export { type ModuleOptions } from './module.mjs'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@holo-js/adapter-nuxt",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Holo-JS Framework - Nuxt adapter",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -16,6 +16,10 @@
16
16
  "./runtime": {
17
17
  "types": "./dist/runtime/composables/index.d.ts",
18
18
  "import": "./dist/runtime/composables/index.js"
19
+ },
20
+ "./storage": {
21
+ "types": "./dist/runtime/composables/storage.d.ts",
22
+ "import": "./dist/runtime/composables/storage.js"
19
23
  }
20
24
  },
21
25
  "main": "./dist/module.mjs",
@@ -31,13 +35,28 @@
31
35
  },
32
36
  "dependencies": {
33
37
  "@nuxt/kit": "^4.0.0",
34
- "@holo-js/config": "^0.1.1",
35
- "@holo-js/core": "^0.1.1",
36
- "@holo-js/db": "^0.1.1",
37
- "@holo-js/forms": "^0.1.1",
38
- "@holo-js/storage": "^0.1.1"
38
+ "@holo-js/config": "^0.1.3",
39
+ "@holo-js/core": "^0.1.3",
40
+ "@holo-js/db": "^0.1.3"
41
+ },
42
+ "peerDependencies": {
43
+ "@holo-js/forms": "^0.1.3",
44
+ "@holo-js/storage": "^0.1.3",
45
+ "@holo-js/storage-s3": "^0.1.3"
46
+ },
47
+ "peerDependenciesMeta": {
48
+ "@holo-js/forms": {
49
+ "optional": true
50
+ },
51
+ "@holo-js/storage": {
52
+ "optional": true
53
+ },
54
+ "@holo-js/storage-s3": {
55
+ "optional": true
56
+ }
39
57
  },
40
58
  "devDependencies": {
59
+ "@holo-js/storage-s3": "workspace:*",
41
60
  "@nuxt/module-builder": "^1.0.2",
42
61
  "@types/node": "^22.10.2",
43
62
  "nuxt": "^4.0.0",