@trypattern/sdk 0.1.11 → 0.1.13
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/README.md +73 -12
- package/dist/access.d.ts +0 -4
- package/dist/access.js +0 -5
- package/dist/api.d.ts +3 -1
- package/dist/api.js +5 -17
- package/dist/app.d.ts +20 -5
- package/dist/app.js +32 -2
- package/dist/blocks.d.ts +18 -0
- package/dist/blocks.js +36 -0
- package/dist/bookings.d.ts +400 -0
- package/dist/bookings.js +300 -0
- package/dist/bookingsMemory.d.ts +9 -0
- package/dist/bookingsMemory.js +79 -0
- package/dist/bookingsStore.d.ts +698 -0
- package/dist/bookingsStore.js +129 -0
- package/dist/cli/app.js +143 -59
- package/dist/cli/publishing.d.ts +3 -1
- package/dist/cli/publishing.js +33 -5
- package/dist/cli/starter.d.ts +17 -0
- package/dist/cli/starter.js +140 -0
- package/dist/components/Button.d.ts +2 -24
- package/dist/components/Button.js +4 -251
- package/dist/components/ButtonBody.d.ts +25 -0
- package/dist/components/ButtonBody.js +266 -0
- package/dist/components/Calendar.d.ts +20 -0
- package/dist/components/Calendar.js +195 -0
- package/dist/components/Card.d.ts +1 -1
- package/dist/components/Card.js +7 -29
- package/dist/components/Choice.js +27 -13
- package/dist/components/ChoiceGroup.d.ts +3 -1
- package/dist/components/ChoiceGroup.js +3 -4
- package/dist/components/ContinueWithGoogle.d.ts +11 -0
- package/dist/components/ContinueWithGoogle.js +5 -0
- package/dist/components/Dialog.d.ts +1 -1
- package/dist/components/Dialog.js +3 -1
- package/dist/components/Icon.js +1 -1
- package/dist/components/ListRow.js +2 -1
- package/dist/components/RadioGroup.d.ts +2 -1
- package/dist/components/RadioGroup.js +10 -2
- package/dist/components/Text.d.ts +1 -1
- package/dist/components/Text.js +43 -2
- package/dist/components/calendarDates.d.ts +14 -0
- package/dist/components/calendarDates.js +84 -0
- package/dist/components/controlLook.js +11 -11
- package/dist/components/icons.d.ts +9 -0
- package/dist/components/icons.js +17 -1
- package/dist/components/interaction.d.ts +1 -1
- package/dist/flows/browser.d.ts +7 -1
- package/dist/flows/browser.js +25 -7
- package/dist/flows/flowBrowser.d.ts +2 -2
- package/dist/flows/flowBrowser.js +2 -2
- package/dist/flows/flows.js +8 -2
- package/dist/index.d.ts +4 -1
- package/dist/index.js +1 -0
- package/dist/media.d.ts +11 -1
- package/dist/patternAccess.d.ts +11 -2
- package/dist/patternAccess.js +8 -4
- package/dist/publishWire.d.ts +24 -2
- package/dist/publishWire.js +22 -2
- package/dist/react.d.ts +3 -0
- package/dist/react.js +2 -0
- package/dist/rules/checkAllFiles.js +16 -2
- package/dist/rules/lintPlugin.js +1 -0
- package/dist/schema.d.ts +3 -1
- package/dist/schema.js +1 -0
- package/dist/server/bookings.d.ts +12 -0
- package/dist/server/bookings.js +142 -0
- package/dist/server/createServer.d.ts +3 -2
- package/dist/server/createServer.js +13 -4
- package/dist/server/env.d.ts +8 -0
- package/dist/server/index.d.ts +3 -1
- package/dist/server/index.js +1 -0
- package/dist/server/media.d.ts +16 -3
- package/dist/server/media.js +72 -23
- package/dist/server/patternViewer.js +16 -10
- package/dist/server/tables.d.ts +2 -0
- package/dist/server/tables.js +17 -1
- package/dist/start.js +12 -0
- package/dist/table.js +9 -3
- package/dist/theme/scales.d.ts +1 -1
- package/dist/theme/scales.js +1 -0
- package/dist/theme/tokens.stylex.d.ts +18 -0
- package/dist/theme/tokens.stylex.js +19 -1
- package/dist/vite/localWorker.d.ts +2 -0
- package/dist/vite/localWorker.js +48 -3
- package/dist/vite/vite.js +5 -1
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BookingRequest, BookingRules, bookingServices } from './bookings.ts';
|
|
2
|
+
import type { ServiceMemory } from './services.ts';
|
|
3
|
+
export type BookingsWorld = {
|
|
4
|
+
now?: string;
|
|
5
|
+
timezone?: string;
|
|
6
|
+
rules?: BookingRules;
|
|
7
|
+
requests?: BookingRequest[];
|
|
8
|
+
};
|
|
9
|
+
export declare const bookingMemory: ServiceMemory<typeof bookingServices, unknown>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { DEFAULT_RULES, FULL, UNAVAILABLE, daysOf, rulesProblem, slotFor, takenBy, windowsOn } from "./bookings.js";
|
|
2
|
+
import { refused } from "./services.js";
|
|
3
|
+
function worldOf(world) {
|
|
4
|
+
const found = Reflect.get(Object(world), 'bookings');
|
|
5
|
+
return typeof found === 'object' && found !== null ? found : {};
|
|
6
|
+
}
|
|
7
|
+
function change(world, patch) {
|
|
8
|
+
Reflect.set(Object(world), 'bookings', { ...worldOf(world), ...patch });
|
|
9
|
+
}
|
|
10
|
+
function nowIn(world) {
|
|
11
|
+
const { now } = worldOf(world);
|
|
12
|
+
return now === undefined ? new Date() : new Date(now);
|
|
13
|
+
}
|
|
14
|
+
function availability(world) {
|
|
15
|
+
const bookings = worldOf(world);
|
|
16
|
+
return {
|
|
17
|
+
rules: bookings.rules ?? DEFAULT_RULES,
|
|
18
|
+
taken: takenBy(bookings.requests ?? []),
|
|
19
|
+
now: nowIn(world),
|
|
20
|
+
timezone: bookings.timezone ?? 'UTC'
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function decide(world, id, status) {
|
|
24
|
+
const requests = worldOf(world).requests ?? [];
|
|
25
|
+
const found = requests.find((request) => request.id === id);
|
|
26
|
+
if (found === undefined)
|
|
27
|
+
throw refused(404, 'No such request');
|
|
28
|
+
const allowed = status === 'accepted'
|
|
29
|
+
? found.status === 'requested'
|
|
30
|
+
: found.status === 'requested' || found.status === 'accepted';
|
|
31
|
+
if (!allowed)
|
|
32
|
+
throw refused(409, `This request is already ${found.status}`);
|
|
33
|
+
const decided = { ...found, status };
|
|
34
|
+
change(world, {
|
|
35
|
+
requests: requests.map((request) => (request.id === id ? decided : request))
|
|
36
|
+
});
|
|
37
|
+
return decided;
|
|
38
|
+
}
|
|
39
|
+
export const bookingMemory = {
|
|
40
|
+
bookings: {
|
|
41
|
+
days: (world, { month }) => [...daysOf(month, availability(world))],
|
|
42
|
+
windows: (world, { date }) => [...windowsOn(date, availability(world))],
|
|
43
|
+
request: (world, fields) => {
|
|
44
|
+
const facts = availability(world);
|
|
45
|
+
const slot = slotFor(fields.date, fields.window, facts);
|
|
46
|
+
if (slot === undefined)
|
|
47
|
+
throw refused(400, UNAVAILABLE);
|
|
48
|
+
if (slot.remaining === 0)
|
|
49
|
+
throw refused(409, FULL);
|
|
50
|
+
const requests = worldOf(world).requests ?? [];
|
|
51
|
+
const request = {
|
|
52
|
+
id: `booking-request-${requests.length + 1}`,
|
|
53
|
+
createdAt: facts.now.toISOString(),
|
|
54
|
+
offering: fields.offering,
|
|
55
|
+
date: fields.date,
|
|
56
|
+
window: fields.window,
|
|
57
|
+
name: fields.name,
|
|
58
|
+
email: fields.email,
|
|
59
|
+
phone: fields.phone ?? '',
|
|
60
|
+
address: fields.address ?? '',
|
|
61
|
+
notes: fields.notes ?? '',
|
|
62
|
+
status: facts.rules.autoAccept ? 'accepted' : 'requested'
|
|
63
|
+
};
|
|
64
|
+
change(world, { requests: [...requests, request] });
|
|
65
|
+
return request;
|
|
66
|
+
},
|
|
67
|
+
requests: (world) => worldOf(world).requests ?? [],
|
|
68
|
+
accept: (world, { id }) => decide(world, id, 'accepted'),
|
|
69
|
+
decline: (world, { id }) => decide(world, id, 'declined'),
|
|
70
|
+
rules: (world) => worldOf(world).rules ?? DEFAULT_RULES,
|
|
71
|
+
saveRules: (world, rules) => {
|
|
72
|
+
const problem = rulesProblem(rules);
|
|
73
|
+
if (problem !== undefined)
|
|
74
|
+
throw refused(400, problem);
|
|
75
|
+
change(world, { rules });
|
|
76
|
+
return rules;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|