@fayz-ai/shop 0.10.0 → 0.12.0
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/{chunk-IL6GA4ER.js → chunk-2WACO2TG.js} +3 -3
- package/dist/{chunk-IL6GA4ER.js.map → chunk-2WACO2TG.js.map} +1 -1
- package/dist/{chunk-RGTIJQJL.js → chunk-6BO2TMZ5.js} +3 -3
- package/dist/{chunk-RGTIJQJL.js.map → chunk-6BO2TMZ5.js.map} +1 -1
- package/dist/{chunk-XOP6SHPB.js → chunk-NWW3WJ7Y.js} +4 -10
- package/dist/chunk-NWW3WJ7Y.js.map +1 -0
- package/dist/{chunk-XERLK5LD.js → chunk-STRNMFC4.js} +28 -5
- package/dist/chunk-STRNMFC4.js.map +1 -0
- package/dist/{chunk-U3O2I3RM.js → chunk-U6HV3LVP.js} +385 -23
- package/dist/chunk-U6HV3LVP.js.map +1 -0
- package/dist/data/checkout-gateways.d.ts +28 -0
- package/dist/data/checkout-gateways.d.ts.map +1 -0
- package/dist/data/customer-search.d.ts +3 -0
- package/dist/data/customer-search.d.ts.map +1 -0
- package/dist/data/functions.d.ts +9 -0
- package/dist/data/functions.d.ts.map +1 -0
- package/dist/data/media.d.ts +37 -0
- package/dist/data/media.d.ts.map +1 -0
- package/dist/data/mock-provider.d.ts +40 -8
- package/dist/data/mock-provider.d.ts.map +1 -1
- package/dist/data/provider.d.ts +205 -7
- package/dist/data/provider.d.ts.map +1 -1
- package/dist/data/supabase-provider.d.ts +118 -5
- package/dist/data/supabase-provider.d.ts.map +1 -1
- package/dist/data/tables.d.ts +3 -0
- package/dist/data/tables.d.ts.map +1 -1
- package/dist/entities/index.d.ts +0 -1
- package/dist/entities/index.d.ts.map +1 -1
- package/dist/entities.js +2 -2
- package/dist/index.d.ts +16 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +925 -60
- package/dist/index.js.map +1 -1
- package/dist/inventory/index.d.ts +2 -2
- package/dist/inventory/index.d.ts.map +1 -1
- package/dist/inventory/stock-types.d.ts +60 -1
- package/dist/inventory/stock-types.d.ts.map +1 -1
- package/dist/inventory/supabase-stock-store.d.ts +1 -0
- package/dist/inventory/supabase-stock-store.d.ts.map +1 -1
- package/dist/inventory.js +1 -1
- package/dist/lib/commerce.d.ts.map +1 -1
- package/dist/lib/document.d.ts +13 -0
- package/dist/lib/document.d.ts.map +1 -0
- package/dist/lib/variant-matrix.d.ts +120 -0
- package/dist/lib/variant-matrix.d.ts.map +1 -0
- package/dist/mock.js +2 -2
- package/dist/providers/checkout.d.ts +129 -0
- package/dist/providers/checkout.d.ts.map +1 -0
- package/dist/providers/index.d.ts +5 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/shipping.d.ts +43 -0
- package/dist/providers/shipping.d.ts.map +1 -0
- package/dist/providers.js +70 -0
- package/dist/providers.js.map +1 -0
- package/dist/runtime.js +3 -3
- package/dist/shipping/label-provider.d.ts +43 -0
- package/dist/shipping/label-provider.d.ts.map +1 -0
- package/dist/types.d.ts +475 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -4
- package/dist/chunk-U3O2I3RM.js.map +0 -1
- package/dist/chunk-XERLK5LD.js.map +0 -1
- package/dist/chunk-XOP6SHPB.js.map +0 -1
- package/dist/entities/sidecar.d.ts +0 -9
- package/dist/entities/sidecar.d.ts.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createMockShopProvider } from './chunk-
|
|
1
|
+
import { createMockShopProvider } from './chunk-U6HV3LVP.js';
|
|
2
2
|
|
|
3
3
|
// src/lib/runtime.ts
|
|
4
4
|
var provider = null;
|
|
@@ -17,5 +17,5 @@ function resetShopProvider() {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export { getShopProvider, resetShopProvider, setShopProvider };
|
|
20
|
-
//# sourceMappingURL=chunk-
|
|
21
|
-
//# sourceMappingURL=chunk-
|
|
20
|
+
//# sourceMappingURL=chunk-2WACO2TG.js.map
|
|
21
|
+
//# sourceMappingURL=chunk-2WACO2TG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/runtime.ts"],"names":[],"mappings":";;;AAGA,IAAI,QAAA,GAAgC,IAAA;AACpC,IAAI,YAAA,GAAoC,IAAA;AAEjC,SAAS,eAAA,GAAgC;AAC9C,EAAA,IAAI,UAAU,OAAO,QAAA;AACrB,EAAA,IAAI,CAAC,YAAA,EAAc,YAAA,GAAe,sBAAA,EAAuB;AACzD,EAAA,OAAO,YAAA;AACT;AAEO,SAAS,gBAAgB,YAAA,EAAkC;AAChE,EAAA,QAAA,GAAW,YAAA;AACb;AAEO,SAAS,iBAAA,GAA0B;AACxC,EAAA,QAAA,GAAW,IAAA;AACX,EAAA,YAAA,GAAe,IAAA;AACjB","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/lib/runtime.ts"],"names":[],"mappings":";;;AAGA,IAAI,QAAA,GAAgC,IAAA;AACpC,IAAI,YAAA,GAAoC,IAAA;AAEjC,SAAS,eAAA,GAAgC;AAC9C,EAAA,IAAI,UAAU,OAAO,QAAA;AACrB,EAAA,IAAI,CAAC,YAAA,EAAc,YAAA,GAAe,sBAAA,EAAuB;AACzD,EAAA,OAAO,YAAA;AACT;AAEO,SAAS,gBAAgB,YAAA,EAAkC;AAChE,EAAA,QAAA,GAAW,YAAA;AACb;AAEO,SAAS,iBAAA,GAA0B;AACxC,EAAA,QAAA,GAAW,IAAA;AACX,EAAA,YAAA,GAAe,IAAA;AACjB","file":"chunk-2WACO2TG.js","sourcesContent":["import type { ShopProvider } from '../data/provider'\nimport { createMockShopProvider } from '../data/mock-provider'\n\nlet provider: ShopProvider | null = null\nlet mockFallback: ShopProvider | null = null\n\nexport function getShopProvider(): ShopProvider {\n if (provider) return provider\n if (!mockFallback) mockFallback = createMockShopProvider()\n return mockFallback\n}\n\nexport function setShopProvider(nextProvider: ShopProvider): void {\n provider = nextProvider\n}\n\nexport function resetShopProvider(): void {\n provider = null\n mockFallback = null\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getShopTenantId } from './chunk-KLDS7IPU.js';
|
|
2
|
-
import { EntityValidationError, slugifyEntityTitle } from './chunk-
|
|
2
|
+
import { EntityValidationError, slugifyEntityTitle } from './chunk-NWW3WJ7Y.js';
|
|
3
3
|
import { validateEntityRecordData, getSupabaseClientOptional, resolveEntityDeclaration } from '@fayz-ai/core';
|
|
4
4
|
|
|
5
5
|
function getDb() {
|
|
@@ -89,5 +89,5 @@ function createSupabaseEntityStore(entity) {
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
export { createSupabaseEntityStore };
|
|
92
|
-
//# sourceMappingURL=chunk-
|
|
93
|
-
//# sourceMappingURL=chunk-
|
|
92
|
+
//# sourceMappingURL=chunk-6BO2TMZ5.js.map
|
|
93
|
+
//# sourceMappingURL=chunk-6BO2TMZ5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/entities/supabase-entity-store.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/entities/supabase-entity-store.ts"],"names":[],"mappings":"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","file":"chunk-6BO2TMZ5.js","sourcesContent":["import { getSupabaseClientOptional, resolveEntityDeclaration, validateEntityRecordData } from '@fayz-ai/core'\nimport { getShopTenantId } from '../data/tenant'\nimport { EntityValidationError, slugifyEntityTitle } from './entity-store'\nimport type { EntityRecord, EntityRecordInput, EntityStore, ListEntityRecordsOptions } from './entity-store'\n\n// ---------------------------------------------------------------------------\n// The generic Supabase EntityStore — one implementation for every declared\n// entity, over the shared jsonb records table (migration 0030). Row scoping is\n// enforced by the RLS generated from the declaration (entity-sql.ts, I6); the\n// tenant_id written here is the same one every plg_shop_* write stamps.\n//\n// The write gate runs HERE too, not only in the mock: RLS decides who may\n// write, the declared schema decides WHAT may be written, and the two are\n// independent layers on purpose.\n// ---------------------------------------------------------------------------\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nfunction getDb(): any {\n const supabase = getSupabaseClientOptional()\n if (!supabase) throw new Error('@fayz-ai/shop: Supabase client not initialized. Call setGlobalSupabaseClient() first.')\n return supabase\n}\n\nfunction rowToRecord(row: any): EntityRecord {\n return {\n id: row.id,\n tenantId: row.tenant_id,\n entity: row.entity,\n slug: row.slug ?? null,\n data: row.data ?? {},\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n }\n}\n\n/**\n * The generic store for one entity over the shared records table. Promotion to\n * typed columns replaces THIS with a dedicated store via registerEntityStore —\n * the callers' contract (this interface) is what stays.\n */\nexport function createSupabaseEntityStore(entity: string): EntityStore {\n const declaration = () => resolveEntityDeclaration(entity)\n\n const gate = (data: Record<string, unknown>): void => {\n const issues = validateEntityRecordData(declaration(), data)\n if (issues.length > 0) throw new EntityValidationError(entity, issues)\n }\n\n const deriveSlug = (input: EntityRecordInput): string | null => {\n if (input.slug !== undefined) return input.slug\n const titleField = declaration().titleField\n const title = titleField ? input.data[titleField] : undefined\n return typeof title === 'string' && title ? slugifyEntityTitle(title) : null\n }\n\n const table = () => declaration().storage.table\n\n return {\n async list(options: ListEntityRecordsOptions = {}) {\n let q = getDb().from(table()).select('*').eq('entity', entity)\n for (const [field, value] of Object.entries(options.filter ?? {})) {\n // Declared data fields live under the jsonb column; ->> compares text,\n // which matches the declared string/ref field types filters target.\n q = q.eq(`data->>${field}`, value)\n }\n if (options.orderBy) q = q.order(`data->>${options.orderBy}`, { ascending: options.order !== 'desc' })\n else q = q.order('created_at', { ascending: true })\n if (options.limit != null) {\n const offset = options.offset ?? 0\n q = q.range(offset, offset + options.limit - 1)\n } else if (options.offset) {\n q = q.range(options.offset, Number.MAX_SAFE_INTEGER)\n }\n const { data, error } = await q\n if (error) throw error\n return (data ?? []).map(rowToRecord)\n },\n\n async get(id) {\n const { data, error } = await getDb().from(table()).select('*').eq('entity', entity).eq('id', id).maybeSingle()\n if (error) throw error\n return data ? rowToRecord(data) : null\n },\n\n async getBySlug(slug) {\n const { data, error } = await getDb().from(table()).select('*').eq('entity', entity).eq('slug', slug).maybeSingle()\n if (error) throw error\n return data ? rowToRecord(data) : null\n },\n\n async create(input) {\n gate(input.data)\n const { data, error } = await getDb()\n .from(table())\n .insert({\n tenant_id: getShopTenantId(),\n entity,\n slug: deriveSlug(input),\n data: input.data,\n })\n .select()\n .single()\n if (error) throw error\n return rowToRecord(data)\n },\n\n async update(id, input) {\n const updates: Record<string, unknown> = {}\n if (input.data !== undefined) {\n gate(input.data)\n updates.data = input.data\n }\n if (input.slug !== undefined) updates.slug = input.slug\n const { data, error } = await getDb()\n .from(table())\n .update(updates)\n .eq('entity', entity)\n .eq('id', id)\n .select()\n .single()\n if (error) throw error\n return rowToRecord(data)\n },\n\n async delete(id) {\n const { error } = await getDb().from(table()).delete().eq('entity', entity).eq('id', id)\n if (error) throw error\n },\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { validateEntityRecordData,
|
|
1
|
+
import { validateEntityRecordData, resolveEntityDeclaration } from '@fayz-ai/core';
|
|
2
2
|
|
|
3
3
|
// src/entities/entity-store.ts
|
|
4
4
|
var EntityValidationError = class extends Error {
|
|
@@ -130,13 +130,7 @@ function createMockEntityStore(entity, options = {}) {
|
|
|
130
130
|
}
|
|
131
131
|
return store;
|
|
132
132
|
}
|
|
133
|
-
var SIDECAR_TABLE = "plg_entity_sidecar";
|
|
134
|
-
function validateSidecarWrite(reference, fields) {
|
|
135
|
-
const declaration = resolveSidecarDeclaration(reference);
|
|
136
|
-
const issues = validateEntityRecordData(declaration, fields);
|
|
137
|
-
if (issues.length > 0) throw new EntityValidationError(`${reference} sidecar`, issues);
|
|
138
|
-
}
|
|
139
133
|
|
|
140
|
-
export { EntityValidationError,
|
|
141
|
-
//# sourceMappingURL=chunk-
|
|
142
|
-
//# sourceMappingURL=chunk-
|
|
134
|
+
export { EntityValidationError, clearEntityStores, createMockEntityStore, getRegisteredEntityStore, registerEntityStore, resolveEntityStore, slugifyEntityTitle };
|
|
135
|
+
//# sourceMappingURL=chunk-NWW3WJ7Y.js.map
|
|
136
|
+
//# sourceMappingURL=chunk-NWW3WJ7Y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/entities/entity-store.ts","../src/entities/mock-entity-store.ts"],"names":[],"mappings":"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","file":"chunk-NWW3WJ7Y.js","sourcesContent":["import type { EntityRecordIssue } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// EntityStore — the I5 storage indirection for declared entities.\n//\n// WooCommerce survived escaping wp_postmeta ONLY because WC_Data_Store let one\n// filter swap the storage implementation per entity type. This is that seam,\n// present from day one: every reader and writer of entity records goes through\n// an EntityStore resolved PER ENTITY KEY, so a hot entity can later be promoted\n// from the generic jsonb table to typed columns by registering a dedicated\n// store for its key — and no caller changes.\n//\n// Two implementations ship with M4: the generic Supabase store over\n// plg_entity_records (supabase-entity-store.ts) and the in-memory mock\n// (mock-entity-store.ts). Both run the SAME write gate: a record that does not\n// validate against the entity's declared schema is rejected with the issues.\n// ---------------------------------------------------------------------------\n\n/** One stored record. Structural columns + the declared `data` payload. */\nexport interface EntityRecord<TData extends Record<string, unknown> = Record<string, unknown>> {\n id: string\n tenantId: string\n /** The entity key this record belongs to (defineEntity key). */\n entity: string\n /** URL-stable identity within (tenant, entity); derived from the title field\n * when not provided. Null for entities that never surface on a URL. */\n slug: string | null\n data: TData\n createdAt: string\n updatedAt: string\n}\n\nexport interface ListEntityRecordsOptions {\n /** Equality filters over declared data fields ({ region: 'sudeste' }). */\n filter?: Record<string, unknown>\n /** Declared field to order by. Default: creation order. */\n orderBy?: string\n order?: 'asc' | 'desc'\n limit?: number\n offset?: number\n}\n\nexport interface EntityRecordInput<TData extends Record<string, unknown> = Record<string, unknown>> {\n slug?: string | null\n data: TData\n}\n\n/** The typed CRUD surface one entity's storage exposes. */\nexport interface EntityStore<TData extends Record<string, unknown> = Record<string, unknown>> {\n list(options?: ListEntityRecordsOptions): Promise<EntityRecord<TData>[]>\n get(id: string): Promise<EntityRecord<TData> | null>\n getBySlug(slug: string): Promise<EntityRecord<TData> | null>\n create(input: EntityRecordInput<TData>): Promise<EntityRecord<TData>>\n update(id: string, input: Partial<EntityRecordInput<TData>>): Promise<EntityRecord<TData>>\n delete(id: string): Promise<void>\n}\n\n/** Thrown by every EntityStore write whose data fails the declared schema. */\nexport class EntityValidationError extends Error {\n constructor(\n readonly entity: string,\n readonly issues: EntityRecordIssue[],\n ) {\n super(\n `Invalid ${entity} record:\\n${issues\n .map((i) => ` - ${i.path || '(record)'}: ${i.message}${i.valid ? ` (valid: ${i.valid.join(', ')})` : ''}`)\n .join('\\n')}`,\n )\n this.name = 'EntityValidationError'\n }\n}\n\n// --- Per-entity store resolution (the promotion seam) -------------------------\n\nconst storeOverrides = new Map<string, EntityStore>()\n\n/**\n * Promote an entity to a dedicated store implementation. From this call on,\n * every provider read/write for `entity` routes here instead of the generic\n * jsonb store — callers, loaders and blocks are untouched (I5).\n */\nexport function registerEntityStore(entity: string, store: EntityStore): void {\n storeOverrides.set(entity, store)\n}\n\n/** The registered dedicated store for an entity, when one exists. */\nexport function getRegisteredEntityStore(entity: string): EntityStore | undefined {\n return storeOverrides.get(entity)\n}\n\n/** Resolve an entity's store: the promoted implementation when registered,\n * otherwise the caller's generic fallback. The ONLY lookup providers use. */\nexport function resolveEntityStore(\n entity: string,\n generic: (entity: string) => EntityStore,\n): EntityStore {\n return storeOverrides.get(entity) ?? generic(entity)\n}\n\n/** Test seam. */\nexport function clearEntityStores(): void {\n storeOverrides.clear()\n}\n\n/** Shared slug derivation: mirrors the product path so entity URLs read the same. */\nexport function slugifyEntityTitle(value: string): string {\n return value\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '')\n}\n","import { resolveEntityDeclaration, validateEntityRecordData } from '@fayz-ai/core'\nimport { EntityValidationError, slugifyEntityTitle } from './entity-store'\nimport type { EntityRecord, EntityRecordInput, EntityStore, ListEntityRecordsOptions } from './entity-store'\n\n// ---------------------------------------------------------------------------\n// The in-memory EntityStore — the mock half of the provider pair (I11).\n//\n// Semantics are the contract here, not persistence: the same write gate\n// (declared-schema validation), the same slug identity, the same list\n// vocabulary (equality filter / orderBy / limit / offset) as the Supabase\n// store, so a loader tested against the mock means what it means live.\n// ---------------------------------------------------------------------------\n\nfunction uid(): string {\n return Math.random().toString(36).slice(2)\n}\n\nexport interface MockEntityStoreOptions {\n tenantId?: string\n /** Seed records: `data` payloads (validated), with optional slug/id. */\n seed?: Array<{ id?: string; slug?: string | null; data: Record<string, unknown> }>\n}\n\n/**\n * An EntityStore for one declared entity, in memory. The entity must be\n * declared (defineEntity) before records move: validation IS the store's\n * contract, and there is nothing to validate against without the declaration.\n */\nexport function createMockEntityStore(entity: string, options: MockEntityStoreOptions = {}): EntityStore {\n const tenantId = options.tenantId ?? 'mock'\n const records: EntityRecord[] = []\n\n const declaration = () => resolveEntityDeclaration(entity)\n\n const gate = (data: Record<string, unknown>): void => {\n const issues = validateEntityRecordData(declaration(), data)\n if (issues.length > 0) throw new EntityValidationError(entity, issues)\n }\n\n const deriveSlug = (input: EntityRecordInput): string | null => {\n if (input.slug !== undefined) return input.slug\n const titleField = declaration().titleField\n const title = titleField ? input.data[titleField] : undefined\n return typeof title === 'string' && title ? slugifyEntityTitle(title) : null\n }\n\n const uniqueSlug = (slug: string | null, exceptId?: string): void => {\n if (slug === null) return\n if (records.some((r) => r.slug === slug && r.id !== exceptId)) {\n throw new Error(`Entity \"${entity}\" already has a record with slug \"${slug}\".`)\n }\n }\n\n const store: EntityStore = {\n async list(listOptions: ListEntityRecordsOptions = {}) {\n let out = [...records]\n for (const [field, value] of Object.entries(listOptions.filter ?? {})) {\n out = out.filter((r) => r.data[field] === value)\n }\n if (listOptions.orderBy) {\n const key = listOptions.orderBy\n const dir = listOptions.order === 'desc' ? -1 : 1\n out.sort((a, b) => {\n const av = a.data[key]\n const bv = b.data[key]\n if (av === bv) return 0\n if (av === undefined || av === null) return dir\n if (bv === undefined || bv === null) return -dir\n return (av < bv ? -1 : 1) * dir\n })\n }\n const offset = listOptions.offset ?? 0\n return out.slice(offset, listOptions.limit != null ? offset + listOptions.limit : undefined)\n },\n\n async get(id) {\n return records.find((r) => r.id === id) ?? null\n },\n\n async getBySlug(slug) {\n return records.find((r) => r.slug === slug) ?? null\n },\n\n async create(input) {\n gate(input.data)\n const slug = deriveSlug(input)\n uniqueSlug(slug)\n const now = new Date().toISOString()\n const record: EntityRecord = {\n id: uid(),\n tenantId,\n entity,\n slug,\n data: { ...input.data },\n createdAt: now,\n updatedAt: now,\n }\n records.push(record)\n return record\n },\n\n async update(id, input) {\n const record = records.find((r) => r.id === id)\n if (!record) throw new Error(`Entity \"${entity}\" has no record \"${id}\".`)\n const data = input.data !== undefined ? { ...input.data } : record.data\n gate(data)\n const slug = input.slug !== undefined ? input.slug : record.slug\n uniqueSlug(slug, id)\n record.data = data\n record.slug = slug\n record.updatedAt = new Date().toISOString()\n return record\n },\n\n async delete(id) {\n const index = records.findIndex((r) => r.id === id)\n if (index >= 0) records.splice(index, 1)\n },\n }\n\n for (const seed of options.seed ?? []) {\n const issues = validateEntityRecordData(declaration(), seed.data)\n if (issues.length > 0) throw new EntityValidationError(entity, issues)\n const slug = deriveSlug({ slug: seed.slug, data: seed.data })\n uniqueSlug(slug)\n const now = new Date().toISOString()\n records.push({\n id: seed.id ?? uid(),\n tenantId,\n entity,\n slug,\n data: { ...seed.data },\n createdAt: now,\n updatedAt: now,\n })\n }\n\n return store\n}\n"]}
|
|
@@ -76,6 +76,7 @@ var STOCK_LOCATION_KINDS = ["store", "warehouse", "transit", "virtual"];
|
|
|
76
76
|
var STOCK_RESERVATION_STATUSES = ["held", "consumed", "released"];
|
|
77
77
|
var STOCK_LOT_STATUSES = ["active", "quarantined", "expired", "consumed"];
|
|
78
78
|
var STOCK_MOVEMENT_DIRECTIONS = ["in", "out", "either"];
|
|
79
|
+
var OWN_FULFILLMENT = "own";
|
|
79
80
|
var CORE_STOCK_MOVEMENT_KINDS = [
|
|
80
81
|
{ key: "receipt", label: "Entrada", direction: "in" },
|
|
81
82
|
{ key: "sale", label: "Venda", direction: "out" },
|
|
@@ -630,7 +631,15 @@ var T = {
|
|
|
630
631
|
// Core, not plg_shop_*: a delivery zone is a fact about the business, and
|
|
631
632
|
// fulfilment and financial read it too. Same reasoning as addresses and
|
|
632
633
|
// orders — see migration 0021.
|
|
633
|
-
shippingZones: "shipping_zones"
|
|
634
|
+
shippingZones: "shipping_zones",
|
|
635
|
+
// The store-wide delivery fallback (0015). Core for the same reason zones
|
|
636
|
+
// are: what a business charges to deliver is not a fact about a plugin.
|
|
637
|
+
shippingSettings: "shipping_settings",
|
|
638
|
+
shippingProfiles: "plg_shop_shipping_profiles",
|
|
639
|
+
// plg_*, unlike the two above: which boxes a store keeps on the shelf is a
|
|
640
|
+
// fact about running this shop, not about the business. Nothing outside the
|
|
641
|
+
// freight quote reads it.
|
|
642
|
+
shippingPackages: "plg_shop_packages"
|
|
634
643
|
};
|
|
635
644
|
|
|
636
645
|
// src/inventory/supabase-stock-store.ts
|
|
@@ -639,7 +648,7 @@ function getDb() {
|
|
|
639
648
|
if (!supabase) throw new Error("@fayz-ai/shop: Supabase client not initialized. Call setGlobalSupabaseClient() first.");
|
|
640
649
|
return supabase;
|
|
641
650
|
}
|
|
642
|
-
function
|
|
651
|
+
function rowToStockLocation(row) {
|
|
643
652
|
return {
|
|
644
653
|
id: row.id,
|
|
645
654
|
tenantId: row.tenant_id,
|
|
@@ -649,10 +658,24 @@ function rowToLocation(row) {
|
|
|
649
658
|
isSellable: row.is_sellable ?? true,
|
|
650
659
|
isDefault: row.is_default ?? false,
|
|
651
660
|
status: row.status ?? "active",
|
|
661
|
+
postalCode: row.postal_code ?? null,
|
|
662
|
+
city: row.city ?? null,
|
|
663
|
+
state: row.state ?? null,
|
|
664
|
+
street: row.street ?? null,
|
|
665
|
+
number: row.number ?? null,
|
|
666
|
+
district: row.district ?? null,
|
|
667
|
+
complement: row.complement ?? null,
|
|
668
|
+
document: row.document ?? null,
|
|
669
|
+
phone: row.phone ?? null,
|
|
670
|
+
email: row.email ?? null,
|
|
671
|
+
carrierAgencies: row.carrier_agencies ?? null,
|
|
672
|
+
shipsOnline: row.ships_online ?? true,
|
|
673
|
+
fulfillmentProvider: row.fulfillment_provider ?? null,
|
|
652
674
|
createdAt: row.created_at,
|
|
653
675
|
updatedAt: row.updated_at
|
|
654
676
|
};
|
|
655
677
|
}
|
|
678
|
+
var rowToLocation = rowToStockLocation;
|
|
656
679
|
function rowToLot(row) {
|
|
657
680
|
return {
|
|
658
681
|
id: row.id,
|
|
@@ -1410,6 +1433,6 @@ function createMockStockStore(seed = {}) {
|
|
|
1410
1433
|
return new MockStockStore(seed);
|
|
1411
1434
|
}
|
|
1412
1435
|
|
|
1413
|
-
export { BEYOND_SHOPIFY, CORE_RESERVATION_TTL_MINUTES, CORE_STOCK_ALLOCATION_STRATEGIES, CORE_STOCK_MOVEMENT_KINDS, CORE_STOCK_REASON_CODES, DEFAULT_STOCK_TRACKING, LEGACY_WRITE_REASON, MockStockStore, OPENING_BALANCE_REASON, SHOPIFY_ADJUSTMENT_REASONS, SHOPIFY_DEFAULT_OPTION_NAME, SHOPIFY_DEFAULT_VARIANT_TITLE, SHOPIFY_QUANTITY_STATES, STOCK_LOCATION_KINDS, STOCK_LOT_STATUSES, STOCK_MOVEMENT_DIRECTIONS, STOCK_RESERVATION_STATUSES, STOCK_TRACKING_MODES, StockAllocationError, StockMovementError, SupabaseStockStore, T, TRACKING_MODES_BEYOND_SHOPIFY, allocateStock, clearStockAllocationStrategies, clearStockStores, clearStockVocabulary, compareStockAllocationCandidates, createMockStockStore, createSupabaseStockStore, getRegisteredStockStore, listStockAllocationStrategies, listStockAllocationStrategyKeys, listStockMovementKindKeys, listStockMovementKinds, listStockReasonCodeKeys, listStockReasonCodes, mirroredInventoryCount, registerCoreStockAllocationStrategies, registerCoreStockVocabulary, registerStockAllocationStrategy, registerStockMovementKind, registerStockReasonCode, registerStockStore, replayStockLedger, resolveAllocationStrategyKey, resolveReservationTtlMinutes, resolveStockAllocationStrategy, resolveStockMovementKind, resolveStockReasonCode, resolveStockStore, shopifyDefaultOptions, shopifyReasonToStockReason, stockAllocationStrategyRegistry, stockBalanceKey, stockMovementKindRegistry, stockReasonCodeRegistry, toShopifyVariantTitle, validateStockMovement };
|
|
1414
|
-
//# sourceMappingURL=chunk-
|
|
1415
|
-
//# sourceMappingURL=chunk-
|
|
1436
|
+
export { BEYOND_SHOPIFY, CORE_RESERVATION_TTL_MINUTES, CORE_STOCK_ALLOCATION_STRATEGIES, CORE_STOCK_MOVEMENT_KINDS, CORE_STOCK_REASON_CODES, DEFAULT_STOCK_TRACKING, LEGACY_WRITE_REASON, MockStockStore, OPENING_BALANCE_REASON, OWN_FULFILLMENT, SHOPIFY_ADJUSTMENT_REASONS, SHOPIFY_DEFAULT_OPTION_NAME, SHOPIFY_DEFAULT_VARIANT_TITLE, SHOPIFY_QUANTITY_STATES, STOCK_LOCATION_KINDS, STOCK_LOT_STATUSES, STOCK_MOVEMENT_DIRECTIONS, STOCK_RESERVATION_STATUSES, STOCK_TRACKING_MODES, StockAllocationError, StockMovementError, SupabaseStockStore, T, TRACKING_MODES_BEYOND_SHOPIFY, allocateStock, clearStockAllocationStrategies, clearStockStores, clearStockVocabulary, compareStockAllocationCandidates, createMockStockStore, createSupabaseStockStore, getRegisteredStockStore, listStockAllocationStrategies, listStockAllocationStrategyKeys, listStockMovementKindKeys, listStockMovementKinds, listStockReasonCodeKeys, listStockReasonCodes, mirroredInventoryCount, registerCoreStockAllocationStrategies, registerCoreStockVocabulary, registerStockAllocationStrategy, registerStockMovementKind, registerStockReasonCode, registerStockStore, replayStockLedger, resolveAllocationStrategyKey, resolveReservationTtlMinutes, resolveStockAllocationStrategy, resolveStockMovementKind, resolveStockReasonCode, resolveStockStore, rowToStockLocation, shopifyDefaultOptions, shopifyReasonToStockReason, stockAllocationStrategyRegistry, stockBalanceKey, stockMovementKindRegistry, stockReasonCodeRegistry, toShopifyVariantTitle, validateStockMovement };
|
|
1437
|
+
//# sourceMappingURL=chunk-STRNMFC4.js.map
|
|
1438
|
+
//# sourceMappingURL=chunk-STRNMFC4.js.map
|