wrangler 0.0.0-e7cf0caa → 0.0.0-e87ad068
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/miniflare-dist/index.mjs +167 -93
- package/package.json +6 -6
- package/src/__tests__/configuration.test.ts +218 -0
- package/src/__tests__/constellation.test.ts +371 -0
- package/src/__tests__/d1/migrate.test.ts +100 -0
- package/src/__tests__/index.test.ts +4 -2
- package/src/__tests__/init.test.ts +109 -3
- package/src/__tests__/mtls-certificates.test.ts +2 -1
- package/src/__tests__/pages/functions-build.test.ts +77 -0
- package/src/__tests__/pages-deployment-tail.test.ts +2 -0
- package/src/__tests__/publish.test.ts +646 -187
- package/src/__tests__/tail.test.ts +49 -7
- package/src/__tests__/tsconfig.tsbuildinfo +1 -1
- package/src/__tests__/unstableDev.test.ts +61 -0
- package/src/__tests__/user.test.ts +1 -1
- package/src/api/dev.ts +12 -0
- package/src/api/pages/create-worker-bundle-contents.ts +4 -0
- package/src/api/pages/publish.tsx +28 -12
- package/src/bundle.ts +58 -14
- package/src/cfetch/internal.ts +19 -14
- package/src/config/environment.ts +41 -0
- package/src/config/index.ts +21 -0
- package/src/config/validation.ts +182 -0
- package/src/constellation/createProject.tsx +51 -0
- package/src/constellation/deleteProject.ts +51 -0
- package/src/constellation/deleteProjectModel.ts +76 -0
- package/src/constellation/index.ts +75 -0
- package/src/constellation/listCatalog.tsx +35 -0
- package/src/constellation/listModel.tsx +49 -0
- package/src/constellation/listProject.tsx +28 -0
- package/src/constellation/listRuntime.tsx +28 -0
- package/src/constellation/options.ts +17 -0
- package/src/constellation/types.ts +17 -0
- package/src/constellation/uploadModel.tsx +84 -0
- package/src/constellation/utils.ts +90 -0
- package/src/create-worker-upload-form.ts +25 -0
- package/src/d1/backups.tsx +4 -4
- package/src/d1/constants.ts +3 -0
- package/src/d1/create.tsx +77 -43
- package/src/d1/delete.ts +1 -1
- package/src/d1/execute.tsx +27 -13
- package/src/d1/list.tsx +13 -11
- package/src/d1/migrations/apply.tsx +29 -6
- package/src/d1/migrations/helpers.ts +8 -9
- package/src/d1/types.ts +7 -0
- package/src/dev/dev.tsx +9 -2
- package/src/dev/local.tsx +52 -20
- package/src/dev/remote.tsx +4 -0
- package/src/dev/start-server.ts +64 -40
- package/src/dev/use-esbuild.ts +70 -43
- package/src/dev-registry.ts +11 -0
- package/src/dev.tsx +23 -6
- package/src/docs/helpers.ts +50 -0
- package/src/docs/index.ts +25 -68
- package/src/entry.ts +8 -1
- package/src/environment-variables/factory.ts +2 -1
- package/src/generate/index.ts +5 -0
- package/src/index.ts +12 -1
- package/src/init.ts +52 -10
- package/src/inspect.ts +107 -6
- package/src/kv/helpers.ts +7 -4
- package/src/logger.ts +5 -1
- package/src/miniflare-cli/index.ts +2 -2
- package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -1
- package/src/module-collection.ts +1 -1
- package/src/pages/build.ts +30 -17
- package/src/pages/dev.ts +51 -8
- package/src/pages/functions/buildPlugin.ts +1 -0
- package/src/pages/functions/buildWorker.ts +92 -2
- package/src/pages/functions/tsconfig.tsbuildinfo +1 -1
- package/src/publish/publish.ts +9 -1
- package/src/secret/index.ts +4 -0
- package/src/sites.ts +164 -52
- package/src/tail/createTail.ts +9 -0
- package/src/tail/printing.ts +12 -0
- package/src/traverse-module-graph.ts +2 -1
- package/src/type-generation.ts +6 -0
- package/src/user/user.ts +1 -0
- package/src/utils/render.ts +1 -1
- package/src/worker.ts +26 -0
- package/templates/__tests__/tsconfig.tsbuildinfo +1 -1
- package/templates/pages-dev-util.ts +4 -1
- package/templates/tsconfig.tsbuildinfo +1 -1
- package/wrangler-dist/cli.d.ts +78 -2
- package/wrangler-dist/cli.js +65057 -63883
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wrangler",
|
|
3
|
-
"version": "0.0.0-
|
|
3
|
+
"version": "0.0.0-e87ad068",
|
|
4
4
|
"description": "Command-line interface for all things Cloudflare Workers",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"wrangler",
|
|
@@ -102,13 +102,13 @@
|
|
|
102
102
|
"@cloudflare/kv-asset-handler": "^0.2.0",
|
|
103
103
|
"@esbuild-plugins/node-globals-polyfill": "^0.1.1",
|
|
104
104
|
"@esbuild-plugins/node-modules-polyfill": "^0.1.4",
|
|
105
|
-
"@miniflare/core": "2.
|
|
106
|
-
"@miniflare/d1": "2.
|
|
107
|
-
"@miniflare/durable-objects": "2.
|
|
105
|
+
"@miniflare/core": "2.14.0",
|
|
106
|
+
"@miniflare/d1": "2.14.0",
|
|
107
|
+
"@miniflare/durable-objects": "2.14.0",
|
|
108
108
|
"blake3-wasm": "^2.1.5",
|
|
109
109
|
"chokidar": "^3.5.3",
|
|
110
110
|
"esbuild": "0.16.3",
|
|
111
|
-
"miniflare": "2.
|
|
111
|
+
"miniflare": "2.14.0",
|
|
112
112
|
"nanoid": "^3.3.3",
|
|
113
113
|
"path-to-regexp": "^6.2.0",
|
|
114
114
|
"selfsigned": "^2.0.1",
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
"@cloudflare/workers-types": "^4.20221111.1",
|
|
121
121
|
"@iarna/toml": "^3.0.0",
|
|
122
122
|
"@microsoft/api-extractor": "^7.28.3",
|
|
123
|
-
"@miniflare/tre": "3.0.0-next.
|
|
123
|
+
"@miniflare/tre": "3.0.0-next.13",
|
|
124
124
|
"@types/better-sqlite3": "^7.6.0",
|
|
125
125
|
"@types/busboy": "^1.5.0",
|
|
126
126
|
"@types/command-exists": "^1.2.0",
|
|
@@ -26,6 +26,7 @@ describe("normalizeAndValidateConfig()", () => {
|
|
|
26
26
|
compatibility_flags: [],
|
|
27
27
|
configPath: undefined,
|
|
28
28
|
d1_databases: [],
|
|
29
|
+
constellation: [],
|
|
29
30
|
dev: {
|
|
30
31
|
ip: "0.0.0.0",
|
|
31
32
|
local_protocol: "http",
|
|
@@ -62,6 +63,7 @@ describe("normalizeAndValidateConfig()", () => {
|
|
|
62
63
|
rules: [],
|
|
63
64
|
site: undefined,
|
|
64
65
|
text_blobs: undefined,
|
|
66
|
+
browser: undefined,
|
|
65
67
|
triggers: {
|
|
66
68
|
crons: [],
|
|
67
69
|
},
|
|
@@ -84,6 +86,8 @@ describe("normalizeAndValidateConfig()", () => {
|
|
|
84
86
|
first_party_worker: undefined,
|
|
85
87
|
keep_vars: undefined,
|
|
86
88
|
logpush: undefined,
|
|
89
|
+
placement: undefined,
|
|
90
|
+
tail_consumers: undefined,
|
|
87
91
|
});
|
|
88
92
|
expect(diagnostics.hasErrors()).toBe(false);
|
|
89
93
|
expect(diagnostics.hasWarnings()).toBe(false);
|
|
@@ -955,6 +959,9 @@ describe("normalizeAndValidateConfig()", () => {
|
|
|
955
959
|
node_compat: true,
|
|
956
960
|
first_party_worker: true,
|
|
957
961
|
logpush: true,
|
|
962
|
+
placement: {
|
|
963
|
+
mode: "smart",
|
|
964
|
+
},
|
|
958
965
|
};
|
|
959
966
|
|
|
960
967
|
const { config, diagnostics } = normalizeAndValidateConfig(
|
|
@@ -1030,6 +1037,9 @@ describe("normalizeAndValidateConfig()", () => {
|
|
|
1030
1037
|
node_compat: "INVALID",
|
|
1031
1038
|
first_party_worker: "INVALID",
|
|
1032
1039
|
logpush: "INVALID",
|
|
1040
|
+
placement: {
|
|
1041
|
+
mode: "INVALID",
|
|
1042
|
+
},
|
|
1033
1043
|
} as unknown as RawEnvironment;
|
|
1034
1044
|
|
|
1035
1045
|
const { config, diagnostics } = normalizeAndValidateConfig(
|
|
@@ -1093,6 +1103,7 @@ describe("normalizeAndValidateConfig()", () => {
|
|
|
1093
1103
|
- Expected \\"name\\" to be of type string, alphanumeric and lowercase with dashes only but got 111.
|
|
1094
1104
|
- Expected \\"main\\" to be of type string but got 1333.
|
|
1095
1105
|
- Expected \\"usage_model\\" field to be one of [\\"bundled\\",\\"unbound\\"] but got \\"INVALID\\".
|
|
1106
|
+
- Expected \\"placement.mode\\" field to be one of [\\"off\\",\\"smart\\"] but got \\"INVALID\\".
|
|
1096
1107
|
- The field \\"define.DEF1\\" should be a string but got 1777.
|
|
1097
1108
|
- Expected \\"no_bundle\\" to be of type boolean but got \\"INVALID\\".
|
|
1098
1109
|
- Expected \\"minify\\" to be of type boolean but got \\"INVALID\\".
|
|
@@ -1551,6 +1562,64 @@ describe("normalizeAndValidateConfig()", () => {
|
|
|
1551
1562
|
});
|
|
1552
1563
|
});
|
|
1553
1564
|
|
|
1565
|
+
describe("[browser]", () => {
|
|
1566
|
+
it("should error if browser is an array", () => {
|
|
1567
|
+
const { diagnostics } = normalizeAndValidateConfig(
|
|
1568
|
+
{ browser: [] } as unknown as RawConfig,
|
|
1569
|
+
undefined,
|
|
1570
|
+
{ env: undefined }
|
|
1571
|
+
);
|
|
1572
|
+
|
|
1573
|
+
expect(diagnostics.hasWarnings()).toBe(false);
|
|
1574
|
+
expect(diagnostics.renderErrors()).toMatchInlineSnapshot(`
|
|
1575
|
+
"Processing wrangler configuration:
|
|
1576
|
+
- The field \\"browser\\" should be an object but got []."
|
|
1577
|
+
`);
|
|
1578
|
+
});
|
|
1579
|
+
|
|
1580
|
+
it("should error if browser is a string", () => {
|
|
1581
|
+
const { diagnostics } = normalizeAndValidateConfig(
|
|
1582
|
+
{ browser: "BAD" } as unknown as RawConfig,
|
|
1583
|
+
undefined,
|
|
1584
|
+
{ env: undefined }
|
|
1585
|
+
);
|
|
1586
|
+
|
|
1587
|
+
expect(diagnostics.hasWarnings()).toBe(false);
|
|
1588
|
+
expect(diagnostics.renderErrors()).toMatchInlineSnapshot(`
|
|
1589
|
+
"Processing wrangler configuration:
|
|
1590
|
+
- The field \\"browser\\" should be an object but got \\"BAD\\"."
|
|
1591
|
+
`);
|
|
1592
|
+
});
|
|
1593
|
+
|
|
1594
|
+
it("should error if browser is a number", () => {
|
|
1595
|
+
const { diagnostics } = normalizeAndValidateConfig(
|
|
1596
|
+
{ browser: 999 } as unknown as RawConfig,
|
|
1597
|
+
undefined,
|
|
1598
|
+
{ env: undefined }
|
|
1599
|
+
);
|
|
1600
|
+
|
|
1601
|
+
expect(diagnostics.hasWarnings()).toBe(false);
|
|
1602
|
+
expect(diagnostics.renderErrors()).toMatchInlineSnapshot(`
|
|
1603
|
+
"Processing wrangler configuration:
|
|
1604
|
+
- The field \\"browser\\" should be an object but got 999."
|
|
1605
|
+
`);
|
|
1606
|
+
});
|
|
1607
|
+
|
|
1608
|
+
it("should error if browser is null", () => {
|
|
1609
|
+
const { diagnostics } = normalizeAndValidateConfig(
|
|
1610
|
+
{ browser: null } as unknown as RawConfig,
|
|
1611
|
+
undefined,
|
|
1612
|
+
{ env: undefined }
|
|
1613
|
+
);
|
|
1614
|
+
|
|
1615
|
+
expect(diagnostics.hasWarnings()).toBe(false);
|
|
1616
|
+
expect(diagnostics.renderErrors()).toMatchInlineSnapshot(`
|
|
1617
|
+
"Processing wrangler configuration:
|
|
1618
|
+
- The field \\"browser\\" should be an object but got null."
|
|
1619
|
+
`);
|
|
1620
|
+
});
|
|
1621
|
+
});
|
|
1622
|
+
|
|
1554
1623
|
describe("[kv_namespaces]", () => {
|
|
1555
1624
|
it("should error if kv_namespaces is an object", () => {
|
|
1556
1625
|
const { diagnostics } = normalizeAndValidateConfig(
|
|
@@ -1764,6 +1833,100 @@ describe("normalizeAndValidateConfig()", () => {
|
|
|
1764
1833
|
});
|
|
1765
1834
|
});
|
|
1766
1835
|
|
|
1836
|
+
describe("[constellation]", () => {
|
|
1837
|
+
it("should error if constellation is an object", () => {
|
|
1838
|
+
const { diagnostics } = normalizeAndValidateConfig(
|
|
1839
|
+
{ constellation: {} } as unknown as RawConfig,
|
|
1840
|
+
undefined,
|
|
1841
|
+
{ env: undefined }
|
|
1842
|
+
);
|
|
1843
|
+
|
|
1844
|
+
expect(diagnostics.hasWarnings()).toBe(false);
|
|
1845
|
+
expect(diagnostics.renderErrors()).toMatchInlineSnapshot(`
|
|
1846
|
+
"Processing wrangler configuration:
|
|
1847
|
+
- The field \\"constellation\\" should be an array but got {}."
|
|
1848
|
+
`);
|
|
1849
|
+
});
|
|
1850
|
+
|
|
1851
|
+
it("should error if constellation is a string", () => {
|
|
1852
|
+
const { diagnostics } = normalizeAndValidateConfig(
|
|
1853
|
+
{ constellation: "BAD" } as unknown as RawConfig,
|
|
1854
|
+
undefined,
|
|
1855
|
+
{ env: undefined }
|
|
1856
|
+
);
|
|
1857
|
+
|
|
1858
|
+
expect(diagnostics.hasWarnings()).toBe(false);
|
|
1859
|
+
expect(diagnostics.renderErrors()).toMatchInlineSnapshot(`
|
|
1860
|
+
"Processing wrangler configuration:
|
|
1861
|
+
- The field \\"constellation\\" should be an array but got \\"BAD\\"."
|
|
1862
|
+
`);
|
|
1863
|
+
});
|
|
1864
|
+
|
|
1865
|
+
it("should error if constellation is a number", () => {
|
|
1866
|
+
const { diagnostics } = normalizeAndValidateConfig(
|
|
1867
|
+
{ constellation: 999 } as unknown as RawConfig,
|
|
1868
|
+
undefined,
|
|
1869
|
+
{ env: undefined }
|
|
1870
|
+
);
|
|
1871
|
+
|
|
1872
|
+
expect(diagnostics.hasWarnings()).toBe(false);
|
|
1873
|
+
expect(diagnostics.renderErrors()).toMatchInlineSnapshot(`
|
|
1874
|
+
"Processing wrangler configuration:
|
|
1875
|
+
- The field \\"constellation\\" should be an array but got 999."
|
|
1876
|
+
`);
|
|
1877
|
+
});
|
|
1878
|
+
|
|
1879
|
+
it("should error if constellation is null", () => {
|
|
1880
|
+
const { diagnostics } = normalizeAndValidateConfig(
|
|
1881
|
+
{ constellation: null } as unknown as RawConfig,
|
|
1882
|
+
undefined,
|
|
1883
|
+
{ env: undefined }
|
|
1884
|
+
);
|
|
1885
|
+
|
|
1886
|
+
expect(diagnostics.hasWarnings()).toBe(false);
|
|
1887
|
+
expect(diagnostics.renderErrors()).toMatchInlineSnapshot(`
|
|
1888
|
+
"Processing wrangler configuration:
|
|
1889
|
+
- The field \\"constellation\\" should be an array but got null."
|
|
1890
|
+
`);
|
|
1891
|
+
});
|
|
1892
|
+
|
|
1893
|
+
it("should accept valid bindings", () => {
|
|
1894
|
+
const { diagnostics } = normalizeAndValidateConfig(
|
|
1895
|
+
{
|
|
1896
|
+
constellation: [{ binding: "VALID", project_id: "ID" }],
|
|
1897
|
+
} as unknown as RawConfig,
|
|
1898
|
+
undefined,
|
|
1899
|
+
{ env: undefined }
|
|
1900
|
+
);
|
|
1901
|
+
|
|
1902
|
+
expect(diagnostics.hasErrors()).toBe(false);
|
|
1903
|
+
});
|
|
1904
|
+
|
|
1905
|
+
it("should error if constellation.bindings are not valid", () => {
|
|
1906
|
+
const { diagnostics } = normalizeAndValidateConfig(
|
|
1907
|
+
{
|
|
1908
|
+
constellation: [
|
|
1909
|
+
{},
|
|
1910
|
+
{ binding: "VALID" },
|
|
1911
|
+
{ binding: 2000, project: 2111 },
|
|
1912
|
+
],
|
|
1913
|
+
} as unknown as RawConfig,
|
|
1914
|
+
undefined,
|
|
1915
|
+
{ env: undefined }
|
|
1916
|
+
);
|
|
1917
|
+
|
|
1918
|
+
expect(diagnostics.hasWarnings()).toBe(false);
|
|
1919
|
+
expect(diagnostics.renderErrors()).toMatchInlineSnapshot(`
|
|
1920
|
+
"Processing wrangler configuration:
|
|
1921
|
+
- \\"constellation[0]\\" bindings should have a string \\"binding\\" field but got {}.
|
|
1922
|
+
- \\"constellation[0]\\" bindings must have a \\"project_id\\" field but got {}.
|
|
1923
|
+
- \\"constellation[1]\\" bindings must have a \\"project_id\\" field but got {\\"binding\\":\\"VALID\\"}.
|
|
1924
|
+
- \\"constellation[2]\\" bindings should have a string \\"binding\\" field but got {\\"binding\\":2000,\\"project\\":2111}.
|
|
1925
|
+
- \\"constellation[2]\\" bindings must have a \\"project_id\\" field but got {\\"binding\\":2000,\\"project\\":2111}."
|
|
1926
|
+
`);
|
|
1927
|
+
});
|
|
1928
|
+
});
|
|
1929
|
+
|
|
1767
1930
|
describe("[queues]", () => {
|
|
1768
1931
|
it("should error if queues is not an object", () => {
|
|
1769
1932
|
const { config, diagnostics } = normalizeAndValidateConfig(
|
|
@@ -4222,6 +4385,61 @@ describe("normalizeAndValidateConfig()", () => {
|
|
|
4222
4385
|
});
|
|
4223
4386
|
});
|
|
4224
4387
|
|
|
4388
|
+
describe("[tail_consumers]", () => {
|
|
4389
|
+
it("should error if tail_consumers is not an array", () => {
|
|
4390
|
+
const { diagnostics } = normalizeAndValidateConfig(
|
|
4391
|
+
{
|
|
4392
|
+
tail_consumers: "this sure isn't an array",
|
|
4393
|
+
} as unknown as RawConfig,
|
|
4394
|
+
undefined,
|
|
4395
|
+
{ env: undefined }
|
|
4396
|
+
);
|
|
4397
|
+
|
|
4398
|
+
expect(diagnostics.hasWarnings()).toBe(false);
|
|
4399
|
+
expect(diagnostics.hasErrors()).toBe(true);
|
|
4400
|
+
expect(diagnostics.renderErrors()).toMatchInlineSnapshot(`
|
|
4401
|
+
"Processing wrangler configuration:
|
|
4402
|
+
- Expected \\"tail_consumers\\" to be an array but got \\"this sure isn't an array\\"."
|
|
4403
|
+
`);
|
|
4404
|
+
});
|
|
4405
|
+
|
|
4406
|
+
it("should error on invalid tail_consumers", () => {
|
|
4407
|
+
const { diagnostics } = normalizeAndValidateConfig(
|
|
4408
|
+
{
|
|
4409
|
+
tail_consumers: [
|
|
4410
|
+
"some string",
|
|
4411
|
+
456,
|
|
4412
|
+
{
|
|
4413
|
+
binding: "other",
|
|
4414
|
+
namespace: "shape",
|
|
4415
|
+
},
|
|
4416
|
+
{ service: {} },
|
|
4417
|
+
{
|
|
4418
|
+
service: 123,
|
|
4419
|
+
environment: "prod",
|
|
4420
|
+
},
|
|
4421
|
+
// these are valid
|
|
4422
|
+
{ service: "tail_listener" },
|
|
4423
|
+
{ service: "listener_two", environment: "production" },
|
|
4424
|
+
],
|
|
4425
|
+
} as unknown as RawConfig,
|
|
4426
|
+
undefined,
|
|
4427
|
+
{ env: undefined }
|
|
4428
|
+
);
|
|
4429
|
+
|
|
4430
|
+
expect(diagnostics.hasWarnings()).toBe(false);
|
|
4431
|
+
expect(diagnostics.hasErrors()).toBe(true);
|
|
4432
|
+
expect(diagnostics.renderErrors()).toMatchInlineSnapshot(`
|
|
4433
|
+
"Processing wrangler configuration:
|
|
4434
|
+
- \\"tail_consumers[0]\\" should be an object but got \\"some string\\".
|
|
4435
|
+
- \\"tail_consumers[1]\\" should be an object but got 456.
|
|
4436
|
+
- \\"tail_consumers[2].service\\" is a required field.
|
|
4437
|
+
- Expected \\"tail_consumers[3].service\\" to be of type string but got {}.
|
|
4438
|
+
- Expected \\"tail_consumers[4].service\\" to be of type string but got 123."
|
|
4439
|
+
`);
|
|
4440
|
+
});
|
|
4441
|
+
});
|
|
4442
|
+
|
|
4225
4443
|
describe("(deprecated)", () => {
|
|
4226
4444
|
it("should remove and warn about deprecated properties", () => {
|
|
4227
4445
|
const environment: RawEnvironment = {
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import { rest } from "msw";
|
|
3
|
+
import { endEventLoop } from "./helpers/end-event-loop";
|
|
4
|
+
import { mockAccountId, mockApiToken } from "./helpers/mock-account-id";
|
|
5
|
+
import { mockConsoleMethods } from "./helpers/mock-console";
|
|
6
|
+
import { clearDialogs, mockConfirm } from "./helpers/mock-dialogs";
|
|
7
|
+
import { useMockIsTTY } from "./helpers/mock-istty";
|
|
8
|
+
import { createFetchResult, msw } from "./helpers/msw";
|
|
9
|
+
import { runInTempDir } from "./helpers/run-in-tmp";
|
|
10
|
+
import { runWrangler } from "./helpers/run-wrangler";
|
|
11
|
+
|
|
12
|
+
describe("constellation help", () => {
|
|
13
|
+
const std = mockConsoleMethods();
|
|
14
|
+
runInTempDir();
|
|
15
|
+
|
|
16
|
+
it("should show help when no argument is passed", async () => {
|
|
17
|
+
await runWrangler("constellation");
|
|
18
|
+
await endEventLoop();
|
|
19
|
+
|
|
20
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
21
|
+
"wrangler constellation
|
|
22
|
+
|
|
23
|
+
🤖 Interact with Constellation models
|
|
24
|
+
|
|
25
|
+
Commands:
|
|
26
|
+
wrangler constellation project Manage your projects
|
|
27
|
+
wrangler constellation model Manage your models
|
|
28
|
+
wrangler constellation catalog Check the curated model catalog
|
|
29
|
+
wrangler constellation runtime Check the suported runtimes
|
|
30
|
+
|
|
31
|
+
Flags:
|
|
32
|
+
-j, --experimental-json-config Experimental: Support wrangler.json [boolean]
|
|
33
|
+
-c, --config Path to .toml configuration file [string]
|
|
34
|
+
-e, --env Environment to use for operations and .env files [string]
|
|
35
|
+
-h, --help Show help [boolean]
|
|
36
|
+
-v, --version Show version number [boolean]"
|
|
37
|
+
`);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it("should show help when an invalid argument is passed", async () => {
|
|
41
|
+
await expect(() => runWrangler("constellation asdf")).rejects.toThrow(
|
|
42
|
+
"Unknown argument: asdf"
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
expect(std.err).toMatchInlineSnapshot(`
|
|
46
|
+
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1mUnknown argument: asdf[0m
|
|
47
|
+
|
|
48
|
+
"
|
|
49
|
+
`);
|
|
50
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
51
|
+
"
|
|
52
|
+
wrangler constellation
|
|
53
|
+
|
|
54
|
+
🤖 Interact with Constellation models
|
|
55
|
+
|
|
56
|
+
Commands:
|
|
57
|
+
wrangler constellation project Manage your projects
|
|
58
|
+
wrangler constellation model Manage your models
|
|
59
|
+
wrangler constellation catalog Check the curated model catalog
|
|
60
|
+
wrangler constellation runtime Check the suported runtimes
|
|
61
|
+
|
|
62
|
+
Flags:
|
|
63
|
+
-j, --experimental-json-config Experimental: Support wrangler.json [boolean]
|
|
64
|
+
-c, --config Path to .toml configuration file [string]
|
|
65
|
+
-e, --env Environment to use for operations and .env files [string]
|
|
66
|
+
-h, --help Show help [boolean]
|
|
67
|
+
-v, --version Show version number [boolean]"
|
|
68
|
+
`);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
describe("constellation commands", () => {
|
|
73
|
+
mockAccountId();
|
|
74
|
+
mockApiToken();
|
|
75
|
+
runInTempDir();
|
|
76
|
+
const { setIsTTY } = useMockIsTTY();
|
|
77
|
+
|
|
78
|
+
const std = mockConsoleMethods();
|
|
79
|
+
|
|
80
|
+
beforeEach(() => {
|
|
81
|
+
// @ts-expect-error we're using a very simple setTimeout mock here
|
|
82
|
+
jest.spyOn(global, "setTimeout").mockImplementation((fn, _period) => {
|
|
83
|
+
setImmediate(fn);
|
|
84
|
+
});
|
|
85
|
+
setIsTTY(true);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
afterEach(() => {
|
|
89
|
+
clearDialogs();
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("should handle project creation", async () => {
|
|
93
|
+
mockConstellationRequest();
|
|
94
|
+
await runWrangler("constellation project create new_project ONNX");
|
|
95
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
96
|
+
"--------------------
|
|
97
|
+
🚧 Constellation is currently in open alpha and is not recommended for production data and traffic
|
|
98
|
+
🚧 Please report any bugs to https://github.com/cloudflare/workers-sdk/issues/new/choose
|
|
99
|
+
🚧 To give feedback, visit https://discord.gg/cloudflaredev
|
|
100
|
+
--------------------
|
|
101
|
+
|
|
102
|
+
✅ Successfully created Project \\"new_project3\\"!"
|
|
103
|
+
`);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("should handle project listing", async () => {
|
|
107
|
+
mockConstellationRequest();
|
|
108
|
+
await runWrangler("constellation project list");
|
|
109
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
110
|
+
"--------------------
|
|
111
|
+
🚧 Constellation is currently in open alpha and is not recommended for production data and traffic
|
|
112
|
+
🚧 Please report any bugs to https://github.com/cloudflare/workers-sdk/issues/new/choose
|
|
113
|
+
🚧 To give feedback, visit https://discord.gg/cloudflaredev
|
|
114
|
+
--------------------
|
|
115
|
+
|
|
116
|
+
┌──────────────────────────────────────┬──────────────┬─────────┬─────────────────────────────┐
|
|
117
|
+
│ id │ name │ runtime │ created_at │
|
|
118
|
+
├──────────────────────────────────────┼──────────────┼─────────┼─────────────────────────────┤
|
|
119
|
+
│ 4806cdcf-9aa7-4fa2-b6a1-77fe9e196680 │ new_project3 │ ONNX │ 2023-04-28T13:25:58.513105Z │
|
|
120
|
+
└──────────────────────────────────────┴──────────────┴─────────┴─────────────────────────────┘"
|
|
121
|
+
`);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
it("should handle project deletion", async () => {
|
|
125
|
+
mockConstellationRequest();
|
|
126
|
+
mockConfirm({
|
|
127
|
+
text: "Ok to proceed?",
|
|
128
|
+
result: true,
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
await runWrangler("constellation project delete new_project3");
|
|
132
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
133
|
+
"--------------------
|
|
134
|
+
🚧 Constellation is currently in open alpha and is not recommended for production data and traffic
|
|
135
|
+
🚧 Please report any bugs to https://github.com/cloudflare/workers-sdk/issues/new/choose
|
|
136
|
+
🚧 To give feedback, visit https://discord.gg/cloudflaredev
|
|
137
|
+
--------------------
|
|
138
|
+
|
|
139
|
+
About to delete Project 'new_project3' (4806cdcf-9aa7-4fa2-b6a1-77fe9e196680).
|
|
140
|
+
Deleting...
|
|
141
|
+
Deleted 'new_project3' successfully."
|
|
142
|
+
`);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it("should handle catalog list", async () => {
|
|
146
|
+
mockConstellationRequest();
|
|
147
|
+
await runWrangler("constellation catalog list");
|
|
148
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
149
|
+
"--------------------
|
|
150
|
+
🚧 Constellation is currently in open alpha and is not recommended for production data and traffic
|
|
151
|
+
🚧 Please report any bugs to https://github.com/cloudflare/workers-sdk/issues/new/choose
|
|
152
|
+
🚧 To give feedback, visit https://discord.gg/cloudflaredev
|
|
153
|
+
--------------------
|
|
154
|
+
|
|
155
|
+
┌──────────────────────────────────────┬──────────────────────┬─────────────────┬───────────────┐
|
|
156
|
+
│ project_id │ project_name │ project_runtime │ models │
|
|
157
|
+
├──────────────────────────────────────┼──────────────────────┼─────────────────┼───────────────┤
|
|
158
|
+
│ b162a29d-0a6d-4155-bedf-54a01fc8d0ef │ image-classification │ ONNX │ squeezenet1_1 │
|
|
159
|
+
└──────────────────────────────────────┴──────────────────────┴─────────────────┴───────────────┘"
|
|
160
|
+
`);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
it("should handle runtime list", async () => {
|
|
164
|
+
mockConstellationRequest();
|
|
165
|
+
await runWrangler("constellation runtime list");
|
|
166
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
167
|
+
"--------------------
|
|
168
|
+
🚧 Constellation is currently in open alpha and is not recommended for production data and traffic
|
|
169
|
+
🚧 Please report any bugs to https://github.com/cloudflare/workers-sdk/issues/new/choose
|
|
170
|
+
🚧 To give feedback, visit https://discord.gg/cloudflaredev
|
|
171
|
+
--------------------
|
|
172
|
+
|
|
173
|
+
┌─────────┐
|
|
174
|
+
│ name │
|
|
175
|
+
├─────────┤
|
|
176
|
+
│ ONNX │
|
|
177
|
+
├─────────┤
|
|
178
|
+
│ XGBoost │
|
|
179
|
+
└─────────┘"
|
|
180
|
+
`);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
it("should handle model upload", async () => {
|
|
184
|
+
mockConstellationRequest();
|
|
185
|
+
await fs.promises.writeFile("model.onnx", `model`);
|
|
186
|
+
await runWrangler(
|
|
187
|
+
"constellation model upload new_project3 model2 model.onnx"
|
|
188
|
+
);
|
|
189
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
190
|
+
"--------------------
|
|
191
|
+
🚧 Constellation is currently in open alpha and is not recommended for production data and traffic
|
|
192
|
+
🚧 Please report any bugs to https://github.com/cloudflare/workers-sdk/issues/new/choose
|
|
193
|
+
🚧 To give feedback, visit https://discord.gg/cloudflaredev
|
|
194
|
+
--------------------
|
|
195
|
+
|
|
196
|
+
✅ Successfully uploaded Model \\"model2\\"!"
|
|
197
|
+
`);
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
it("should handle model list", async () => {
|
|
201
|
+
mockConstellationRequest();
|
|
202
|
+
await runWrangler("constellation model list new_project3");
|
|
203
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
204
|
+
"--------------------
|
|
205
|
+
🚧 Constellation is currently in open alpha and is not recommended for production data and traffic
|
|
206
|
+
🚧 Please report any bugs to https://github.com/cloudflare/workers-sdk/issues/new/choose
|
|
207
|
+
🚧 To give feedback, visit https://discord.gg/cloudflaredev
|
|
208
|
+
--------------------
|
|
209
|
+
|
|
210
|
+
┌──────────────────────────────────────┬──────────────────────────────────────┬────────┬─────────────┬─────────────────────────────┐
|
|
211
|
+
│ id │ project_id │ name │ description │ created_at │
|
|
212
|
+
├──────────────────────────────────────┼──────────────────────────────────────┼────────┼─────────────┼─────────────────────────────┤
|
|
213
|
+
│ 450bb086-3c09-4991-a0cc-eed48c504ae0 │ 9d478427-dea6-4988-9b16-f6f8888d974c │ model1 │ │ 2023-04-28T11:15:14.806217Z │
|
|
214
|
+
├──────────────────────────────────────┼──────────────────────────────────────┼────────┼─────────────┼─────────────────────────────┤
|
|
215
|
+
│ 2dd35b4e-0c7a-4c7a-a9e2-e33c0e17bc02 │ 9d478427-dea6-4988-9b16-f6f8888d974c │ model2 │ │ 2023-04-28T13:50:37.494090Z │
|
|
216
|
+
└──────────────────────────────────────┴──────────────────────────────────────┴────────┴─────────────┴─────────────────────────────┘"
|
|
217
|
+
`);
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
it("should handle model deletion", async () => {
|
|
221
|
+
mockConstellationRequest();
|
|
222
|
+
mockConfirm({
|
|
223
|
+
text: "Ok to proceed?",
|
|
224
|
+
result: true,
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
await runWrangler("constellation model delete new_project3 model2");
|
|
228
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
229
|
+
"--------------------
|
|
230
|
+
🚧 Constellation is currently in open alpha and is not recommended for production data and traffic
|
|
231
|
+
🚧 Please report any bugs to https://github.com/cloudflare/workers-sdk/issues/new/choose
|
|
232
|
+
🚧 To give feedback, visit https://discord.gg/cloudflaredev
|
|
233
|
+
--------------------
|
|
234
|
+
|
|
235
|
+
About to delete Model 'model2' (2dd35b4e-0c7a-4c7a-a9e2-e33c0e17bc02).
|
|
236
|
+
Deleting...
|
|
237
|
+
Deleted 'model2' successfully."
|
|
238
|
+
`);
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
/** Create a mock handler for Constellation API */
|
|
243
|
+
function mockConstellationRequest() {
|
|
244
|
+
msw.use(
|
|
245
|
+
rest.get("*/accounts/:accountId/constellation/project", (req, res, ctx) => {
|
|
246
|
+
return res.once(
|
|
247
|
+
ctx.json(
|
|
248
|
+
createFetchResult(
|
|
249
|
+
[
|
|
250
|
+
{
|
|
251
|
+
id: "4806cdcf-9aa7-4fa2-b6a1-77fe9e196680",
|
|
252
|
+
name: "new_project3",
|
|
253
|
+
runtime: "ONNX",
|
|
254
|
+
created_at: "2023-04-28T13:25:58.513105Z",
|
|
255
|
+
},
|
|
256
|
+
],
|
|
257
|
+
true
|
|
258
|
+
)
|
|
259
|
+
)
|
|
260
|
+
);
|
|
261
|
+
}),
|
|
262
|
+
rest.post(
|
|
263
|
+
"*/accounts/:accountId/constellation/project",
|
|
264
|
+
(req, res, ctx) => {
|
|
265
|
+
return res.once(
|
|
266
|
+
ctx.json(
|
|
267
|
+
createFetchResult(
|
|
268
|
+
{
|
|
269
|
+
id: "4806cdcf-9aa7-4fa2-b6a1-77fe9e196680",
|
|
270
|
+
name: "new_project3",
|
|
271
|
+
runtime: "ONNX",
|
|
272
|
+
created_at: "2023-04-28T13:25:58.513105Z",
|
|
273
|
+
},
|
|
274
|
+
true
|
|
275
|
+
)
|
|
276
|
+
)
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
),
|
|
280
|
+
rest.delete(
|
|
281
|
+
"*/accounts/:accountId/constellation/project/4806cdcf-9aa7-4fa2-b6a1-77fe9e196680",
|
|
282
|
+
(req, res, ctx) => {
|
|
283
|
+
return res.once(ctx.json(createFetchResult(null, true)));
|
|
284
|
+
}
|
|
285
|
+
),
|
|
286
|
+
rest.get("*/accounts/:accountId/constellation/catalog", (req, res, ctx) => {
|
|
287
|
+
return res.once(
|
|
288
|
+
ctx.json(
|
|
289
|
+
createFetchResult(
|
|
290
|
+
[
|
|
291
|
+
{
|
|
292
|
+
project: {
|
|
293
|
+
id: "b162a29d-0a6d-4155-bedf-54a01fc8d0ef",
|
|
294
|
+
name: "image-classification",
|
|
295
|
+
runtime: "ONNX",
|
|
296
|
+
created_at: "2023-04-27T18:55:38.417187Z",
|
|
297
|
+
},
|
|
298
|
+
models: [
|
|
299
|
+
{
|
|
300
|
+
id: "edb202d3-f4ac-43ab-8762-3ae6b43c4c57",
|
|
301
|
+
project_id: "b162a29d-0a6d-4155-bedf-54a01fc8d0ef",
|
|
302
|
+
name: "squeezenet1_1",
|
|
303
|
+
description: null,
|
|
304
|
+
created_at: "2023-04-27T18:56:15.305087Z",
|
|
305
|
+
},
|
|
306
|
+
],
|
|
307
|
+
},
|
|
308
|
+
],
|
|
309
|
+
true
|
|
310
|
+
)
|
|
311
|
+
)
|
|
312
|
+
);
|
|
313
|
+
}),
|
|
314
|
+
rest.get("*/accounts/:accountId/constellation/runtime", (req, res, ctx) => {
|
|
315
|
+
return res.once(ctx.json(createFetchResult(["ONNX", "XGBoost"], true)));
|
|
316
|
+
}),
|
|
317
|
+
rest.post(
|
|
318
|
+
"*/accounts/:accountId/constellation/project/4806cdcf-9aa7-4fa2-b6a1-77fe9e196680/model",
|
|
319
|
+
(req, res, ctx) => {
|
|
320
|
+
return res.once(
|
|
321
|
+
ctx.json(
|
|
322
|
+
createFetchResult(
|
|
323
|
+
{
|
|
324
|
+
id: "2dd35b4e-0c7a-4c7a-a9e2-e33c0e17bc02",
|
|
325
|
+
project_id: "4806cdcf-9aa7-4fa2-b6a1-77fe9e196680",
|
|
326
|
+
name: "model2",
|
|
327
|
+
description: null,
|
|
328
|
+
created_at: "2023-04-28T13:50:37.494090Z",
|
|
329
|
+
},
|
|
330
|
+
true
|
|
331
|
+
)
|
|
332
|
+
)
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
),
|
|
336
|
+
rest.get(
|
|
337
|
+
"*/accounts/:accountId/constellation/project/4806cdcf-9aa7-4fa2-b6a1-77fe9e196680/model",
|
|
338
|
+
(req, res, ctx) => {
|
|
339
|
+
return res.once(
|
|
340
|
+
ctx.json(
|
|
341
|
+
createFetchResult(
|
|
342
|
+
[
|
|
343
|
+
{
|
|
344
|
+
id: "450bb086-3c09-4991-a0cc-eed48c504ae0",
|
|
345
|
+
project_id: "9d478427-dea6-4988-9b16-f6f8888d974c",
|
|
346
|
+
name: "model1",
|
|
347
|
+
description: null,
|
|
348
|
+
created_at: "2023-04-28T11:15:14.806217Z",
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
id: "2dd35b4e-0c7a-4c7a-a9e2-e33c0e17bc02",
|
|
352
|
+
project_id: "9d478427-dea6-4988-9b16-f6f8888d974c",
|
|
353
|
+
name: "model2",
|
|
354
|
+
description: null,
|
|
355
|
+
created_at: "2023-04-28T13:50:37.494090Z",
|
|
356
|
+
},
|
|
357
|
+
],
|
|
358
|
+
true
|
|
359
|
+
)
|
|
360
|
+
)
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
),
|
|
364
|
+
rest.delete(
|
|
365
|
+
"*/accounts/:accountId/constellation/project/4806cdcf-9aa7-4fa2-b6a1-77fe9e196680/model/2dd35b4e-0c7a-4c7a-a9e2-e33c0e17bc02",
|
|
366
|
+
(req, res, ctx) => {
|
|
367
|
+
return res.once(ctx.json(createFetchResult(null, true)));
|
|
368
|
+
}
|
|
369
|
+
)
|
|
370
|
+
);
|
|
371
|
+
}
|