storyblok 3.23.0 → 3.24.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 +19 -1
- package/package.json +1 -1
- package/src/tasks/delete-components.js +33 -14
package/README.md
CHANGED
|
@@ -192,7 +192,25 @@ storyblok delete-components <SOURCE> --space <SPACE_ID>
|
|
|
192
192
|
```
|
|
193
193
|
|
|
194
194
|
#### Parameters
|
|
195
|
-
* `source`: can be a URL or path to JSON file.
|
|
195
|
+
* `source`: can be a URL or path to JSON file, the path to a json file could be to a single or multiple files separated by comma, like `./pages-1234.json,../User/components/grid-1234.json`
|
|
196
|
+
|
|
197
|
+
Using an **URL**
|
|
198
|
+
|
|
199
|
+
```sh
|
|
200
|
+
$ storyblok push-components https://raw.githubusercontent.com/storyblok/nuxtdoc/master/seed.components.json --space 67819
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Using a **path** to a single file
|
|
204
|
+
|
|
205
|
+
```sh
|
|
206
|
+
$ storyblok push-components ./components.json --space 67819
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Using a **path** to a multiple files
|
|
210
|
+
|
|
211
|
+
```sh
|
|
212
|
+
$ storyblok push-components ./page.json,../grid.json,./feature.json --space 67819
|
|
213
|
+
```
|
|
196
214
|
|
|
197
215
|
#### Options
|
|
198
216
|
* `space_id`: the space where the command should be executed.
|
package/package.json
CHANGED
|
@@ -7,26 +7,46 @@ const isUrl = source => source.indexOf('http') === 0
|
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Get the data from a local or remote JSON file
|
|
10
|
-
* @param {string}
|
|
10
|
+
* @param {string} path the local path or remote url of the file
|
|
11
11
|
* @returns {Promise<Object>} return the data from the source or an error
|
|
12
12
|
*/
|
|
13
|
-
const
|
|
14
|
-
if (!
|
|
13
|
+
const getDataFromPath = async (path) => {
|
|
14
|
+
if (!path) {
|
|
15
15
|
return {}
|
|
16
16
|
}
|
|
17
|
+
const sources = path.split(',')
|
|
18
|
+
const isList = sources.length > 1
|
|
17
19
|
|
|
18
20
|
try {
|
|
19
|
-
if (isUrl(
|
|
20
|
-
return (await axios.get(
|
|
21
|
+
if (isUrl(path)) {
|
|
22
|
+
return (await axios.get(path)).data
|
|
21
23
|
} else {
|
|
22
|
-
return JSON.parse(fs.readFileSync(
|
|
24
|
+
if (!isList) return JSON.parse(fs.readFileSync(sources[0], 'utf8'))
|
|
25
|
+
|
|
26
|
+
const data = []
|
|
27
|
+
sources.forEach((source) => {
|
|
28
|
+
data.push(JSON.parse(fs.readFileSync(source, 'utf8')))
|
|
29
|
+
})
|
|
30
|
+
return data
|
|
23
31
|
}
|
|
24
32
|
} catch (err) {
|
|
25
|
-
console.error(`${chalk.red('X')} Can not load json file from ${
|
|
33
|
+
console.error(`${chalk.red('X')} Can not load json file from ${path}`)
|
|
26
34
|
return Promise.reject(err)
|
|
27
35
|
}
|
|
28
36
|
}
|
|
29
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Creat an array based in the content parameter and the key provided
|
|
40
|
+
* @param {object} content the data to create a list
|
|
41
|
+
* @param {string} key key to serch in the content
|
|
42
|
+
* @returns {Array} return the data from the source or an error
|
|
43
|
+
*/
|
|
44
|
+
const createContentList = (content, key) => {
|
|
45
|
+
if (content[key]) return content[key]
|
|
46
|
+
else if (Array.isArray(content)) return [...content]
|
|
47
|
+
else return [content]
|
|
48
|
+
}
|
|
49
|
+
|
|
30
50
|
/**
|
|
31
51
|
* Delete all components from your Space that occur in your Local JSON.
|
|
32
52
|
* @param api {Object}
|
|
@@ -37,7 +57,8 @@ const getDataFromSource = async (source) => {
|
|
|
37
57
|
*/
|
|
38
58
|
const deleteComponents = async (api, { source, reversed = false, dryRun = false }) => {
|
|
39
59
|
try {
|
|
40
|
-
const
|
|
60
|
+
const rawComponents = (await getDataFromPath(source)) || []
|
|
61
|
+
const sourceComponents = createContentList(rawComponents, 'components')
|
|
41
62
|
if (!reversed) {
|
|
42
63
|
return deleteAllComponents(api, sourceComponents, dryRun)
|
|
43
64
|
}
|
|
@@ -71,19 +92,17 @@ const deleteAllComponents = async (api, components, dryrun) => {
|
|
|
71
92
|
* @returns {Promise<void>}
|
|
72
93
|
*/
|
|
73
94
|
const deleteComponentsReversed = async (api, components, spaceComponents, dryrun) => {
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
.filter((value, index, self) =>
|
|
77
|
-
self.findIndex((o, i) => o.id === value.id && i !== index) < 0)
|
|
95
|
+
const toDeleteSpaceComponents = spaceComponents
|
|
96
|
+
.filter(spaceComponent => components.findIndex(o => o.name === spaceComponent.name) < 0)
|
|
78
97
|
console.log(chalk.blue('-') + ' Deleting all components which do not appear in the given source.')
|
|
79
|
-
for (const c of
|
|
98
|
+
for (const c of toDeleteSpaceComponents) {
|
|
80
99
|
await deleteComponentAndSkip(api, c, dryrun)
|
|
81
100
|
}
|
|
82
101
|
}
|
|
83
102
|
|
|
84
103
|
const deleteComponentAndSkip = async (api, c, dryrun) => {
|
|
85
104
|
try {
|
|
86
|
-
return await deleteComponent(api, { comp: c.
|
|
105
|
+
return await deleteComponent(api, { comp: c.name, dryrun: dryrun })
|
|
87
106
|
} catch (e) {
|
|
88
107
|
console.log(chalk.red('-') + ' Error deleting component ' + chalk.blue(c.name) + '! Skipped...')
|
|
89
108
|
}
|