@agility/content-sync 1.1.9 → 1.2.0-beta.2

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.
Files changed (66) hide show
  1. package/.babelrc +9 -6
  2. package/dist/agility-sync-sdk.node.js +9271 -9445
  3. package/dist/index.d.ts +20 -0
  4. package/dist/index.js +25 -0
  5. package/dist/methods/clearSync.d.ts +3 -0
  6. package/dist/methods/clearSync.js +21 -0
  7. package/dist/methods/runSync.d.ts +39 -0
  8. package/dist/methods/runSync.js +94 -0
  9. package/dist/methods/syncAssets.d.ts +18 -0
  10. package/dist/methods/syncAssets.js +34 -0
  11. package/dist/methods/syncContainers.d.ts +18 -0
  12. package/dist/methods/syncContainers.js +34 -0
  13. package/dist/methods/syncContent.d.ts +20 -0
  14. package/dist/methods/syncContent.js +83 -0
  15. package/dist/methods/syncContentModels.d.ts +10 -0
  16. package/dist/methods/syncContentModels.js +34 -0
  17. package/dist/methods/syncGalleries.d.ts +18 -0
  18. package/dist/methods/syncGalleries.js +34 -0
  19. package/dist/methods/syncPageModels.d.ts +18 -0
  20. package/dist/methods/syncPageModels.js +34 -0
  21. package/dist/methods/syncPages.d.ts +20 -0
  22. package/dist/methods/syncPages.js +82 -0
  23. package/dist/store-interface-console.d.ts +163 -0
  24. package/dist/store-interface-console.js +146 -0
  25. package/dist/store-interface-filesystem.d.ts +166 -0
  26. package/dist/store-interface-filesystem.js +362 -0
  27. package/dist/store-interface.d.ts +69 -0
  28. package/dist/store-interface.js +430 -0
  29. package/dist/sync-client.d.ts +29 -0
  30. package/dist/sync-client.js +126 -0
  31. package/dist/types/AgilityClient.d.ts +12 -0
  32. package/dist/types/AgilityClient.js +1 -0
  33. package/dist/types/Asset.d.ts +18 -0
  34. package/dist/types/Asset.js +1 -0
  35. package/dist/types/Container.d.ts +15 -0
  36. package/dist/types/Container.js +1 -0
  37. package/dist/types/ContentItem.d.ts +20 -0
  38. package/dist/types/ContentItem.js +1 -0
  39. package/dist/types/ContentModel.d.ts +23 -0
  40. package/dist/types/ContentModel.js +1 -0
  41. package/dist/types/Gallery.d.ts +15 -0
  42. package/dist/types/Gallery.js +1 -0
  43. package/dist/types/Page.d.ts +14 -0
  44. package/dist/types/Page.js +1 -0
  45. package/dist/types/PageModel.d.ts +36 -0
  46. package/dist/types/PageModel.js +1 -0
  47. package/dist/types/StoreInterface.d.ts +165 -0
  48. package/dist/types/StoreInterface.js +1 -0
  49. package/dist/types/SyncProgress.d.ts +11 -0
  50. package/dist/types/SyncProgress.js +1 -0
  51. package/dist/types.d.ts +11 -0
  52. package/dist/types.js +1 -0
  53. package/dist/util.d.ts +7 -0
  54. package/dist/util.js +23 -0
  55. package/package.json +7 -3
  56. package/src/methods/clearSync.js +1 -2
  57. package/src/methods/runSync.js +11 -13
  58. package/src/methods/syncContent.js +5 -5
  59. package/src/methods/syncPages.js +3 -3
  60. package/src/store-interface.js +405 -423
  61. package/src/sync-client.js +17 -10
  62. package/test/03-store.getContentItem.tests.js +6 -4
  63. package/test/04-store.getContentList.tests.js +10 -10
  64. package/test/99-clearSync.tests.js +3 -3
  65. package/test/_syncClients.config.js +3 -3
  66. package/webpack.config.js +11 -0
