@sanity/cli 6.3.1 → 6.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/README.md +311 -452
- package/dist/actions/build/decorateIndexWithStagingScript.js +16 -0
- package/dist/actions/build/decorateIndexWithStagingScript.js.map +1 -0
- package/dist/actions/build/writeSanityRuntime.js +3 -2
- package/dist/actions/build/writeSanityRuntime.js.map +1 -1
- package/dist/actions/dataset/create.js +4 -0
- package/dist/actions/dataset/create.js.map +1 -1
- package/dist/actions/deploy/findUserApplicationForApp.js +1 -0
- package/dist/actions/deploy/findUserApplicationForApp.js.map +1 -1
- package/dist/actions/deploy/types.js +1 -1
- package/dist/actions/deploy/types.js.map +1 -1
- package/dist/actions/init/bootstrapLocalTemplate.js +16 -1
- package/dist/actions/init/bootstrapLocalTemplate.js.map +1 -1
- package/dist/actions/init/initApp.js +72 -0
- package/dist/actions/init/initApp.js.map +1 -0
- package/dist/actions/init/initHelpers.js +37 -0
- package/dist/actions/init/initHelpers.js.map +1 -0
- package/dist/actions/init/initNextJs.js +246 -0
- package/dist/actions/init/initNextJs.js.map +1 -0
- package/dist/actions/init/initStudio.js +127 -0
- package/dist/actions/init/initStudio.js.map +1 -0
- package/dist/actions/init/scaffoldTemplate.js +114 -0
- package/dist/actions/init/scaffoldTemplate.js.map +1 -0
- package/dist/actions/init/templates/appQuickstart.js +2 -1
- package/dist/actions/init/templates/appQuickstart.js.map +1 -1
- package/dist/actions/init/templates/appSanityUi.js +2 -1
- package/dist/actions/init/templates/appSanityUi.js.map +1 -1
- package/dist/actions/init/templates/nextjs/index.js +1 -2
- package/dist/actions/init/templates/nextjs/index.js.map +1 -1
- package/dist/actions/init/templates/shopify.js +6 -6
- package/dist/actions/init/templates/shopify.js.map +1 -1
- package/dist/actions/init/templates/shopifyOnline.js +2 -2
- package/dist/actions/init/templates/shopifyOnline.js.map +1 -1
- package/dist/actions/manifest/types.js +1 -1
- package/dist/actions/manifest/types.js.map +1 -1
- package/dist/actions/mcp/detectAvailableEditors.js +16 -3
- package/dist/actions/mcp/detectAvailableEditors.js.map +1 -1
- package/dist/actions/mcp/editorConfigs.js +192 -132
- package/dist/actions/mcp/editorConfigs.js.map +1 -1
- package/dist/actions/mcp/setupMCP.js +4 -1
- package/dist/actions/mcp/setupMCP.js.map +1 -1
- package/dist/actions/mcp/writeMCPConfig.js +2 -2
- package/dist/actions/mcp/writeMCPConfig.js.map +1 -1
- package/dist/actions/schema/extractSchema.js +5 -7
- package/dist/actions/schema/extractSchema.js.map +1 -1
- package/dist/actions/schema/types.js +3 -3
- package/dist/actions/schema/types.js.map +1 -1
- package/dist/actions/users/validateEmail.js +2 -2
- package/dist/actions/users/validateEmail.js.map +1 -1
- package/dist/commands/backups/disable.js +1 -1
- package/dist/commands/backups/disable.js.map +1 -1
- package/dist/commands/backups/download.js +1 -1
- package/dist/commands/backups/download.js.map +1 -1
- package/dist/commands/backups/enable.js +1 -1
- package/dist/commands/backups/enable.js.map +1 -1
- package/dist/commands/backups/list.js +1 -1
- package/dist/commands/backups/list.js.map +1 -1
- package/dist/commands/build.js +1 -1
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/cors/add.js +1 -1
- package/dist/commands/cors/add.js.map +1 -1
- package/dist/commands/cors/delete.js +1 -1
- package/dist/commands/cors/delete.js.map +1 -1
- package/dist/commands/cors/list.js +2 -2
- package/dist/commands/cors/list.js.map +1 -1
- package/dist/commands/datasets/alias/create.js +1 -1
- package/dist/commands/datasets/alias/create.js.map +1 -1
- package/dist/commands/datasets/alias/delete.js +1 -1
- package/dist/commands/datasets/alias/delete.js.map +1 -1
- package/dist/commands/datasets/alias/link.js +1 -1
- package/dist/commands/datasets/alias/link.js.map +1 -1
- package/dist/commands/datasets/alias/unlink.js +1 -1
- package/dist/commands/datasets/alias/unlink.js.map +1 -1
- package/dist/commands/datasets/copy.js +15 -1
- package/dist/commands/datasets/copy.js.map +1 -1
- package/dist/commands/datasets/create.js +1 -1
- package/dist/commands/datasets/create.js.map +1 -1
- package/dist/commands/datasets/delete.js +1 -1
- package/dist/commands/datasets/delete.js.map +1 -1
- package/dist/commands/datasets/embeddings/enable.js +11 -0
- package/dist/commands/datasets/embeddings/enable.js.map +1 -1
- package/dist/commands/datasets/export.js +2 -2
- package/dist/commands/datasets/export.js.map +1 -1
- package/dist/commands/datasets/list.js +2 -2
- package/dist/commands/datasets/list.js.map +1 -1
- package/dist/commands/debug.js +1 -1
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/deploy.js +3 -3
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.js +5 -5
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/docs/browse.js +1 -1
- package/dist/commands/docs/browse.js.map +1 -1
- package/dist/commands/documents/delete.js +1 -1
- package/dist/commands/documents/delete.js.map +1 -1
- package/dist/commands/exec.js +2 -2
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/graphql/deploy.js +2 -2
- package/dist/commands/graphql/deploy.js.map +1 -1
- package/dist/commands/graphql/list.js +2 -2
- package/dist/commands/graphql/list.js.map +1 -1
- package/dist/commands/hooks/create.js +2 -2
- package/dist/commands/hooks/create.js.map +1 -1
- package/dist/commands/hooks/delete.js +5 -5
- package/dist/commands/hooks/delete.js.map +1 -1
- package/dist/commands/hooks/list.js +3 -3
- package/dist/commands/hooks/list.js.map +1 -1
- package/dist/commands/hooks/logs.js +5 -5
- package/dist/commands/hooks/logs.js.map +1 -1
- package/dist/commands/init.js +175 -490
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.js +1 -1
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/learn.js +1 -1
- package/dist/commands/learn.js.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +1 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/manage.js +1 -1
- package/dist/commands/manage.js.map +1 -1
- package/dist/commands/manifest/extract.js +2 -2
- package/dist/commands/manifest/extract.js.map +1 -1
- package/dist/commands/mcp/configure.js +1 -1
- package/dist/commands/mcp/configure.js.map +1 -1
- package/dist/commands/media/delete-aspect.js +1 -1
- package/dist/commands/media/delete-aspect.js.map +1 -1
- package/dist/commands/media/export.js +1 -1
- package/dist/commands/media/export.js.map +1 -1
- package/dist/commands/preview.js +3 -3
- package/dist/commands/preview.js.map +1 -1
- package/dist/commands/projects/list.js +4 -2
- package/dist/commands/projects/list.js.map +1 -1
- package/dist/commands/schemas/deploy.js +3 -4
- package/dist/commands/schemas/deploy.js.map +1 -1
- package/dist/commands/schemas/extract.js +3 -3
- package/dist/commands/schemas/extract.js.map +1 -1
- package/dist/commands/schemas/list.js +4 -5
- package/dist/commands/schemas/list.js.map +1 -1
- package/dist/commands/telemetry/disable.js +2 -2
- package/dist/commands/telemetry/disable.js.map +1 -1
- package/dist/commands/telemetry/enable.js +2 -2
- package/dist/commands/telemetry/enable.js.map +1 -1
- package/dist/commands/telemetry/status.js +2 -2
- package/dist/commands/telemetry/status.js.map +1 -1
- package/dist/commands/tokens/add.js +1 -1
- package/dist/commands/tokens/add.js.map +1 -1
- package/dist/commands/tokens/delete.js +1 -1
- package/dist/commands/tokens/delete.js.map +1 -1
- package/dist/commands/tokens/list.js +2 -2
- package/dist/commands/tokens/list.js.map +1 -1
- package/dist/commands/users/list.js +1 -1
- package/dist/commands/users/list.js.map +1 -1
- package/dist/commands/versions.js +1 -1
- package/dist/commands/versions.js.map +1 -1
- package/dist/hooks/prerun/injectEnvVariables.js +3 -5
- package/dist/hooks/prerun/injectEnvVariables.js.map +1 -1
- package/dist/server/vite/plugin-sanity-build-entries.js +3 -2
- package/dist/server/vite/plugin-sanity-build-entries.js.map +1 -1
- package/dist/services/datasets.js +2 -1
- package/dist/services/datasets.js.map +1 -1
- package/dist/telemetry/init.telemetry.js.map +1 -1
- package/dist/util/packageManager/installationInfo/detectPackages.js +13 -7
- package/dist/util/packageManager/installationInfo/detectPackages.js.map +1 -1
- package/dist/util/telemetry/createTelemetryStore.js +27 -12
- package/dist/util/telemetry/createTelemetryStore.js.map +1 -1
- package/dist/util/update/fetchUpdateInfo.js +40 -0
- package/dist/util/update/fetchUpdateInfo.js.map +1 -0
- package/dist/util/update/fetchUpdateInfo.worker.js +19 -0
- package/dist/util/update/fetchUpdateInfo.worker.js.map +1 -0
- package/dist/util/update/getRunnerUpdateCommand.js +33 -0
- package/dist/util/update/getRunnerUpdateCommand.js.map +1 -0
- package/dist/util/update/getUpdateCommand.js +6 -7
- package/dist/util/update/getUpdateCommand.js.map +1 -1
- package/dist/util/update/packageRunner.js +10 -0
- package/dist/util/update/packageRunner.js.map +1 -0
- package/dist/util/update/resolveRunnerPackage.js +45 -0
- package/dist/util/update/resolveRunnerPackage.js.map +1 -0
- package/dist/util/update/resolveUpdateTarget.js +31 -0
- package/dist/util/update/resolveUpdateTarget.js.map +1 -0
- package/dist/util/update/showNotificationUpdate.js +8 -6
- package/dist/util/update/showNotificationUpdate.js.map +1 -1
- package/dist/util/update/updateChecker.js +73 -38
- package/dist/util/update/updateChecker.js.map +1 -1
- package/dist/util/validateProjection.js +121 -0
- package/dist/util/validateProjection.js.map +1 -0
- package/oclif.manifest.json +698 -681
- package/package.json +24 -23
- package/templates/app-quickstart/src/App.tsx +2 -2
- package/templates/app-sanity-ui/src/App.tsx +2 -2
- package/templates/shopify/schemaTypes/objects/hotspot/imageWithProductHotspotsType.ts +1 -1
- package/dist/util/update/fetchLatestVersion.js +0 -21
- package/dist/util/update/fetchLatestVersion.js.map +0 -1
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { parse } from 'groq-js';
|
|
2
|
+
/**
|
|
3
|
+
* Validates that a string is a syntactically valid GROQ object projection
|
|
4
|
+
* suitable for embeddings indexing.
|
|
5
|
+
*
|
|
6
|
+
* Rejects:
|
|
7
|
+
* - Invalid GROQ syntax
|
|
8
|
+
* - Non-object expressions (filters, function calls, literals, etc.)
|
|
9
|
+
* - Dereferences (`->`) -- the indexer cannot resolve cross-document references
|
|
10
|
+
* - Full queries (`*[...]`) -- dataset scans are not supported
|
|
11
|
+
* - `user::` namespace functions -- user-defined functions are not available
|
|
12
|
+
*/ export function validateProjection(projection) {
|
|
13
|
+
const tree = parse(projection);
|
|
14
|
+
if (tree.type !== 'Object') {
|
|
15
|
+
throw new Error(`Expected a GROQ projection (e.g. "{ title, body }"), but received a ${tree.type} expression`);
|
|
16
|
+
}
|
|
17
|
+
walk(tree);
|
|
18
|
+
}
|
|
19
|
+
function walk(node) {
|
|
20
|
+
if (!node) return;
|
|
21
|
+
switch(node.type){
|
|
22
|
+
case 'AccessAttribute':
|
|
23
|
+
case 'AccessElement':
|
|
24
|
+
case 'ArrayCoerce':
|
|
25
|
+
case 'Asc':
|
|
26
|
+
case 'Desc':
|
|
27
|
+
case 'Group':
|
|
28
|
+
case 'Neg':
|
|
29
|
+
case 'Not':
|
|
30
|
+
case 'Pos':
|
|
31
|
+
case 'Slice':
|
|
32
|
+
{
|
|
33
|
+
walk(node.base);
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
case 'And':
|
|
37
|
+
case 'OpCall':
|
|
38
|
+
case 'Or':
|
|
39
|
+
{
|
|
40
|
+
walk(node.left);
|
|
41
|
+
walk(node.right);
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
case 'Array':
|
|
45
|
+
{
|
|
46
|
+
for (const el of node.elements)walk(el.value);
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
case 'Everything':
|
|
50
|
+
{
|
|
51
|
+
throw new Error('Projection must not contain full queries (*[...])');
|
|
52
|
+
}
|
|
53
|
+
case 'Deref':
|
|
54
|
+
{
|
|
55
|
+
throw new Error('Projection must not contain dereferences (->)');
|
|
56
|
+
}
|
|
57
|
+
case 'FuncCall':
|
|
58
|
+
{
|
|
59
|
+
if (node.namespace === 'user') {
|
|
60
|
+
throw new Error('Projection must not contain user:: functions');
|
|
61
|
+
}
|
|
62
|
+
for (const arg of node.args)walk(arg);
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
case 'Filter':
|
|
66
|
+
case 'FlatMap':
|
|
67
|
+
case 'Map':
|
|
68
|
+
case 'Projection':
|
|
69
|
+
{
|
|
70
|
+
walk(node.base);
|
|
71
|
+
walk(node.expr);
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
case 'InRange':
|
|
75
|
+
{
|
|
76
|
+
walk(node.base);
|
|
77
|
+
walk(node.left);
|
|
78
|
+
walk(node.right);
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
case 'Object':
|
|
82
|
+
{
|
|
83
|
+
for (const attr of node.attributes){
|
|
84
|
+
switch(attr.type){
|
|
85
|
+
case 'ObjectAttributeValue':
|
|
86
|
+
case 'ObjectSplat':
|
|
87
|
+
{
|
|
88
|
+
walk(attr.value);
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
case 'ObjectConditionalSplat':
|
|
92
|
+
{
|
|
93
|
+
walk(attr.condition);
|
|
94
|
+
walk(attr.value);
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
default:
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
case 'PipeFuncCall':
|
|
103
|
+
{
|
|
104
|
+
walk(node.base);
|
|
105
|
+
for (const arg of node.args)walk(arg);
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case 'Select':
|
|
109
|
+
{
|
|
110
|
+
for (const alt of node.alternatives){
|
|
111
|
+
walk(alt.condition);
|
|
112
|
+
walk(alt.value);
|
|
113
|
+
}
|
|
114
|
+
walk(node.fallback);
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
default:
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
//# sourceMappingURL=validateProjection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/util/validateProjection.ts"],"sourcesContent":["import {type ExprNode, parse} from 'groq-js'\n\n/**\n * Validates that a string is a syntactically valid GROQ object projection\n * suitable for embeddings indexing.\n *\n * Rejects:\n * - Invalid GROQ syntax\n * - Non-object expressions (filters, function calls, literals, etc.)\n * - Dereferences (`->`) -- the indexer cannot resolve cross-document references\n * - Full queries (`*[...]`) -- dataset scans are not supported\n * - `user::` namespace functions -- user-defined functions are not available\n */\nexport function validateProjection(projection: string): void {\n const tree = parse(projection)\n if (tree.type !== 'Object') {\n throw new Error(\n `Expected a GROQ projection (e.g. \"{ title, body }\"), but received a ${tree.type} expression`,\n )\n }\n walk(tree)\n}\n\nfunction walk(node: ExprNode | undefined): void {\n if (!node) return\n\n switch (node.type) {\n case 'AccessAttribute':\n case 'AccessElement':\n case 'ArrayCoerce':\n case 'Asc':\n case 'Desc':\n case 'Group':\n case 'Neg':\n case 'Not':\n case 'Pos':\n case 'Slice': {\n walk(node.base)\n break\n }\n case 'And':\n case 'OpCall':\n case 'Or': {\n walk(node.left)\n walk(node.right)\n break\n }\n case 'Array': {\n for (const el of node.elements) walk(el.value)\n break\n }\n case 'Everything': {\n throw new Error('Projection must not contain full queries (*[...])')\n }\n case 'Deref': {\n throw new Error('Projection must not contain dereferences (->)')\n }\n case 'FuncCall': {\n if (node.namespace === 'user') {\n throw new Error('Projection must not contain user:: functions')\n }\n for (const arg of node.args) walk(arg)\n break\n }\n case 'Filter':\n case 'FlatMap':\n case 'Map':\n case 'Projection': {\n walk(node.base)\n walk(node.expr)\n break\n }\n case 'InRange': {\n walk(node.base)\n walk(node.left)\n walk(node.right)\n break\n }\n case 'Object': {\n for (const attr of node.attributes) {\n switch (attr.type) {\n case 'ObjectAttributeValue':\n case 'ObjectSplat': {\n walk(attr.value)\n break\n }\n case 'ObjectConditionalSplat': {\n walk(attr.condition)\n walk(attr.value)\n break\n }\n default:\n }\n }\n break\n }\n case 'PipeFuncCall': {\n walk(node.base)\n for (const arg of node.args) walk(arg)\n break\n }\n case 'Select': {\n for (const alt of node.alternatives) {\n walk(alt.condition)\n walk(alt.value)\n }\n walk(node.fallback)\n break\n }\n default:\n }\n}\n"],"names":["parse","validateProjection","projection","tree","type","Error","walk","node","base","left","right","el","elements","value","namespace","arg","args","expr","attr","attributes","condition","alt","alternatives","fallback"],"mappings":"AAAA,SAAuBA,KAAK,QAAO,UAAS;AAE5C;;;;;;;;;;CAUC,GACD,OAAO,SAASC,mBAAmBC,UAAkB;IACnD,MAAMC,OAAOH,MAAME;IACnB,IAAIC,KAAKC,IAAI,KAAK,UAAU;QAC1B,MAAM,IAAIC,MACR,CAAC,oEAAoE,EAAEF,KAAKC,IAAI,CAAC,WAAW,CAAC;IAEjG;IACAE,KAAKH;AACP;AAEA,SAASG,KAAKC,IAA0B;IACtC,IAAI,CAACA,MAAM;IAEX,OAAQA,KAAKH,IAAI;QACf,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YAAS;gBACZE,KAAKC,KAAKC,IAAI;gBACd;YACF;QACA,KAAK;QACL,KAAK;QACL,KAAK;YAAM;gBACTF,KAAKC,KAAKE,IAAI;gBACdH,KAAKC,KAAKG,KAAK;gBACf;YACF;QACA,KAAK;YAAS;gBACZ,KAAK,MAAMC,MAAMJ,KAAKK,QAAQ,CAAEN,KAAKK,GAAGE,KAAK;gBAC7C;YACF;QACA,KAAK;YAAc;gBACjB,MAAM,IAAIR,MAAM;YAClB;QACA,KAAK;YAAS;gBACZ,MAAM,IAAIA,MAAM;YAClB;QACA,KAAK;YAAY;gBACf,IAAIE,KAAKO,SAAS,KAAK,QAAQ;oBAC7B,MAAM,IAAIT,MAAM;gBAClB;gBACA,KAAK,MAAMU,OAAOR,KAAKS,IAAI,CAAEV,KAAKS;gBAClC;YACF;QACA,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YAAc;gBACjBT,KAAKC,KAAKC,IAAI;gBACdF,KAAKC,KAAKU,IAAI;gBACd;YACF;QACA,KAAK;YAAW;gBACdX,KAAKC,KAAKC,IAAI;gBACdF,KAAKC,KAAKE,IAAI;gBACdH,KAAKC,KAAKG,KAAK;gBACf;YACF;QACA,KAAK;YAAU;gBACb,KAAK,MAAMQ,QAAQX,KAAKY,UAAU,CAAE;oBAClC,OAAQD,KAAKd,IAAI;wBACf,KAAK;wBACL,KAAK;4BAAe;gCAClBE,KAAKY,KAAKL,KAAK;gCACf;4BACF;wBACA,KAAK;4BAA0B;gCAC7BP,KAAKY,KAAKE,SAAS;gCACnBd,KAAKY,KAAKL,KAAK;gCACf;4BACF;wBACA;oBACF;gBACF;gBACA;YACF;QACA,KAAK;YAAgB;gBACnBP,KAAKC,KAAKC,IAAI;gBACd,KAAK,MAAMO,OAAOR,KAAKS,IAAI,CAAEV,KAAKS;gBAClC;YACF;QACA,KAAK;YAAU;gBACb,KAAK,MAAMM,OAAOd,KAAKe,YAAY,CAAE;oBACnChB,KAAKe,IAAID,SAAS;oBAClBd,KAAKe,IAAIR,KAAK;gBAChB;gBACAP,KAAKC,KAAKgB,QAAQ;gBAClB;YACF;QACA;IACF;AACF"}
|