@superbright/indexeddb-orm 1.0.33 → 1.0.35

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 (58) hide show
  1. package/README.md +44 -359
  2. package/dist/adapters/dexie.cjs +1 -1
  3. package/dist/adapters/dexie.cjs.map +1 -1
  4. package/dist/adapters/dexie.d.ts +3 -4
  5. package/dist/adapters/dexie.mjs +6 -9
  6. package/dist/adapters/dexie.mjs.map +1 -1
  7. package/dist/adapters/zustand-store.cjs +1 -1
  8. package/dist/adapters/zustand-store.cjs.map +1 -1
  9. package/dist/adapters/zustand-store.d.ts +20 -41
  10. package/dist/adapters/zustand-store.mjs +34 -194
  11. package/dist/adapters/zustand-store.mjs.map +1 -1
  12. package/dist/base/furniture.d.ts +2 -2
  13. package/dist/base/index.d.ts +0 -1
  14. package/dist/base/visitorquestionnaire.d.ts +2 -2
  15. package/dist/db.cjs +1 -1
  16. package/dist/db.cjs.map +1 -1
  17. package/dist/db.mjs +57 -75
  18. package/dist/db.mjs.map +1 -1
  19. package/dist/features/analytics/analytics.cjs +1 -1
  20. package/dist/features/analytics/analytics.cjs.map +1 -1
  21. package/dist/features/analytics/analytics.d.ts +481 -152
  22. package/dist/features/analytics/analytics.mjs +230 -175
  23. package/dist/features/analytics/analytics.mjs.map +1 -1
  24. package/dist/index.cjs +1 -1
  25. package/dist/index.d.ts +2 -3
  26. package/dist/index.mjs +92 -107
  27. package/dist/index.mjs.map +1 -1
  28. package/dist/schema.cjs +1 -1
  29. package/dist/schema.cjs.map +1 -1
  30. package/dist/schema.d.ts +1 -2088
  31. package/dist/schema.mjs +105 -161
  32. package/dist/schema.mjs.map +1 -1
  33. package/dist/stores/store.cjs +1 -1
  34. package/dist/stores/store.cjs.map +1 -1
  35. package/dist/stores/store.d.ts +7 -158
  36. package/dist/stores/store.mjs +13 -427
  37. package/dist/stores/store.mjs.map +1 -1
  38. package/dist/utils/casing.cjs +1 -1
  39. package/dist/utils/casing.cjs.map +1 -1
  40. package/dist/utils/casing.d.ts +0 -4
  41. package/dist/utils/casing.mjs +1 -4
  42. package/dist/utils/casing.mjs.map +1 -1
  43. package/dist/validation.cjs +1 -1
  44. package/dist/validation.cjs.map +1 -1
  45. package/dist/validation.d.ts +0 -2
  46. package/dist/validation.mjs +3 -14
  47. package/dist/validation.mjs.map +1 -1
  48. package/package.json +5 -1
  49. package/dist/adapters/structured-store.cjs +0 -2
  50. package/dist/adapters/structured-store.cjs.map +0 -1
  51. package/dist/adapters/structured-store.d.ts +0 -45
  52. package/dist/adapters/structured-store.mjs +0 -51
  53. package/dist/adapters/structured-store.mjs.map +0 -1
  54. package/dist/base/favoriteunit.cjs +0 -2
  55. package/dist/base/favoriteunit.cjs.map +0 -1
  56. package/dist/base/favoriteunit.d.ts +0 -14
  57. package/dist/base/favoriteunit.mjs +0 -10
  58. package/dist/base/favoriteunit.mjs.map +0 -1
