create-cloesce 0.3.4 → 0.4.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/package.json
CHANGED
|
@@ -16,9 +16,8 @@ env {
|
|
|
16
16
|
|
|
17
17
|
// If a model is to be stored in a D1 database as a table, it must be decorated with `[use <binding>]`
|
|
18
18
|
// The `list`, `get`, and `save` operations are used to generate CRUD operations for the model.
|
|
19
|
-
// Optionally, these tags can be combined, e.g. `[use db, list, get, save]`
|
|
20
19
|
[use db]
|
|
21
|
-
[
|
|
20
|
+
[crud list, save, get]
|
|
22
21
|
model WeatherReport {
|
|
23
22
|
// The `primary` block describes the primary key of the table.
|
|
24
23
|
// It can be composed of several fields. Any number of primary blocks can be defined,
|
|
@@ -26,6 +25,12 @@ model WeatherReport {
|
|
|
26
25
|
primary {
|
|
27
26
|
id: int
|
|
28
27
|
}
|
|
28
|
+
|
|
29
|
+
// Define regular SQL columns under the `column` block.
|
|
30
|
+
column {
|
|
31
|
+
title: string
|
|
32
|
+
description: string
|
|
33
|
+
}
|
|
29
34
|
|
|
30
35
|
// A `nav` block describes a relationship between two models.
|
|
31
36
|
// In this case, it is a one-to-many relationship between WeatherReport and Weather,
|
|
@@ -39,25 +44,27 @@ model WeatherReport {
|
|
|
39
44
|
nav (Weather::weatherReportId) {
|
|
40
45
|
weatherEntries
|
|
41
46
|
}
|
|
42
|
-
|
|
43
|
-
// All fields that are not apart of a block are just regular fields in the table.
|
|
44
|
-
title: string
|
|
45
|
-
description: string
|
|
46
47
|
}
|
|
47
48
|
|
|
48
49
|
[use db]
|
|
49
|
-
[
|
|
50
|
+
[crud get, list, save]
|
|
50
51
|
model Weather {
|
|
51
52
|
primary {
|
|
52
53
|
id: int
|
|
53
54
|
}
|
|
55
|
+
|
|
56
|
+
column {
|
|
57
|
+
dateTime: date
|
|
58
|
+
location: string
|
|
59
|
+
temperature: int
|
|
60
|
+
condition: string
|
|
61
|
+
}
|
|
54
62
|
|
|
55
63
|
// A `foreign` block describes a one to one relationship between two models.
|
|
56
64
|
// It translates directly to a foreign key constraint in the database (`weatherReportId` references `id` in WeatherReport).
|
|
57
65
|
foreign (WeatherReport::id) {
|
|
58
66
|
weatherReportId
|
|
59
67
|
|
|
60
|
-
|
|
61
68
|
// A `nav` block inside a `foreign` block generates a navigation field,
|
|
62
69
|
// meaning the backend and client will have a WeatherReport object named `weatherReport` nested inside the Weather model.
|
|
63
70
|
nav {
|
|
@@ -68,11 +75,6 @@ model Weather {
|
|
|
68
75
|
r2 (bucket, "weather/photos/{id}.jpg") {
|
|
69
76
|
photo
|
|
70
77
|
}
|
|
71
|
-
|
|
72
|
-
dateTime: date
|
|
73
|
-
location: string
|
|
74
|
-
temperature: int
|
|
75
|
-
condition: string
|
|
76
78
|
}
|
|
77
79
|
|
|
78
80
|
// An `api` block describes what endpoints must be implemented in the backend
|
|
@@ -85,7 +87,8 @@ api Weather {
|
|
|
85
87
|
//
|
|
86
88
|
// In this case, `uploadPhoto` accepts the Wrangler environment (dependency injected),
|
|
87
89
|
// and a stream (the photo to be uploaded).
|
|
88
|
-
|
|
90
|
+
[inject bucket]
|
|
91
|
+
post uploadPhoto(self, s: stream)
|
|
89
92
|
|
|
90
93
|
// By default, Cloesce will hydrate a `self` instance with all 1:1, KV, R2,
|
|
91
94
|
// and the near side of 1:M/M:M relationships.
|
|
@@ -23,10 +23,7 @@ const showResult = (outputId: string, result: any) => {
|
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
window.listReports = async () => {
|
|
26
|
-
const result = await WeatherReport.$list(
|
|
27
|
-
lastSeen_id: 0,
|
|
28
|
-
limit: 100
|
|
29
|
-
})
|
|
26
|
+
const result = await WeatherReport.$list(0, 100);
|
|
30
27
|
showResult('list-output', result);
|
|
31
28
|
};
|
|
32
29
|
|
|
@@ -51,9 +48,7 @@ window.addWeatherEntry = async () => {
|
|
|
51
48
|
return;
|
|
52
49
|
}
|
|
53
50
|
|
|
54
|
-
const getResult = await WeatherReport.$get(
|
|
55
|
-
id: reportId
|
|
56
|
-
});
|
|
51
|
+
const getResult = await WeatherReport.$get(reportId);
|
|
57
52
|
if (!getResult.ok) {
|
|
58
53
|
showResult('entry-output', getResult);
|
|
59
54
|
return;
|
|
@@ -64,12 +64,12 @@ describe("Miniflare Integration Tests", () => {
|
|
|
64
64
|
temperature: 25,
|
|
65
65
|
condition: "Sunny"
|
|
66
66
|
}]
|
|
67
|
-
}))!;
|
|
67
|
+
})).value!;
|
|
68
68
|
|
|
69
69
|
await Weather.uploadPhoto(report.weatherEntries[0], env, testData as any);
|
|
70
70
|
|
|
71
71
|
// Act
|
|
72
|
-
const weatherEntries = (await Weather.Default.list(env, 0, 100))!;
|
|
72
|
+
const weatherEntries = (await Weather.Default.list(env, 0, 100)).value!;
|
|
73
73
|
const photo = Weather.downloadPhoto(weatherEntries[0]);
|
|
74
74
|
|
|
75
75
|
// Assert
|