@@ -0,0 +1,15 @@
1
+ export interface Gallery {
2
+ id: number;
3
+ name: string;
4
+ description?: string;
5
+ items: GalleryItem[];
6
+ languageCode: string;
7
+ }
8
+ export interface GalleryItem {
9
+ id: number;
10
+ title: string;
11
+ description?: string;
12
+ url: string;
13
+ thumbnailUrl?: string;
14
+ order: number;
15
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ export interface Page {
2
+ pageID: number;
3
+ properties: {
4
+ state: number;
5
+ };
6
+ zones: {
7
+ [zoneName: string]: PageModule[];
8
+ };
9
+ }
10
+ export interface PageModule {
11
+ item: {
12
+ contentid: number;
13
+ };
14
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,36 @@
1
+ export interface PageModel {
2
+ id: number;
3
+ name: string;
4
+ definitionName: string;
5
+ description?: string;
6
+ zones: PageModelZone[];
7
+ languageCode: string;
8
+ }
9
+ export interface PageModelZone {
10
+ name: string;
11
+ label: string;
12
+ type: string;
13
+ required: boolean;
14
+ modules: PageModelModule[];
15
+ }
16
+ export interface PageModelModule {
17
+ name: string;
18
+ label: string;
19
+ type: string;
20
+ fields: PageModelField[];
21
+ }
22
+ export interface PageModelField {
23
+ name: string;
24
+ label: string;
25
+ type: string;
26
+ required: boolean;
27
+ defaultValue?: any;
28
+ validation?: PageModelFieldValidation;
29
+ }
30
+ export interface PageModelFieldValidation {
31
+ type: string;
32
+ message?: string;
33
+ pattern?: string;
34
+ min?: number;
35
+ max?: number;
36
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,165 @@
1
+ import type { ContentItem } from './ContentItem';
2
+ import type { Page } from './Page';
3
+ import type { Asset } from './Asset';
4
+ import type { Gallery } from './Gallery';
5
+ import type { Container } from './Container';
6
+ import type { ContentModel } from './ContentModel';
7
+ import type { PageModel } from './PageModel';
8
+ export interface StoreOptions {
9
+ rootPath: string;
10
+ languageCode: string;
11
+ clearData?: boolean;
12
+ }
13
+ export interface StoreInterface {
14
+ clearItems(options: StoreOptions): Promise<void>;
15
+ deleteItem(params: {
16
+ options: StoreOptions;
17
+ itemType: string;
18
+ languageCode: string;
19
+ itemID: string | number;
20
+ }): Promise<void>;
21
+ getItem(params: {
22
+ options: StoreOptions;
23
+ itemType: string;
24
+ languageCode: string;
25
+ itemID: string | number;
26
+ }): Promise<any>;
27
+ saveItem(params: {
28
+ options: StoreOptions;
29
+ item: any;
30
+ itemType: string;
31
+ languageCode: string;
32
+ itemID: string | number;
33
+ }): Promise<void>;
34
+ getContentItem(options: {
35
+ contentID: number;
36
+ languageCode: string;
37
+ }): Promise<ContentItem | null>;
38
+ saveContentItem(options: {
39
+ contentItem: ContentItem;
40
+ languageCode: string;
41
+ }): Promise<void>;
42
+ getContentItems(options: {
43
+ languageCode: string;
44
+ }): Promise<ContentItem[]>;
45
+ saveContentItems(options: {
46
+ contentItems: ContentItem[];
47
+ languageCode: string;
48
+ }): Promise<void>;
49
+ getPage(options: {
50
+ pageID: number;
51
+ languageCode: string;
52
+ }): Promise<Page | null>;
53
+ savePageItem(options: {
54
+ page: Page;
55
+ languageCode: string;
56
+ }): Promise<void>;
57
+ getPages(options: {
58
+ languageCode: string;
59
+ }): Promise<Page[]>;
60
+ savePageItems(options: {
61
+ pages: Page[];
62
+ languageCode: string;
63
+ }): Promise<void>;
64
+ getAsset(options: {
65
+ assetID: number;
66
+ languageCode: string;
67
+ }): Promise<Asset | null>;
68
+ saveAsset(options: {
69
+ asset: Asset;
70
+ languageCode: string;
71
+ }): Promise<void>;
72
+ getAssets(options: {
73
+ languageCode: string;
74
+ }): Promise<Asset[]>;
75
+ saveAssets(options: {
76
+ assets: Asset[];
77
+ languageCode: string;
78
+ }): Promise<void>;
79
+ getGallery(options: {
80
+ galleryID: number;
81
+ languageCode: string;
82
+ }): Promise<Gallery | null>;
83
+ saveGallery(options: {
84
+ gallery: Gallery;
85
+ languageCode: string;
86
+ }): Promise<void>;
87
+ getGalleries(options: {
88
+ languageCode: string;
89
+ }): Promise<Gallery[]>;
90
+ saveGalleries(options: {
91
+ galleries: Gallery[];
92
+ languageCode: string;
93
+ }): Promise<void>;
94
+ getContainer(options: {
95
+ containerID: number;
96
+ languageCode: string;
97
+ }): Promise<Container | null>;
98
+ saveContainer(options: {
99
+ container: Container;
100
+ languageCode: string;
101
+ }): Promise<void>;
102
+ getContainers(options: {
103
+ languageCode: string;
104
+ }): Promise<Container[]>;
105
+ saveContainers(options: {
106
+ containers: Container[];
107
+ languageCode: string;
108
+ }): Promise<void>;
109
+ getContentModel(options: {
110
+ contentModelID: number;
111
+ languageCode: string;
112
+ }): Promise<ContentModel | null>;
113
+ saveContentModel(options: {
114
+ contentModel: ContentModel;
115
+ languageCode: string;
116
+ }): Promise<void>;
117
+ getContentModels(options: {
118
+ languageCode: string;
119
+ }): Promise<ContentModel[]>;
120
+ saveContentModels(options: {
121
+ contentModels: ContentModel[];
122
+ languageCode: string;
123
+ }): Promise<void>;
124
+ getPageModel(options: {
125
+ pageModelID: number;
126
+ languageCode: string;
127
+ }): Promise<PageModel | null>;
128
+ savePageModel(options: {
129
+ pageModel: PageModel;
130
+ languageCode: string;
131
+ }): Promise<void>;
132
+ getPageModels(options: {
133
+ languageCode: string;
134
+ }): Promise<PageModel[]>;
135
+ savePageModels(options: {
136
+ pageModels: PageModel[];
137
+ languageCode: string;
138
+ }): Promise<void>;
139
+ getList(options: {
140
+ listName: string;
141
+ languageCode: string;
142
+ }): Promise<any[]>;
143
+ saveList(options: {
144
+ listName: string;
145
+ items: any[];
146
+ languageCode: string;
147
+ }): Promise<void>;
148
+ mergeItemToList(params: {
149
+ options: StoreOptions;
150
+ item: any;
151
+ languageCode: string;
152
+ itemID: string | number;
153
+ referenceName: string;
154
+ definitionName: string;
155
+ }): Promise<void>;
156
+ removeItemFromList(options: {
157
+ listName: string;
158
+ itemID: number;
159
+ languageCode: string;
160
+ }): Promise<void>;
161
+ initialize(options: StoreOptions): Promise<void>;
162
+ clearData(options: {
163
+ languageCode: string;
164
+ }): Promise<void>;
165
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ export interface SyncProgress {
2
+ status: 'init' | 'progress' | 'done';
3
+ current?: number;
4
+ total?: number;
5
+ item?: any;
6
+ languageCode?: string;
7
+ }
8
+ export interface SyncOptions {
9
+ languageCode: string;
10
+ clearData?: boolean;
11
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ export interface SyncProgress {
2
+ status: 'init' | 'progress' | 'done';
3
+ current?: number;
4
+ total?: number;
5
+ item?: any;
6
+ languageCode?: string;
7
+ }
8
+ export interface SyncOptions {
9
+ languageCode: string;
10
+ clearData?: boolean;
11
+ }
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/dist/util.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export declare const logDebug: (message: string) => void;
2
+ export declare const logInfo: (message: string) => void;
3
+ export declare const logError: (message: string) => void;
4
+ export declare const logWarning: (message: string) => void;
5
+ export declare const logSuccess: (message: string) => void;
6
+ export declare const asyncForEach: <T>(array: T[], callback: (item: T, index: number, array: T[]) => Promise<void>) => Promise<void>;
7
+ export declare const sleep: (ms: number) => Promise<void>;
package/dist/util.js ADDED
@@ -0,0 +1,23 @@
1
+ export const logDebug = (message) => {
2
+ console.debug(message);
3
+ };
4
+ export const logInfo = (message) => {
5
+ console.info(message);
6
+ };
7
+ export const logError = (message) => {
8
+ console.error(message);
9
+ };
10
+ export const logWarning = (message) => {
11
+ console.warn(message);
12
+ };
13
+ export const logSuccess = (message) => {
14
+ console.log(message);
15
+ };
16
+ export const asyncForEach = async (array, callback) => {
17
+ for (let index = 0; index < array.length; index++) {
18
+ await callback(array[index], index, array);
19
+ }
20
+ };
21
+ export const sleep = (ms) => {
22
+ return new Promise(resolve => setTimeout(resolve, ms));
23
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agility/content-sync",
3
- "version": "1.1.9",
3
+ "version": "1.2.0-beta.2",
4
4
  "description": "JavaScript SDK for synchronizing content from Agility CMS",
5
5
  "main": "dist/agility-sync-sdk.node.js",
6
6
  "scripts": {
@@ -17,7 +17,9 @@
17
17
  "contributors": [
18
18
  "Joel Varty",
19
19
  "James Vidler",
20
- "Joshua Isaac"
20
+ "Joshua Isaac",
21
+ "Kevin Tran",
22
+ "Aaron Taylor"
21
23
  ],
22
24
  "bugs": {
23
25
  "url": "https://github.com/agility/agility-sync-sdk/issues"
@@ -32,6 +34,7 @@
32
34
  "@babel/cli": "^7.2.3",
33
35
  "@babel/core": "^7.3.4",
34
36
  "@babel/node": "^7.2.2",
37
+ "@babel/plugin-transform-runtime": "^7.28.0",
35
38
  "@babel/preset-env": "^7.3.4",
36
39
  "@babel/register": "^7.0.0",
37
40
  "agility-jsdoc-template": "1.0.3",
@@ -40,7 +43,8 @@
40
43
  "jsdoc": "^3.5.5",
41
44
  "mocha": "^8.2.1",
42
45
  "nyc": "^15.0.0",
46
+ "regenerator-runtime": "^0.14.1",
43
47
  "webpack": "^4.29.6",
44
48
  "webpack-cli": "^3.2.3"
45
49
  }
46
- }
50
+ }
@@ -1,7 +1,6 @@
1
1
  import { logSuccess } from '../util'
2
2
 
3
- export default async function () {
4
- const storeInterface = this.store;
3
+ export default async function (storeInterface) {
5
4
  await storeInterface.clear();
6
5
  logSuccess(`Cleared Sync Items`);
7
6
  }
@@ -1,9 +1,8 @@
1
1
  import { logInfo, logSuccess } from '../util'
2
2
 
3
3
 
4
- const syncRunner = async function () {
4
+ const syncRunner = async function (config, agilityClient, storeInterface, syncContent, syncPages) {
5
5
 
6
- const storeInterface = this.store.getStore();
7
6
 
8
7
  //if a mutex has been defined, call the wait lock
9
8
  let lockRelease = null
@@ -17,7 +16,7 @@ const syncRunner = async function () {
17
16
 
18
17
 
19
18
  //actually do the sync
20
- await sync(this)
19
+ await sync(config, agilityClient, storeInterface, syncContent, syncPages)
21
20
 
22
21
  } finally {
23
22
  if (lockRelease) {
@@ -28,13 +27,12 @@ const syncRunner = async function () {
28
27
  }
29
28
 
30
29
 
31
- const sync = async (clientObj) => {
30
+ const sync = async (config, agilityClient, storeInterface, syncContent, syncPages) => {
32
31
 
33
- const languageCodes = clientObj.config.languages;
34
- const channels = clientObj.config.channels;
35
- const storeInterface = clientObj.store;
32
+ const languageCodes = config.languages;
33
+ const channels = config.channels;
36
34
 
37
- const modeStr = clientObj.config.isPreview ? "preview" : "live"
35
+ const modeStr = config.isPreview ? "preview" : "live"
38
36
 
39
37
  for (const languageCode of languageCodes) {
40
38
 
@@ -51,8 +49,8 @@ const sync = async (clientObj) => {
51
49
  }
52
50
 
53
51
  logSuccess(`Starting Sync for ${languageCode} - ${modeStr} mode.`);
54
- const newItemToken = await clientObj.syncContent(languageCode, syncState.itemToken);
55
- const newPageToken = await clientObj.syncPages(languageCode, syncState.pageToken);
52
+ const newItemToken = await syncContent(languageCode, syncState.itemToken);
53
+ const newPageToken = await syncPages(languageCode, syncState.pageToken);
56
54
 
57
55
  if (newItemToken != syncState.itemToken
58
56
  || newPageToken != syncState.pageToken) {
@@ -61,10 +59,10 @@ const sync = async (clientObj) => {
61
59
  for (const channelName of channels) {
62
60
  logInfo(`Updating Sitemap channel ${channelName} in ${languageCode}`);
63
61
 
64
- const sitemap = await clientObj.agilityClient.getSitemapFlat({ channelName, languageCode });
62
+ const sitemap = await agilityClient.getSitemapFlat({ channelName, languageCode });
65
63
  storeInterface.saveSitemap({ sitemap, languageCode, channelName });
66
64
 
67
- const sitemapNested = await clientObj.agilityClient.getSitemapNested({ channelName, languageCode });
65
+ const sitemapNested = await agilityClient.getSitemapNested({ channelName, languageCode });
68
66
  storeInterface.saveSitemapNested({ sitemapNested, languageCode, channelName });
69
67
 
70
68
  }
@@ -75,7 +73,7 @@ const sync = async (clientObj) => {
75
73
  let lastAccessDate = null;
76
74
  if (urlRedirections) lastAccessDate = urlRedirections.lastAccessDate;
77
75
 
78
- urlRedirections = await clientObj.agilityClient.getUrlRedirections({ lastAccessDate });
76
+ urlRedirections = await agilityClient.getUrlRedirections({ lastAccessDate });
79
77
  if (urlRedirections && urlRedirections.isUpToDate === false) {
80
78
  logInfo(`URL Redirections Updated and Saved`);
81
79
  await storeInterface.saveUrlRedirections({ urlRedirections, languageCode });
@@ -4,8 +4,8 @@ import { logInfo, logWarning, sleep } from '../util'
4
4
  /**
5
5
  * Sync the content items in the specified Agility Instance.
6
6
  */
7
- export default async function (languageCode, token) {
8
- const storeInterface = this.store;
7
+ export default async function (languageCode, token, storeInterface, agilityClient) {
8
+
9
9
 
10
10
  if (!token) token = 0;
11
11
 
@@ -19,7 +19,7 @@ export default async function (languageCode, token) {
19
19
 
20
20
 
21
21
  //sync content items...
22
- const syncRet = await this.agilityClient.getSyncContent({
22
+ const syncRet = await agilityClient.getSyncContent({
23
23
  syncToken: token,
24
24
  pageSize: 100,
25
25
  languageCode: languageCode,
@@ -35,7 +35,7 @@ export default async function (languageCode, token) {
35
35
  break
36
36
  }
37
37
 
38
- if (! busy) {
38
+ if (!busy) {
39
39
  //first time we're busy...
40
40
  busy = true
41
41
  logInfo("Sync API is busy. Waiting...")
@@ -54,7 +54,7 @@ export default async function (languageCode, token) {
54
54
  const syncItems = syncRet.items;
55
55
 
56
56
  //if we don't get anything back, kick out
57
- if (syncItems.length > 0 ) {
57
+ if (syncItems.length > 0) {
58
58
 
59
59
  for (let index = 0; index < syncItems.length; index++) {
60
60
  await storeInterface.saveContentItem({ contentItem: syncItems[index], languageCode });
@@ -1,7 +1,7 @@
1
1
  import { logInfo, logWarning, sleep } from '../util'
2
2
 
3
- export default async function (languageCode, token) {
4
- const storeInterface = this.store;
3
+ export default async function (languageCode, token, storeInterface, agilityClient) {
4
+
5
5
  if (!token) token = 0;
6
6
 
7
7
  let itemCount = 0;
@@ -14,7 +14,7 @@ export default async function (languageCode, token) {
14
14
 
15
15
  do {
16
16
  //sync pages...
17
- const syncRet = await this.agilityClient.getSyncPages({
17
+ const syncRet = await agilityClient.getSyncPages({
18
18
  syncToken: token,
19
19
  pageSize: 100,
20
20
  languageCode: languageCode