@@ -1,218 +1,58 @@
1
- import { transformFiltersToUnitsSearchParams as d } from "../features/filters/transformers.mjs";
2
- import { validate as y } from "../validation.mjs";
3
- import { UnitSchema as f } from "../schema.mjs";
4
- const u = {
1
+ import { create as l } from "zustand";
2
+ import { devtools as o } from "zustand/middleware";
3
+ import { transformFiltersToUnitsSearchParams as p } from "../features/filters/transformers.mjs";
4
+ const a = {
5
5
  date_availability: void 0,
6
6
  qty_bedrooms: void 0,
7
7
  base_price: void 0,
8
8
  highlights: void 0
9
9
  };
10
- function F(l) {
11
- return (n, s) => ({
12
- // Initial state
13
- properties: {},
10
+ function n(m) {
11
+ return (i, r) => ({
14
12
  currentPropertyId: null,
15
- currentPropertySlug: null,
16
- hasPreviouslySearched: [],
17
- favorite_unit_ids: [],
18
- unitResults: [],
19
- filters: { ...u },
20
- tempFilters: { ...u },
21
- apiFilters: {
22
- limit: 10,
23
- page: 1,
24
- sortBy: "relevance"
13
+ filters: { ...a },
14
+ tempFilters: { ...a },
15
+ apiFilters: { limit: 10, page: 1, sortBy: "relevance" },
16
+ async setCurrentPropertyId(t) {
17
+ i({ currentPropertyId: t });
25
18
  },
26
- resultsMode: "all",
27
- resolvedQuestionnaireValues: {},
28
- sortBy: "relevance",
29
- filtersLoaded: !1,
30
- // === PROPERTY OPERATIONS ===
31
- async initializeProperty(r, e) {
32
- const { properties: t } = s();
33
- if (t[r]) {
34
- n({ currentPropertyId: r, currentPropertySlug: e });
35
- return;
36
- }
37
- n({
38
- currentPropertyId: r,
39
- currentPropertySlug: e,
40
- properties: {
41
- ...t,
42
- [r]: {
43
- id: r,
44
- slug: e,
45
- tourContactedOn: null,
46
- viewedUnits: [],
47
- questionnaireResults: null,
48
- tourContactData: null
49
- }
50
- }
51
- });
52
- },
53
- async setCurrentProperty(r, e) {
54
- n({
55
- currentPropertyId: r,
56
- ...e && { currentPropertySlug: e }
57
- });
58
- },
59
- async setCurrentPropertySlug(r) {
60
- n({ currentPropertySlug: r });
61
- },
62
- async setHasPreviouslySearched(r) {
63
- const { hasPreviouslySearched: e } = s();
64
- n({
65
- hasPreviouslySearched: Array.from(/* @__PURE__ */ new Set([...e, r]))
66
- });
67
- },
68
- async setFavoriteUnitIds(r) {
69
- n({ favorite_unit_ids: r });
70
- },
71
- async toggleFavorite(r) {
72
- const { favorite_unit_ids: e } = s(), t = e.includes(r);
73
- n({
74
- favorite_unit_ids: t ? e.filter((i) => i !== r) : [...e, r]
75
- });
76
- },
77
- async markUnitAsViewed(r, e) {
78
- window.open(e, "_blank", "noopener,noreferrer");
79
- const t = /* @__PURE__ */ new Date(), i = `${String(t.getMonth() + 1).padStart(2, "0")}/${String(t.getDate()).padStart(2, "0")}`, { currentPropertyId: a, properties: o } = s();
80
- if (!a || !o[a]) return;
81
- const c = o[a];
82
- n({
83
- properties: {
84
- ...o,
85
- [a]: {
86
- ...c,
87
- viewedUnits: [
88
- ...c.viewedUnits.filter((p) => p.unitId !== r),
89
- { unitId: r, viewedDate: i }
90
- ]
91
- }
92
- }
93
- });
94
- },
95
- async setTourContactedOn() {
96
- const { currentPropertyId: r, properties: e } = s();
97
- !r || !e[r] || n({
98
- properties: {
99
- ...e,
100
- [r]: {
101
- ...e[r],
102
- tourContactedOn: (/* @__PURE__ */ new Date()).toISOString()
103
- }
104
- }
105
- });
106
- },
107
- async getTourContactedOn() {
108
- var t;
109
- const { currentPropertyId: r, properties: e } = s();
110
- return r ? ((t = e[r]) == null ? void 0 : t.tourContactedOn) ?? null : null;
111
- },
112
- async setQuestionnaireResults(r) {
113
- const { currentPropertyId: e, properties: t } = s();
114
- !e || !t[e] || n({
115
- properties: {
116
- ...t,
117
- [e]: { ...t[e], questionnaireResults: r }
118
- }
119
- });
120
- },
121
- async setTourContactData(r) {
122
- const { currentPropertyId: e, properties: t } = s();
123
- !e || !t[e] || n({
124
- properties: {
125
- ...t,
126
- [e]: { ...t[e], tourContactData: r }
127
- }
128
- });
129
- },
130
- async setUnitResults(r) {
131
- const e = Array.isArray(r) ? r : r && typeof r == "object" ? Object.values(r) : [], t = [];
132
- e.forEach((i, a) => {
133
- const o = y(f, i, `unitResults[${a}]`);
134
- o && t.push(o);
135
- }), n({ unitResults: t });
136
- },
137
- async clearUnitResults() {
138
- n({ unitResults: [] });
139
- },
140
- // === FILTER OPERATIONS ===
141
- async setFilters(r) {
142
- const { filters: e } = s();
143
- n({ filters: { ...e, ...r } });
144
- },
145
- async setTempFilters(r) {
146
- const { tempFilters: e } = s();
147
- n({ tempFilters: { ...e, ...r } });
19
+ async setTempFilters(t) {
20
+ const { tempFilters: e } = r();
21
+ i({ tempFilters: { ...e, ...t } });
148
22
  },
149
23
  async setFiltersToDefault() {
150
- n({ filters: { ...u } });
24
+ i({ filters: { ...a } });
151
25
  },
152
- async setApiFilters(r) {
153
- const { apiFilters: e } = s();
154
- n({ apiFilters: { ...e, ...r } });
26
+ async setApiFilters(t) {
27
+ const { apiFilters: e } = r();
28
+ i({ apiFilters: { ...e, ...t } });
155
29
  },
156
- async handleTempFilterChange(r, e) {
157
- const { tempFilters: t } = s();
158
- n({ tempFilters: { ...t, [r]: e } });
30
+ async handleTempFilterChange(t, e) {
31
+ const { tempFilters: s } = r();
32
+ i({ tempFilters: { ...s, [t]: e } });
159
33
  },
160
34
  async submitFilterUpdate() {
161
- var t;
162
- const r = s(), e = d(
35
+ const t = r(), e = t.apiFilters.sortBy, s = p(
163
36
  {
164
- ...r.filters,
165
- limit: r.apiFilters.limit,
166
- page: r.apiFilters.page,
167
- sortBy: r.sortBy
37
+ ...t.filters,
38
+ limit: t.apiFilters.limit,
39
+ page: t.apiFilters.page,
40
+ sortBy: e
168
41
  },
169
42
  {
170
- defaultLimit: r.apiFilters.limit,
171
- defaultPage: r.apiFilters.page,
172
- defaultSort: r.sortBy
43
+ defaultLimit: t.apiFilters.limit,
44
+ defaultPage: t.apiFilters.page,
45
+ defaultSort: e
173
46
  }
174
47
  );
175
- n({ apiFilters: e }), (t = l == null ? void 0 : l.onFilterUpdate) == null || t.call(l, e);
176
- },
177
- // === RESULTS AND SORTING ===
178
- async setResultsMode(r) {
179
- n({ resultsMode: r });
180
- },
181
- async setSortBy(r) {
182
- n({ sortBy: r });
183
- },
184
- // === QUESTIONNAIRE ===
185
- async setResolvedQuestionnaireValues(r, e) {
186
- const { resolvedQuestionnaireValues: t } = s();
187
- n({
188
- resolvedQuestionnaireValues: {
189
- ...t,
190
- [r]: e
191
- }
192
- });
193
- },
194
- // === UTILITY METHODS ===
195
- async getResultsUrl() {
196
- const { currentPropertySlug: r } = s();
197
- return r ? `/${r}/results` : null;
198
- },
199
- async getCurrentProperty() {
200
- const { currentPropertyId: r, properties: e } = s();
201
- return r ? e[r] ?? null : null;
202
- },
203
- async getPropertyData(r) {
204
- const { currentPropertyId: e, properties: t } = s(), i = r ?? e;
205
- return i ? t[i] ?? null : null;
206
- },
207
- // === INTERNAL ===
208
- async _hydrate() {
209
- },
210
- async _initialize() {
211
- n({ filtersLoaded: !0 });
48
+ i({ apiFilters: s });
212
49
  }
213
50
  });
214
51
  }
52
+ const y = l()(
53
+ o(n(), { name: "inResi-orm-store" })
54
+ );
215
55
  export {
216
- F as createZustandUnifiedStore
56
+ y as useInResiStore
217
57
  };
218
58
  //# sourceMappingURL=zustand-store.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"zustand-store.mjs","sources":["../../src/adapters/zustand-store.ts"],"sourcesContent":["/**\n * Zustand adapter (flat API) — pure in-memory, no IndexedDB\n *\n * All engagement state (favorites, viewed, filters, etc.) is held in Zustand\n * only. No IndexedDB writes happen here. State is seeded at runtime from the\n * API (bootstrap endpoint) and updated optimistically by the consuming app.\n *\n * IndexedDB is used exclusively for visitor_uuid — see stores/store.ts.\n *\n * For a friendlier, domain-grouped API, use `createStructuredStore` from\n * `./structured-store`, which wraps this adapter and exposes nested actions\n * like `property.unit.favorites.toggle`, `filters.set`, etc.\n */\nimport { transformFiltersToUnitsSearchParams } from \"../features/filters/transformers\";\nimport { validate } from \"../validation\";\nimport { UnitSchema } from \"../schema\";\nimport type { UserPropertyState, Filters, QueryParams, ResultsMode, SortBy, TourContactData, Unit } from \"../schema\";\n\n// Unified Zustand store interface\nexport interface ZustandUnifiedStoreState {\n // Property data\n properties: Record<string, UserPropertyState>;\n currentPropertyId: string | null;\n currentPropertySlug: string | null;\n hasPreviouslySearched: string[];\n favorite_unit_ids: string[];\n\n // App data\n unitResults: Unit[];\n filters: Filters;\n tempFilters: Filters;\n apiFilters: QueryParams;\n resultsMode: ResultsMode;\n resolvedQuestionnaireValues: Record<string, string[]>;\n sortBy: SortBy;\n filtersLoaded: boolean;\n\n // === PROPERTY OPERATIONS ===\n initializeProperty: (propertyId: string, slug: string) => Promise<void>;\n setCurrentProperty: (propertyId: string, slug?: string) => Promise<void>;\n setCurrentPropertySlug: (slug: string) => Promise<void>;\n setHasPreviouslySearched: (slug: string) => Promise<void>;\n setFavoriteUnitIds: (unitIds: string[]) => Promise<void>;\n toggleFavorite: (unitId: string) => Promise<void>;\n markUnitAsViewed: (unitId: string, url: string) => Promise<void>;\n setTourContactedOn: () => Promise<void>;\n getTourContactedOn: () => Promise<string | null>;\n setQuestionnaireResults: (results: unknown) => Promise<void>;\n setTourContactData: (data: TourContactData) => Promise<void>;\n setUnitResults: (units: unknown) => Promise<void>;\n clearUnitResults: () => Promise<void>;\n\n // === FILTER OPERATIONS ===\n setFilters: (filters: Partial<Filters>) => Promise<void>;\n setTempFilters: (filters: Partial<Filters>) => Promise<void>;\n setFiltersToDefault: () => Promise<void>;\n setApiFilters: (filters: Partial<QueryParams>) => Promise<void>;\n handleTempFilterChange: <K extends keyof Filters>(key: K, value: Filters[K]) => Promise<void>;\n submitFilterUpdate: () => Promise<void>;\n\n // === RESULTS AND SORTING ===\n setResultsMode: (mode: ResultsMode) => Promise<void>;\n setSortBy: (sortBy: SortBy) => Promise<void>;\n\n // === QUESTIONNAIRE ===\n setResolvedQuestionnaireValues: (name: string, values: string[]) => Promise<void>;\n\n // === UTILITY METHODS ===\n getResultsUrl: () => Promise<string | null>;\n getCurrentProperty: () => Promise<UserPropertyState | null>;\n getPropertyData: (propertyId?: string) => Promise<UserPropertyState | null>;\n\n // === INTERNAL ===\n _hydrate: () => Promise<void>;\n _initialize: () => Promise<void>;\n}\n\nconst defaultFilters: Filters = {\n date_availability: undefined,\n qty_bedrooms: undefined,\n base_price: undefined,\n highlights: undefined,\n};\n\n/**\n * @deprecated For new apps, use `createStructuredStore` from `./structured-store`.\n * This flat adapter remains for migration/advanced cases.\n */\nexport function createZustandUnifiedStore(options?: {\n onFilterUpdate?: (apiParams: QueryParams) => void;\n}) {\n return (set: any, get: any): ZustandUnifiedStoreState => {\n return {\n // Initial state\n properties: {},\n currentPropertyId: null,\n currentPropertySlug: null,\n hasPreviouslySearched: [],\n favorite_unit_ids: [],\n unitResults: [],\n filters: { ...defaultFilters },\n tempFilters: { ...defaultFilters },\n apiFilters: {\n limit: 10,\n page: 1,\n sortBy: \"relevance\",\n },\n resultsMode: \"all\",\n resolvedQuestionnaireValues: {},\n sortBy: \"relevance\",\n filtersLoaded: false,\n\n // === PROPERTY OPERATIONS ===\n async initializeProperty(propertyId, slug) {\n const { properties } = get();\n if (properties[propertyId]) {\n set({ currentPropertyId: propertyId, currentPropertySlug: slug });\n return;\n }\n set({\n currentPropertyId: propertyId,\n currentPropertySlug: slug,\n properties: {\n ...properties,\n [propertyId]: {\n id: propertyId,\n slug,\n tourContactedOn: null,\n viewedUnits: [],\n questionnaireResults: null,\n tourContactData: null,\n },\n },\n });\n },\n\n async setCurrentProperty(propertyId, slug) {\n set({\n currentPropertyId: propertyId,\n ...(slug && { currentPropertySlug: slug }),\n });\n },\n\n async setCurrentPropertySlug(slug) {\n set({ currentPropertySlug: slug });\n },\n\n async setHasPreviouslySearched(slug) {\n const { hasPreviouslySearched } = get();\n set({\n hasPreviouslySearched: Array.from(new Set([...hasPreviouslySearched, slug])),\n });\n },\n\n async setFavoriteUnitIds(unitIds) {\n set({ favorite_unit_ids: unitIds });\n },\n\n async toggleFavorite(unitId) {\n const { favorite_unit_ids } = get();\n const isFavorited = favorite_unit_ids.includes(unitId);\n set({\n favorite_unit_ids: isFavorited\n ? favorite_unit_ids.filter((id: string) => id !== unitId)\n : [...favorite_unit_ids, unitId],\n });\n },\n\n async markUnitAsViewed(unitId, url) {\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n const today = new Date();\n const formattedDate = `${String(today.getMonth() + 1).padStart(2, \"0\")}/${String(today.getDate()).padStart(2, \"0\")}`;\n const { currentPropertyId, properties } = get();\n if (!currentPropertyId || !properties[currentPropertyId]) return;\n const property = properties[currentPropertyId];\n set({\n properties: {\n ...properties,\n [currentPropertyId]: {\n ...property,\n viewedUnits: [\n ...property.viewedUnits.filter((u: any) => u.unitId !== unitId),\n { unitId, viewedDate: formattedDate },\n ],\n },\n },\n });\n },\n\n async setTourContactedOn() {\n const { currentPropertyId, properties } = get();\n if (!currentPropertyId || !properties[currentPropertyId]) return;\n set({\n properties: {\n ...properties,\n [currentPropertyId]: {\n ...properties[currentPropertyId],\n tourContactedOn: new Date().toISOString(),\n },\n },\n });\n },\n\n async getTourContactedOn() {\n const { currentPropertyId, properties } = get();\n if (!currentPropertyId) return null;\n return properties[currentPropertyId]?.tourContactedOn ?? null;\n },\n\n async setQuestionnaireResults(results) {\n const { currentPropertyId, properties } = get();\n if (!currentPropertyId || !properties[currentPropertyId]) return;\n set({\n properties: {\n ...properties,\n [currentPropertyId]: { ...properties[currentPropertyId], questionnaireResults: results },\n },\n });\n },\n\n async setTourContactData(data) {\n const { currentPropertyId, properties } = get();\n if (!currentPropertyId || !properties[currentPropertyId]) return;\n set({\n properties: {\n ...properties,\n [currentPropertyId]: { ...properties[currentPropertyId], tourContactData: data },\n },\n });\n },\n\n async setUnitResults(units: unknown) {\n const collection = Array.isArray(units)\n ? units\n : units && typeof units === \"object\"\n ? Object.values(units as Record<string, unknown>)\n : [];\n const validatedUnits: Unit[] = [];\n collection.forEach((unit: unknown, index: number) => {\n const parsed = validate(UnitSchema, unit, `unitResults[${index}]`);\n if (parsed) validatedUnits.push(parsed as Unit);\n });\n set({ unitResults: validatedUnits });\n },\n\n async clearUnitResults() {\n set({ unitResults: [] });\n },\n\n // === FILTER OPERATIONS ===\n async setFilters(filters) {\n const { filters: current } = get();\n set({ filters: { ...current, ...filters } });\n },\n\n async setTempFilters(filters) {\n const { tempFilters } = get();\n set({ tempFilters: { ...tempFilters, ...filters } });\n },\n\n async setFiltersToDefault() {\n set({ filters: { ...defaultFilters } });\n },\n\n async setApiFilters(filters) {\n const { apiFilters } = get();\n set({ apiFilters: { ...apiFilters, ...filters } });\n },\n\n async handleTempFilterChange(key, value) {\n const { tempFilters } = get();\n set({ tempFilters: { ...tempFilters, [key]: value } });\n },\n\n async submitFilterUpdate() {\n const state = get();\n const apiParams = transformFiltersToUnitsSearchParams(\n {\n ...state.filters,\n limit: state.apiFilters.limit,\n page: state.apiFilters.page,\n sortBy: state.sortBy,\n },\n {\n defaultLimit: state.apiFilters.limit,\n defaultPage: state.apiFilters.page,\n defaultSort: state.sortBy,\n },\n );\n set({ apiFilters: apiParams });\n options?.onFilterUpdate?.(apiParams);\n },\n\n // === RESULTS AND SORTING ===\n async setResultsMode(mode) {\n set({ resultsMode: mode });\n },\n\n async setSortBy(sortBy) {\n set({ sortBy });\n },\n\n // === QUESTIONNAIRE ===\n async setResolvedQuestionnaireValues(name, values) {\n const { resolvedQuestionnaireValues } = get();\n set({\n resolvedQuestionnaireValues: {\n ...resolvedQuestionnaireValues,\n [name]: values,\n },\n });\n },\n\n // === UTILITY METHODS ===\n async getResultsUrl() {\n const { currentPropertySlug } = get();\n return currentPropertySlug ? `/${currentPropertySlug}/results` : null;\n },\n\n async getCurrentProperty() {\n const { currentPropertyId, properties } = get();\n return currentPropertyId ? properties[currentPropertyId] ?? null : null;\n },\n\n async getPropertyData(propertyId) {\n const { currentPropertyId, properties } = get();\n const id = propertyId ?? currentPropertyId;\n return id ? properties[id] ?? null : null;\n },\n\n // === INTERNAL ===\n async _hydrate() {\n // No-op: state is seeded from API (bootstrap), not from IndexedDB.\n },\n\n async _initialize() {\n // No IndexedDB sync needed. Mark filters as loaded so the UI unblocks.\n set({ filtersLoaded: true });\n },\n };\n };\n}\n\n// Export types for consuming apps\nexport type { UnitData, UserPropertyState, Filters, QueryParams, ResultsMode, SortBy, TourContactData, Unit } from \"../schema\";\n\n// Intentionally no alias exports in vNext; use `createStructuredStore` or `createZustandUnifiedStore` explicitly.\n"],"names":["defaultFilters","createZustandUnifiedStore","options","set","get","propertyId","slug","properties","hasPreviouslySearched","unitIds","unitId","favorite_unit_ids","isFavorited","id","url","today","formattedDate","currentPropertyId","property","u","_a","results","data","units","collection","validatedUnits","unit","index","parsed","validate","UnitSchema","filters","current","tempFilters","apiFilters","key","value","state","apiParams","transformFiltersToUnitsSearchParams","mode","sortBy","name","values","resolvedQuestionnaireValues","currentPropertySlug"],"mappings":"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"}
1
+ {"version":3,"file":"zustand-store.mjs","sources":["../../src/adapters/zustand-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { devtools } from \"zustand/middleware\";\nimport { transformFiltersToUnitsSearchParams } from \"../features/filters/transformers\";\nimport type { Filters, QueryParams } from \"../schema\";\n\nexport interface InResiOrmStore {\n currentPropertyId: string | null;\n filters: Filters;\n tempFilters: Filters;\n apiFilters: QueryParams;\n\n setCurrentPropertyId: (propertyId: string) => Promise<void>;\n setTempFilters: (filters: Partial<Filters>) => Promise<void>;\n setFiltersToDefault: () => Promise<void>;\n setApiFilters: (filters: Partial<QueryParams>) => Promise<void>;\n handleTempFilterChange: <K extends keyof Filters>(key: K, value: Filters[K]) => Promise<void>;\n submitFilterUpdate: () => Promise<void>;\n}\n\nconst defaultFilters: Filters = {\n date_availability: undefined,\n qty_bedrooms: undefined,\n base_price: undefined,\n highlights: undefined,\n};\n\nfunction createInResiOrmStore(options?: {\n onFilterUpdate?: (apiParams: QueryParams) => void;\n}) {\n return (set: any, get: any): InResiOrmStore => ({\n currentPropertyId: null,\n filters: { ...defaultFilters },\n tempFilters: { ...defaultFilters },\n apiFilters: { limit: 10, page: 1, sortBy: \"relevance\" },\n\n async setCurrentPropertyId(propertyId) {\n set({ currentPropertyId: propertyId });\n },\n\n async setTempFilters(filters) {\n const { tempFilters } = get();\n set({ tempFilters: { ...tempFilters, ...filters } });\n },\n\n async setFiltersToDefault() {\n set({ filters: { ...defaultFilters } });\n },\n\n async setApiFilters(filters) {\n const { apiFilters } = get();\n set({ apiFilters: { ...apiFilters, ...filters } });\n },\n\n async handleTempFilterChange(key, value) {\n const { tempFilters } = get();\n set({ tempFilters: { ...tempFilters, [key]: value } });\n },\n\n async submitFilterUpdate() {\n const state = get();\n const sortBy = state.apiFilters.sortBy;\n const apiParams = transformFiltersToUnitsSearchParams(\n {\n ...state.filters,\n limit: state.apiFilters.limit,\n page: state.apiFilters.page,\n sortBy,\n },\n {\n defaultLimit: state.apiFilters.limit,\n defaultPage: state.apiFilters.page,\n defaultSort: sortBy,\n },\n );\n set({ apiFilters: apiParams });\n options?.onFilterUpdate?.(apiParams);\n },\n });\n}\n\nexport const useInResiStore = create<InResiOrmStore>()(\n devtools(createInResiOrmStore(), { name: \"inResi-orm-store\" })\n);\n\n"],"names":["defaultFilters","createInResiOrmStore","options","set","get","propertyId","filters","tempFilters","apiFilters","key","value","state","sortBy","apiParams","transformFiltersToUnitsSearchParams","useInResiStore","create","devtools"],"mappings":";;;AAmBA,MAAMA,IAA0B;AAAA,EAC9B,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,YAAY;AACd;AAEA,SAASC,EAAqBC,GAE3B;AACD,SAAO,CAACC,GAAUC,OAA8B;AAAA,IAC9C,mBAAmB;AAAA,IACnB,SAAS,EAAE,GAAGJ,EAAA;AAAA,IACd,aAAa,EAAE,GAAGA,EAAA;AAAA,IAClB,YAAY,EAAE,OAAO,IAAI,MAAM,GAAG,QAAQ,YAAA;AAAA,IAE1C,MAAM,qBAAqBK,GAAY;AACrC,MAAAF,EAAI,EAAE,mBAAmBE,GAAY;AAAA,IACvC;AAAA,IAEA,MAAM,eAAeC,GAAS;AAC5B,YAAM,EAAE,aAAAC,EAAA,IAAgBH,EAAA;AACxB,MAAAD,EAAI,EAAE,aAAa,EAAE,GAAGI,GAAa,GAAGD,EAAA,GAAW;AAAA,IACrD;AAAA,IAEA,MAAM,sBAAsB;AAC1B,MAAAH,EAAI,EAAE,SAAS,EAAE,GAAGH,EAAA,GAAkB;AAAA,IACxC;AAAA,IAEA,MAAM,cAAcM,GAAS;AAC3B,YAAM,EAAE,YAAAE,EAAA,IAAeJ,EAAA;AACvB,MAAAD,EAAI,EAAE,YAAY,EAAE,GAAGK,GAAY,GAAGF,EAAA,GAAW;AAAA,IACnD;AAAA,IAEA,MAAM,uBAAuBG,GAAKC,GAAO;AACvC,YAAM,EAAE,aAAAH,EAAA,IAAgBH,EAAA;AACxB,MAAAD,EAAI,EAAE,aAAa,EAAE,GAAGI,GAAa,CAACE,CAAG,GAAGC,EAAA,GAAS;AAAA,IACvD;AAAA,IAEA,MAAM,qBAAqB;AACzB,YAAMC,IAAQP,EAAA,GACRQ,IAASD,EAAM,WAAW,QAC1BE,IAAYC;AAAA,QAChB;AAAA,UACE,GAAGH,EAAM;AAAA,UACT,OAAOA,EAAM,WAAW;AAAA,UACxB,MAAMA,EAAM,WAAW;AAAA,UACvB,QAAAC;AAAA,QAAA;AAAA,QAEF;AAAA,UACE,cAAcD,EAAM,WAAW;AAAA,UAC/B,aAAaA,EAAM,WAAW;AAAA,UAC9B,aAAaC;AAAA,QAAA;AAAA,MACf;AAEF,MAAAT,EAAI,EAAE,YAAYU,GAAW;AAAA,IAE/B;AAAA,EAAA;AAEJ;AAEO,MAAME,IAAiBC,EAAA;AAAA,EAC5BC,EAAShB,EAAA,GAAwB,EAAE,MAAM,oBAAoB;AAC/D;"}
@@ -19,9 +19,9 @@ export declare const FurnitureModel: z.ZodObject<{
19
19
  status: Status;
20
20
  id: number;
21
21
  name: string;
22
+ price: string;
22
23
  category: string;
23
24
  availability: FurnitureAvailability;
24
- price: string;
25
25
  currency: Currency;
26
26
  brand_name: string;
27
27
  store_name: string;
@@ -34,9 +34,9 @@ export declare const FurnitureModel: z.ZodObject<{
34
34
  status: Status;
35
35
  id: number;
36
36
  name: string;
37
+ price: string;
37
38
  category: string;
38
39
  availability: FurnitureAvailability;
39
- price: string;
40
40
  currency: Currency;
41
41
  brand_name: string;
42
42
  store_name: string;
@@ -10,6 +10,5 @@ export * from "./unit";
10
10
  export * from "./enums";
11
11
  export * from "./renderedstyle";
12
12
  export * from "./propertyamenity";
13
- export * from "./favoriteunit";
14
13
  export * from "./user";
15
14
  export * from "./propertylink";
@@ -11,15 +11,15 @@ export declare const VisitorQuestionnaireModel: z.ZodObject<{
11
11
  createdAt: z.ZodDate;
12
12
  }, "strip", z.ZodTypeAny, {
13
13
  createdAt: Date;
14
- data: Json;
15
14
  id: number;
16
15
  propertyId: number;
16
+ data: Json;
17
17
  visitorId: string;
18
18
  }, {
19
19
  createdAt: Date;
20
- data: Json;
21
20
  id: number;
22
21
  propertyId: number;
22
+ data: Json;
23
23
  visitorId: string;
24
24
  }>;
25
25
  export {};
package/dist/db.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("./adapters/dexie.cjs"),D=require("./errors.cjs"),m=require("./schema.cjs"),v=require("./validation.cjs"),_=require("./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs");var k=typeof document<"u"?document.currentScript:null;const E={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},w="manifest",b=_.object({schemaVersion:_.number().int()});let o=null,f=null;const g=Symbol("validationInstalled");function R(e,a){const l=e;if(l[g])return;if(l[g]=!0,((d,c,n)=>{d.hook("creating",(t,u)=>{const i=v.validate(c,u,`${n}.creating`);if(!i)throw new Error(`Rejected invalid ${n} on create`);return i}),d.hook("updating",(t,u,i)=>{const r={...i,...t};return v.validate(c,r,`${n}.updating`)?t:{}})})(e.users,m.UserSchema,"users"),(a==null?void 0:a.validateReads)??!0){const d=(a==null?void 0:a.dropInvalidOnRead)??!0;((n,t,u)=>{n.hook("reading",i=>{const r=v.validate(t,i,`${u}.reading`);return r||(d?void 0:i)})})(e.users,m.UserSchema,"users")}}function I(){try{if(typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:k&&k.tagName.toUpperCase()==="SCRIPT"&&k.src||new URL("db.cjs",document.baseURI).href}<"u"&&E)return!1}catch{}try{if(typeof process<"u"&&process.env)return process.env.NODE_ENV!=="production"}catch{}return!1}async function V(e={}){if(o)return o;if(f)return f;const a=e.dbName??"inresi-orm";return f=(async()=>{var l,h,y,d;try{const c=I()?"warn":"strict";v.configureValidation({mode:((l=e.validation)==null?void 0:l.mode)??c,onIssue:(h=e.validation)==null?void 0:h.onIssue});const n=new S.OrmDexie(a);n.on("versionchange",()=>{var r;try{n.close()}finally{(r=e.onReset)==null||r.call(e,"versionchange")}}),n.on("blocked",()=>{var r;(r=e.onReset)==null||r.call(e,"blocked")}),await n.open();const t=await n.kv.get(w),u=(t==null?void 0:t.value)??null;if(!u)return await n.transaction("rw",n.kv,async()=>{await n.kv.put({key:w,value:{schemaVersion:m.SCHEMA_VERSION}})}),R(n,e.validation),o=n,n;const i=b.safeParse(u);if(!i.success||i.data.schemaVersion!==m.SCHEMA_VERSION){await n.delete();const r=new S.OrmDexie(a);return r.on("versionchange",()=>{var s;try{r.close()}finally{(s=e.onReset)==null||s.call(e,"versionchange")}}),r.on("blocked",()=>{var s;(s=e.onReset)==null||s.call(e,"blocked")}),await r.open(),await r.kv.put({key:w,value:{schemaVersion:m.SCHEMA_VERSION}}),R(r,e.validation),(y=e.onReset)==null||y.call(e,"incompatible"),o=r,r}return R(n,e.validation),o=n,n}catch(c){throw(d=e.onError)==null||d.call(e,c),new D.OpenDBError("Failed to open IndexedDB",c)}finally{f=null}})(),f}async function O(e){const a=e??"inresi-orm";if(o)try{await o.close()}catch{}await new S.OrmDexie(a).delete(),o=null}exports.getDB=V;exports.resetDB=O;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("./adapters/dexie.cjs"),E=require("./errors.cjs"),u=require("./schema.cjs"),R=require("./validation.cjs"),D=require("./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs");var d=typeof document<"u"?document.currentScript:null;const I={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},f="manifest",O=D.object({schemaVersion:D.number().int()});let a=null,o=null;const w=Symbol("validationInstalled");function m(e,t){const i=e;i[w]||(i[w]=!0)}function V(){try{if(typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:d&&d.tagName.toUpperCase()==="SCRIPT"&&d.src||new URL("db.cjs",document.baseURI).href}<"u"&&I)return!1}catch{}try{if(typeof process<"u"&&process.env)return process.env.NODE_ENV!=="production"}catch{}return!1}async function g(e={}){if(a)return a;if(o)return o;const t=e.dbName??"inresi-orm";return o=(async()=>{var i,y,h,S;try{const l=V()?"warn":"strict";R.configureValidation({mode:((i=e.validation)==null?void 0:i.mode)??l,onIssue:(y=e.validation)==null?void 0:y.onIssue});const n=new v.OrmDexie(t);n.on("versionchange",()=>{var r;try{n.close()}finally{(r=e.onReset)==null||r.call(e,"versionchange")}}),n.on("blocked",()=>{var r;(r=e.onReset)==null||r.call(e,"blocked")}),await n.open();const s=await n.kv.get(f),_=(s==null?void 0:s.value)??null;if(!_)return await n.transaction("rw",n.kv,async()=>{await n.kv.put({key:f,value:{schemaVersion:u.SCHEMA_VERSION}})}),m(n,e.validation),a=n,n;const b=O.safeParse(_);if(!b.success||b.data.schemaVersion!==u.SCHEMA_VERSION){await n.delete();const r=new v.OrmDexie(t);return r.on("versionchange",()=>{var c;try{r.close()}finally{(c=e.onReset)==null||c.call(e,"versionchange")}}),r.on("blocked",()=>{var c;(c=e.onReset)==null||c.call(e,"blocked")}),await r.open(),await r.kv.put({key:f,value:{schemaVersion:u.SCHEMA_VERSION}}),m(r,e.validation),(h=e.onReset)==null||h.call(e,"incompatible"),a=r,r}return m(n,e.validation),a=n,n}catch(l){throw(S=e.onError)==null||S.call(e,l),new E.OpenDBError("Failed to open IndexedDB",l)}finally{o=null}})(),o}async function k(e){const t=e??"inresi-orm";if(a)try{await a.close()}catch{}await new v.OrmDexie(t).delete(),a=null}exports.getDB=g;exports.resetDB=k;
2
2
  //# sourceMappingURL=db.cjs.map
package/dist/db.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.cjs","sources":["../src/db.ts"],"sourcesContent":["// src/db.ts\nimport { OrmDexie } from \"./adapters/dexie\";\nimport { OpenDBError } from \"./errors\";\nimport { SCHEMA_VERSION, UserSchema } from \"./schema\";\nimport {\n validate,\n configureValidation,\n type ValidationMode,\n} from \"./validation\";\nimport type { Table } from \"dexie\";\nimport { z } from \"zod\";\n\nconst MANIFEST_KEY = \"manifest\";\nconst ManifestSchema = z.object({ schemaVersion: z.number().int() });\ntype Manifest = z.infer<typeof ManifestSchema>;\n\nexport type OrmOptions = {\n dbName?: string;\n onReset?: (reason: \"incompatible\" | \"versionchange\" | \"blocked\") => void;\n onError?: (err: unknown) => void;\n validation?: {\n mode?: ValidationMode; // 'strict' | 'warn' | 'silent'\n onIssue?: (ctx: string, details: unknown) => void;\n validateReads?: boolean; // default: true\n dropInvalidOnRead?: boolean; // default: true (when validateReads)\n };\n};\n\nlet db: OrmDexie | null = null;\nlet openPromise: Promise<OrmDexie> | null = null;\n\n// Prevent double-installing hooks on the same instance\nconst VALIDATION_INSTALLED = Symbol(\"validationInstalled\");\n\nfunction installValidationHooks(\n instance: OrmDexie,\n vopts: OrmOptions[\"validation\"] | undefined,\n) {\n const anyDb = instance as any;\n if (anyDb[VALIDATION_INSTALLED]) return;\n anyDb[VALIDATION_INSTALLED] = true;\n\n const writeHook = <T>(table: Table<T, any>, schema: any, name: string) => {\n table.hook(\"creating\", (_pk, obj) => {\n const v = validate(schema, obj, `${name}.creating`);\n if (!v) throw new Error(`Rejected invalid ${name} on create`);\n return v as T; // allow coercion/stripping\n });\n table.hook(\"updating\", (mods, _pk, obj) => {\n const next = { ...(obj as any), ...(mods as any) };\n const v = validate(schema, next, `${name}.updating`);\n if (!v) return {}; // cancel update in warn/silent\n return mods;\n });\n };\n\n writeHook(instance.users, UserSchema, \"users\");\n\n const shouldValidateReads = vopts?.validateReads ?? true;\n if (shouldValidateReads) {\n const dropInvalid = vopts?.dropInvalidOnRead ?? true;\n const readHook = <T>(table: Table<T, any>, schema: any, name: string) => {\n table.hook(\"reading\", (obj) => {\n const v = validate(schema, obj, `${name}.reading`);\n if (v) return v;\n return dropInvalid ? undefined : obj; // pass-through if you prefer\n });\n };\n readHook(instance.users, UserSchema, \"users\");\n }\n}\n\nfunction isProbablyDev(): boolean {\n try {\n // @ts-ignore\n if (typeof import.meta !== \"undefined\" && import.meta.env)\n // @ts-ignore\n return !!import.meta.env.DEV;\n } catch {}\n try {\n if (typeof process !== \"undefined\" && process.env)\n return process.env.NODE_ENV !== \"production\";\n } catch {}\n return false;\n}\n\nexport async function getDB(opts: OrmOptions = {}): Promise<OrmDexie> {\n if (db) return db;\n if (openPromise) return openPromise;\n\n const name = opts.dbName ?? \"inresi-orm\";\n\n openPromise = (async () => {\n try {\n // Configure validation once per open\n const defaultMode: ValidationMode = isProbablyDev() ? \"warn\" : \"strict\";\n configureValidation({\n mode: opts.validation?.mode ?? defaultMode,\n onIssue: opts.validation?.onIssue,\n });\n\n const instance = new OrmDexie(name);\n\n // Multi-tab friendliness\n instance.on(\"versionchange\", () => {\n try {\n instance.close();\n } finally {\n opts.onReset?.(\"versionchange\");\n }\n });\n instance.on(\"blocked\", () => {\n opts.onReset?.(\"blocked\");\n });\n\n await instance.open();\n\n // Validate/initialize manifest\n const row = await instance.kv.get(MANIFEST_KEY);\n const saved = (row?.value ?? null) as unknown;\n\n if (!saved) {\n await instance.transaction(\"rw\", instance.kv, async () => {\n await instance.kv.put({\n key: MANIFEST_KEY,\n value: { schemaVersion: SCHEMA_VERSION },\n });\n });\n installValidationHooks(instance, opts.validation);\n db = instance;\n return instance;\n }\n\n const parsed = ManifestSchema.safeParse(saved as Manifest);\n if (!parsed.success || parsed.data.schemaVersion !== SCHEMA_VERSION) {\n await instance.delete();\n const fresh = new OrmDexie(name);\n fresh.on(\"versionchange\", () => {\n try {\n fresh.close();\n } finally {\n opts.onReset?.(\"versionchange\");\n }\n });\n fresh.on(\"blocked\", () => {\n opts.onReset?.(\"blocked\");\n });\n await fresh.open();\n await fresh.kv.put({\n key: MANIFEST_KEY,\n value: { schemaVersion: SCHEMA_VERSION },\n });\n installValidationHooks(fresh, opts.validation);\n opts.onReset?.(\"incompatible\");\n db = fresh;\n return fresh;\n }\n\n installValidationHooks(instance, opts.validation);\n db = instance;\n return instance;\n } catch (e) {\n opts.onError?.(e);\n throw new OpenDBError(\"Failed to open IndexedDB\", e);\n } finally {\n openPromise = null; // allow future reuse/retry\n }\n })();\n\n return openPromise;\n}\n\nexport async function resetDB(dbName?: string) {\n const name = dbName ?? \"inresi-orm\";\n if (db) {\n try {\n await db.close();\n } catch {\n /* ignore */\n }\n }\n const instance = new OrmDexie(name);\n await instance.delete();\n db = null;\n}\n"],"names":["MANIFEST_KEY","ManifestSchema","z.object","z.number","db","openPromise","VALIDATION_INSTALLED","installValidationHooks","instance","vopts","anyDb","table","schema","name","_pk","obj","v","validate","mods","next","UserSchema","dropInvalid","isProbablyDev","_documentCurrentScript","__vite_import_meta_env__","getDB","opts","defaultMode","configureValidation","_a","_b","OrmDexie","row","saved","SCHEMA_VERSION","parsed","fresh","_c","e","_d","OpenDBError","resetDB","dbName"],"mappings":"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"}
1
+ {"version":3,"file":"db.cjs","sources":["../src/db.ts"],"sourcesContent":["// src/db.ts\nimport { OrmDexie } from \"./adapters/dexie\";\nimport { OpenDBError } from \"./errors\";\nimport { SCHEMA_VERSION } from \"./schema\";\nimport {\n configureValidation,\n type ValidationMode,\n} from \"./validation\";\nimport { z } from \"zod\";\n\nconst MANIFEST_KEY = \"manifest\";\nconst ManifestSchema = z.object({ schemaVersion: z.number().int() });\ntype Manifest = z.infer<typeof ManifestSchema>;\n\nexport type OrmOptions = {\n dbName?: string;\n onReset?: (reason: \"incompatible\" | \"versionchange\" | \"blocked\") => void;\n onError?: (err: unknown) => void;\n validation?: {\n mode?: ValidationMode; // 'strict' | 'warn' | 'silent'\n onIssue?: (ctx: string, details: unknown) => void;\n validateReads?: boolean; // default: true\n dropInvalidOnRead?: boolean; // default: true (when validateReads)\n };\n};\n\nlet db: OrmDexie | null = null;\nlet openPromise: Promise<OrmDexie> | null = null;\n\n// Prevent double-installing hooks on the same instance\nconst VALIDATION_INSTALLED = Symbol(\"validationInstalled\");\n\nfunction installValidationHooks(\n instance: OrmDexie,\n _vopts: OrmOptions[\"validation\"] | undefined,\n) {\n const anyDb = instance as any;\n if (anyDb[VALIDATION_INSTALLED]) return;\n anyDb[VALIDATION_INSTALLED] = true;\n}\n\nfunction isProbablyDev(): boolean {\n try {\n // @ts-ignore\n if (typeof import.meta !== \"undefined\" && import.meta.env)\n // @ts-ignore\n return !!import.meta.env.DEV;\n } catch {}\n try {\n if (typeof process !== \"undefined\" && process.env)\n return process.env.NODE_ENV !== \"production\";\n } catch {}\n return false;\n}\n\nexport async function getDB(opts: OrmOptions = {}): Promise<OrmDexie> {\n if (db) return db;\n if (openPromise) return openPromise;\n\n const name = opts.dbName ?? \"inresi-orm\";\n\n openPromise = (async () => {\n try {\n // Configure validation once per open\n const defaultMode: ValidationMode = isProbablyDev() ? \"warn\" : \"strict\";\n configureValidation({\n mode: opts.validation?.mode ?? defaultMode,\n onIssue: opts.validation?.onIssue,\n });\n\n const instance = new OrmDexie(name);\n\n // Multi-tab friendliness\n instance.on(\"versionchange\", () => {\n try {\n instance.close();\n } finally {\n opts.onReset?.(\"versionchange\");\n }\n });\n instance.on(\"blocked\", () => {\n opts.onReset?.(\"blocked\");\n });\n\n await instance.open();\n\n // Validate/initialize manifest\n const row = await instance.kv.get(MANIFEST_KEY);\n const saved = (row?.value ?? null) as unknown;\n\n if (!saved) {\n await instance.transaction(\"rw\", instance.kv, async () => {\n await instance.kv.put({\n key: MANIFEST_KEY,\n value: { schemaVersion: SCHEMA_VERSION },\n });\n });\n installValidationHooks(instance, opts.validation);\n db = instance;\n return instance;\n }\n\n const parsed = ManifestSchema.safeParse(saved as Manifest);\n if (!parsed.success || parsed.data.schemaVersion !== SCHEMA_VERSION) {\n await instance.delete();\n const fresh = new OrmDexie(name);\n fresh.on(\"versionchange\", () => {\n try {\n fresh.close();\n } finally {\n opts.onReset?.(\"versionchange\");\n }\n });\n fresh.on(\"blocked\", () => {\n opts.onReset?.(\"blocked\");\n });\n await fresh.open();\n await fresh.kv.put({\n key: MANIFEST_KEY,\n value: { schemaVersion: SCHEMA_VERSION },\n });\n installValidationHooks(fresh, opts.validation);\n opts.onReset?.(\"incompatible\");\n db = fresh;\n return fresh;\n }\n\n installValidationHooks(instance, opts.validation);\n db = instance;\n return instance;\n } catch (e) {\n opts.onError?.(e);\n throw new OpenDBError(\"Failed to open IndexedDB\", e);\n } finally {\n openPromise = null; // allow future reuse/retry\n }\n })();\n\n return openPromise;\n}\n\nexport async function resetDB(dbName?: string) {\n const name = dbName ?? \"inresi-orm\";\n if (db) {\n try {\n await db.close();\n } catch {\n /* ignore */\n }\n }\n const instance = new OrmDexie(name);\n await instance.delete();\n db = null;\n}\n"],"names":["MANIFEST_KEY","ManifestSchema","z.object","z.number","db","openPromise","VALIDATION_INSTALLED","installValidationHooks","instance","_vopts","anyDb","isProbablyDev","_documentCurrentScript","__vite_import_meta_env__","getDB","opts","name","defaultMode","configureValidation","_a","_b","OrmDexie","row","saved","SCHEMA_VERSION","parsed","fresh","_c","e","_d","OpenDBError","resetDB","dbName"],"mappings":"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"}
package/dist/db.mjs CHANGED
@@ -1,34 +1,16 @@
1
- import { OrmDexie as R } from "./adapters/dexie.mjs";
2
- import { OpenDBError as g } from "./errors.mjs";
3
- import { SCHEMA_VERSION as y, UserSchema as _ } from "./schema.mjs";
4
- import { configureValidation as D, validate as h } from "./validation.mjs";
5
- import { object as E, number as V } from "./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.mjs";
6
- const I = { BASE_URL: "/", DEV: !1, MODE: "production", PROD: !0, SSR: !1 }, k = "manifest", S = E({ schemaVersion: V().int() });
7
- let c = null, f = null;
8
- const b = Symbol("validationInstalled");
9
- function w(e, a) {
10
- const u = e;
11
- if (u[b]) return;
12
- if (u[b] = !0, ((l, o, n) => {
13
- l.hook("creating", (t, d) => {
14
- const i = h(o, d, `${n}.creating`);
15
- if (!i) throw new Error(`Rejected invalid ${n} on create`);
16
- return i;
17
- }), l.hook("updating", (t, d, i) => {
18
- const r = { ...i, ...t };
19
- return h(o, r, `${n}.updating`) ? t : {};
20
- });
21
- })(e.users, _, "users"), (a == null ? void 0 : a.validateReads) ?? !0) {
22
- const l = (a == null ? void 0 : a.dropInvalidOnRead) ?? !0;
23
- ((n, t, d) => {
24
- n.hook("reading", (i) => {
25
- const r = h(t, i, `${d}.reading`);
26
- return r || (l ? void 0 : i);
27
- });
28
- })(e.users, _, "users");
29
- }
1
+ import { OrmDexie as m } from "./adapters/dexie.mjs";
2
+ import { OpenDBError as _ } from "./errors.mjs";
3
+ import { SCHEMA_VERSION as u } from "./schema.mjs";
4
+ import { configureValidation as E } from "./validation.mjs";
5
+ import { object as k, number as V } from "./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.mjs";
6
+ const I = { BASE_URL: "/", DEV: !1, MODE: "production", PROD: !0, SSR: !1 }, f = "manifest", R = k({ schemaVersion: V().int() });
7
+ let i = null, c = null;
8
+ const D = Symbol("validationInstalled");
9
+ function d(e, t) {
10
+ const r = e;
11
+ r[D] || (r[D] = !0);
30
12
  }
31
- function O() {
13
+ function S() {
32
14
  try {
33
15
  if (typeof import.meta < "u" && I)
34
16
  return !1;
@@ -41,76 +23,76 @@ function O() {
41
23
  }
42
24
  return !1;
43
25
  }
44
- async function T(e = {}) {
26
+ async function M(e = {}) {
27
+ if (i) return i;
45
28
  if (c) return c;
46
- if (f) return f;
47
- const a = e.dbName ?? "inresi-orm";
48
- return f = (async () => {
49
- var u, m, v, l;
29
+ const t = e.dbName ?? "inresi-orm";
30
+ return c = (async () => {
31
+ var r, v, y, b;
50
32
  try {
51
- const o = O() ? "warn" : "strict";
52
- D({
53
- mode: ((u = e.validation) == null ? void 0 : u.mode) ?? o,
54
- onIssue: (m = e.validation) == null ? void 0 : m.onIssue
33
+ const l = S() ? "warn" : "strict";
34
+ E({
35
+ mode: ((r = e.validation) == null ? void 0 : r.mode) ?? l,
36
+ onIssue: (v = e.validation) == null ? void 0 : v.onIssue
55
37
  });
56
- const n = new R(a);
38
+ const n = new m(t);
57
39
  n.on("versionchange", () => {
58
- var r;
40
+ var a;
59
41
  try {
60
42
  n.close();
61
43
  } finally {
62
- (r = e.onReset) == null || r.call(e, "versionchange");
44
+ (a = e.onReset) == null || a.call(e, "versionchange");
63
45
  }
64
46
  }), n.on("blocked", () => {
65
- var r;
66
- (r = e.onReset) == null || r.call(e, "blocked");
47
+ var a;
48
+ (a = e.onReset) == null || a.call(e, "blocked");
67
49
  }), await n.open();
68
- const t = await n.kv.get(k), d = (t == null ? void 0 : t.value) ?? null;
69
- if (!d)
50
+ const s = await n.kv.get(f), h = (s == null ? void 0 : s.value) ?? null;
51
+ if (!h)
70
52
  return await n.transaction("rw", n.kv, async () => {
71
53
  await n.kv.put({
72
- key: k,
73
- value: { schemaVersion: y }
54
+ key: f,
55
+ value: { schemaVersion: u }
74
56
  });
75
- }), w(n, e.validation), c = n, n;
76
- const i = S.safeParse(d);
77
- if (!i.success || i.data.schemaVersion !== y) {
57
+ }), d(n, e.validation), i = n, n;
58
+ const w = R.safeParse(h);
59
+ if (!w.success || w.data.schemaVersion !== u) {
78
60
  await n.delete();
79
- const r = new R(a);
80
- return r.on("versionchange", () => {
81
- var s;
61
+ const a = new m(t);
62
+ return a.on("versionchange", () => {
63
+ var o;
82
64
  try {
83
- r.close();
65
+ a.close();
84
66
  } finally {
85
- (s = e.onReset) == null || s.call(e, "versionchange");
67
+ (o = e.onReset) == null || o.call(e, "versionchange");
86
68
  }
87
- }), r.on("blocked", () => {
88
- var s;
89
- (s = e.onReset) == null || s.call(e, "blocked");
90
- }), await r.open(), await r.kv.put({
91
- key: k,
92
- value: { schemaVersion: y }
93
- }), w(r, e.validation), (v = e.onReset) == null || v.call(e, "incompatible"), c = r, r;
69
+ }), a.on("blocked", () => {
70
+ var o;
71
+ (o = e.onReset) == null || o.call(e, "blocked");
72
+ }), await a.open(), await a.kv.put({
73
+ key: f,
74
+ value: { schemaVersion: u }
75
+ }), d(a, e.validation), (y = e.onReset) == null || y.call(e, "incompatible"), i = a, a;
94
76
  }
95
- return w(n, e.validation), c = n, n;
96
- } catch (o) {
97
- throw (l = e.onError) == null || l.call(e, o), new g("Failed to open IndexedDB", o);
77
+ return d(n, e.validation), i = n, n;
78
+ } catch (l) {
79
+ throw (b = e.onError) == null || b.call(e, l), new _("Failed to open IndexedDB", l);
98
80
  } finally {
99
- f = null;
81
+ c = null;
100
82
  }
101
- })(), f;
83
+ })(), c;
102
84
  }
103
- async function x(e) {
104
- const a = e ?? "inresi-orm";
105
- if (c)
85
+ async function T(e) {
86
+ const t = e ?? "inresi-orm";
87
+ if (i)
106
88
  try {
107
- await c.close();
89
+ await i.close();
108
90
  } catch {
109
91
  }
110
- await new R(a).delete(), c = null;
92
+ await new m(t).delete(), i = null;
111
93
  }
112
94
  export {
113
- T as getDB,
114
- x as resetDB
95
+ M as getDB,
96
+ T as resetDB
115
97
  };
116
98
  //# sourceMappingURL=db.mjs.map
package/dist/db.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.mjs","sources":["../src/db.ts"],"sourcesContent":["// src/db.ts\nimport { OrmDexie } from \"./adapters/dexie\";\nimport { OpenDBError } from \"./errors\";\nimport { SCHEMA_VERSION, UserSchema } from \"./schema\";\nimport {\n validate,\n configureValidation,\n type ValidationMode,\n} from \"./validation\";\nimport type { Table } from \"dexie\";\nimport { z } from \"zod\";\n\nconst MANIFEST_KEY = \"manifest\";\nconst ManifestSchema = z.object({ schemaVersion: z.number().int() });\ntype Manifest = z.infer<typeof ManifestSchema>;\n\nexport type OrmOptions = {\n dbName?: string;\n onReset?: (reason: \"incompatible\" | \"versionchange\" | \"blocked\") => void;\n onError?: (err: unknown) => void;\n validation?: {\n mode?: ValidationMode; // 'strict' | 'warn' | 'silent'\n onIssue?: (ctx: string, details: unknown) => void;\n validateReads?: boolean; // default: true\n dropInvalidOnRead?: boolean; // default: true (when validateReads)\n };\n};\n\nlet db: OrmDexie | null = null;\nlet openPromise: Promise<OrmDexie> | null = null;\n\n// Prevent double-installing hooks on the same instance\nconst VALIDATION_INSTALLED = Symbol(\"validationInstalled\");\n\nfunction installValidationHooks(\n instance: OrmDexie,\n vopts: OrmOptions[\"validation\"] | undefined,\n) {\n const anyDb = instance as any;\n if (anyDb[VALIDATION_INSTALLED]) return;\n anyDb[VALIDATION_INSTALLED] = true;\n\n const writeHook = <T>(table: Table<T, any>, schema: any, name: string) => {\n table.hook(\"creating\", (_pk, obj) => {\n const v = validate(schema, obj, `${name}.creating`);\n if (!v) throw new Error(`Rejected invalid ${name} on create`);\n return v as T; // allow coercion/stripping\n });\n table.hook(\"updating\", (mods, _pk, obj) => {\n const next = { ...(obj as any), ...(mods as any) };\n const v = validate(schema, next, `${name}.updating`);\n if (!v) return {}; // cancel update in warn/silent\n return mods;\n });\n };\n\n writeHook(instance.users, UserSchema, \"users\");\n\n const shouldValidateReads = vopts?.validateReads ?? true;\n if (shouldValidateReads) {\n const dropInvalid = vopts?.dropInvalidOnRead ?? true;\n const readHook = <T>(table: Table<T, any>, schema: any, name: string) => {\n table.hook(\"reading\", (obj) => {\n const v = validate(schema, obj, `${name}.reading`);\n if (v) return v;\n return dropInvalid ? undefined : obj; // pass-through if you prefer\n });\n };\n readHook(instance.users, UserSchema, \"users\");\n }\n}\n\nfunction isProbablyDev(): boolean {\n try {\n // @ts-ignore\n if (typeof import.meta !== \"undefined\" && import.meta.env)\n // @ts-ignore\n return !!import.meta.env.DEV;\n } catch {}\n try {\n if (typeof process !== \"undefined\" && process.env)\n return process.env.NODE_ENV !== \"production\";\n } catch {}\n return false;\n}\n\nexport async function getDB(opts: OrmOptions = {}): Promise<OrmDexie> {\n if (db) return db;\n if (openPromise) return openPromise;\n\n const name = opts.dbName ?? \"inresi-orm\";\n\n openPromise = (async () => {\n try {\n // Configure validation once per open\n const defaultMode: ValidationMode = isProbablyDev() ? \"warn\" : \"strict\";\n configureValidation({\n mode: opts.validation?.mode ?? defaultMode,\n onIssue: opts.validation?.onIssue,\n });\n\n const instance = new OrmDexie(name);\n\n // Multi-tab friendliness\n instance.on(\"versionchange\", () => {\n try {\n instance.close();\n } finally {\n opts.onReset?.(\"versionchange\");\n }\n });\n instance.on(\"blocked\", () => {\n opts.onReset?.(\"blocked\");\n });\n\n await instance.open();\n\n // Validate/initialize manifest\n const row = await instance.kv.get(MANIFEST_KEY);\n const saved = (row?.value ?? null) as unknown;\n\n if (!saved) {\n await instance.transaction(\"rw\", instance.kv, async () => {\n await instance.kv.put({\n key: MANIFEST_KEY,\n value: { schemaVersion: SCHEMA_VERSION },\n });\n });\n installValidationHooks(instance, opts.validation);\n db = instance;\n return instance;\n }\n\n const parsed = ManifestSchema.safeParse(saved as Manifest);\n if (!parsed.success || parsed.data.schemaVersion !== SCHEMA_VERSION) {\n await instance.delete();\n const fresh = new OrmDexie(name);\n fresh.on(\"versionchange\", () => {\n try {\n fresh.close();\n } finally {\n opts.onReset?.(\"versionchange\");\n }\n });\n fresh.on(\"blocked\", () => {\n opts.onReset?.(\"blocked\");\n });\n await fresh.open();\n await fresh.kv.put({\n key: MANIFEST_KEY,\n value: { schemaVersion: SCHEMA_VERSION },\n });\n installValidationHooks(fresh, opts.validation);\n opts.onReset?.(\"incompatible\");\n db = fresh;\n return fresh;\n }\n\n installValidationHooks(instance, opts.validation);\n db = instance;\n return instance;\n } catch (e) {\n opts.onError?.(e);\n throw new OpenDBError(\"Failed to open IndexedDB\", e);\n } finally {\n openPromise = null; // allow future reuse/retry\n }\n })();\n\n return openPromise;\n}\n\nexport async function resetDB(dbName?: string) {\n const name = dbName ?? \"inresi-orm\";\n if (db) {\n try {\n await db.close();\n } catch {\n /* ignore */\n }\n }\n const instance = new OrmDexie(name);\n await instance.delete();\n db = null;\n}\n"],"names":["MANIFEST_KEY","ManifestSchema","z.object","z.number","db","openPromise","VALIDATION_INSTALLED","installValidationHooks","instance","vopts","anyDb","table","schema","name","_pk","obj","v","validate","mods","next","UserSchema","dropInvalid","isProbablyDev","__vite_import_meta_env__","getDB","opts","defaultMode","configureValidation","_a","_b","OrmDexie","row","saved","SCHEMA_VERSION","parsed","fresh","_c","e","_d","OpenDBError","resetDB","dbName"],"mappings":"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"}
1
+ {"version":3,"file":"db.mjs","sources":["../src/db.ts"],"sourcesContent":["// src/db.ts\nimport { OrmDexie } from \"./adapters/dexie\";\nimport { OpenDBError } from \"./errors\";\nimport { SCHEMA_VERSION } from \"./schema\";\nimport {\n configureValidation,\n type ValidationMode,\n} from \"./validation\";\nimport { z } from \"zod\";\n\nconst MANIFEST_KEY = \"manifest\";\nconst ManifestSchema = z.object({ schemaVersion: z.number().int() });\ntype Manifest = z.infer<typeof ManifestSchema>;\n\nexport type OrmOptions = {\n dbName?: string;\n onReset?: (reason: \"incompatible\" | \"versionchange\" | \"blocked\") => void;\n onError?: (err: unknown) => void;\n validation?: {\n mode?: ValidationMode; // 'strict' | 'warn' | 'silent'\n onIssue?: (ctx: string, details: unknown) => void;\n validateReads?: boolean; // default: true\n dropInvalidOnRead?: boolean; // default: true (when validateReads)\n };\n};\n\nlet db: OrmDexie | null = null;\nlet openPromise: Promise<OrmDexie> | null = null;\n\n// Prevent double-installing hooks on the same instance\nconst VALIDATION_INSTALLED = Symbol(\"validationInstalled\");\n\nfunction installValidationHooks(\n instance: OrmDexie,\n _vopts: OrmOptions[\"validation\"] | undefined,\n) {\n const anyDb = instance as any;\n if (anyDb[VALIDATION_INSTALLED]) return;\n anyDb[VALIDATION_INSTALLED] = true;\n}\n\nfunction isProbablyDev(): boolean {\n try {\n // @ts-ignore\n if (typeof import.meta !== \"undefined\" && import.meta.env)\n // @ts-ignore\n return !!import.meta.env.DEV;\n } catch {}\n try {\n if (typeof process !== \"undefined\" && process.env)\n return process.env.NODE_ENV !== \"production\";\n } catch {}\n return false;\n}\n\nexport async function getDB(opts: OrmOptions = {}): Promise<OrmDexie> {\n if (db) return db;\n if (openPromise) return openPromise;\n\n const name = opts.dbName ?? \"inresi-orm\";\n\n openPromise = (async () => {\n try {\n // Configure validation once per open\n const defaultMode: ValidationMode = isProbablyDev() ? \"warn\" : \"strict\";\n configureValidation({\n mode: opts.validation?.mode ?? defaultMode,\n onIssue: opts.validation?.onIssue,\n });\n\n const instance = new OrmDexie(name);\n\n // Multi-tab friendliness\n instance.on(\"versionchange\", () => {\n try {\n instance.close();\n } finally {\n opts.onReset?.(\"versionchange\");\n }\n });\n instance.on(\"blocked\", () => {\n opts.onReset?.(\"blocked\");\n });\n\n await instance.open();\n\n // Validate/initialize manifest\n const row = await instance.kv.get(MANIFEST_KEY);\n const saved = (row?.value ?? null) as unknown;\n\n if (!saved) {\n await instance.transaction(\"rw\", instance.kv, async () => {\n await instance.kv.put({\n key: MANIFEST_KEY,\n value: { schemaVersion: SCHEMA_VERSION },\n });\n });\n installValidationHooks(instance, opts.validation);\n db = instance;\n return instance;\n }\n\n const parsed = ManifestSchema.safeParse(saved as Manifest);\n if (!parsed.success || parsed.data.schemaVersion !== SCHEMA_VERSION) {\n await instance.delete();\n const fresh = new OrmDexie(name);\n fresh.on(\"versionchange\", () => {\n try {\n fresh.close();\n } finally {\n opts.onReset?.(\"versionchange\");\n }\n });\n fresh.on(\"blocked\", () => {\n opts.onReset?.(\"blocked\");\n });\n await fresh.open();\n await fresh.kv.put({\n key: MANIFEST_KEY,\n value: { schemaVersion: SCHEMA_VERSION },\n });\n installValidationHooks(fresh, opts.validation);\n opts.onReset?.(\"incompatible\");\n db = fresh;\n return fresh;\n }\n\n installValidationHooks(instance, opts.validation);\n db = instance;\n return instance;\n } catch (e) {\n opts.onError?.(e);\n throw new OpenDBError(\"Failed to open IndexedDB\", e);\n } finally {\n openPromise = null; // allow future reuse/retry\n }\n })();\n\n return openPromise;\n}\n\nexport async function resetDB(dbName?: string) {\n const name = dbName ?? \"inresi-orm\";\n if (db) {\n try {\n await db.close();\n } catch {\n /* ignore */\n }\n }\n const instance = new OrmDexie(name);\n await instance.delete();\n db = null;\n}\n"],"names":["MANIFEST_KEY","ManifestSchema","z.object","z.number","db","openPromise","VALIDATION_INSTALLED","installValidationHooks","instance","_vopts","anyDb","isProbablyDev","__vite_import_meta_env__","getDB","opts","name","defaultMode","configureValidation","_a","_b","OrmDexie","row","saved","SCHEMA_VERSION","parsed","fresh","_c","e","_d","OpenDBError","resetDB","dbName"],"mappings":"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"}