@stackbit/cms-core 1.0.14-develop.1 → 1.0.14-develop.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 (30) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/content-store.d.ts.map +1 -1
  3. package/dist/content-store.js +3 -2
  4. package/dist/content-store.js.map +1 -1
  5. package/package.json +2 -2
  6. package/src/content-store.ts +5 -2
  7. package/dist/connector/ConnectorWrapper.d.mts +0 -62
  8. package/dist/connector/ConnectorWrapper.d.mts.map +0 -1
  9. package/dist/connector/ConnectorWrapper.mjs +0 -163
  10. package/dist/connector/ConnectorWrapper.mjs.map +0 -1
  11. package/dist/connector/ModelConverter.d.mts +0 -3
  12. package/dist/connector/ModelConverter.d.mts.map +0 -1
  13. package/dist/connector/ModelConverter.mjs +0 -125
  14. package/dist/connector/ModelConverter.mjs.map +0 -1
  15. package/dist/integration/IntegrationContentSourceWrapper.d.mts +0 -62
  16. package/dist/integration/IntegrationContentSourceWrapper.d.mts.map +0 -1
  17. package/dist/integration/IntegrationContentSourceWrapper.d.ts +0 -2
  18. package/dist/integration/IntegrationContentSourceWrapper.d.ts.map +0 -1
  19. package/dist/integration/IntegrationContentSourceWrapper.js +0 -3
  20. package/dist/integration/IntegrationContentSourceWrapper.js.map +0 -1
  21. package/dist/integration/IntegrationContentSourceWrapper.mjs +0 -161
  22. package/dist/integration/IntegrationContentSourceWrapper.mjs.map +0 -1
  23. package/dist/integration/IntegrationWrapper.d.mts +0 -62
  24. package/dist/integration/IntegrationWrapper.d.mts.map +0 -1
  25. package/dist/integration/IntegrationWrapper.mjs +0 -164
  26. package/dist/integration/IntegrationWrapper.mjs.map +0 -1
  27. package/dist/integration/ModelConverter.d.mts +0 -3
  28. package/dist/integration/ModelConverter.d.mts.map +0 -1
  29. package/dist/integration/ModelConverter.mjs +0 -125
  30. package/dist/integration/ModelConverter.mjs.map +0 -1
@@ -1,164 +0,0 @@
1
- import { convertModels } from './ModelConverter.mjs';
2
- export default class IntegrationWrapper {
3
- constructor({ integration, config }) {
4
- // // prevent stackbit dev from bundling index.js with esbuild by using a random filename since it's already bundled
5
- // integration = import(templateData.integrationImportPath).then((m) => {
6
- // const integration = m.integration;
7
- // const connector = integration.netlifyConnectPlugin;
8
- // if (!connector) throw new Error(`No connector found`);
9
- // this._getProjectManageUrl = connector._getProjectManageUrl;
10
- // connector.setRuntimeSupportsCreate();
11
- // return integration;
12
- // });
13
- // set when dynamically importing the connector
14
- this.options = {};
15
- this.integration = integration;
16
- this.options = config;
17
- this.connector = integration.netlifyConnectPlugin;
18
- }
19
- getContentSourceType() {
20
- // todo
21
- return 'todo';
22
- }
23
- getProjectId() {
24
- // todo
25
- return '1';
26
- }
27
- async getVersion() {
28
- return { interfaceVersion: '0.7.3', contentSourceVersion: '0.1' };
29
- }
30
- getProjectEnvironment() {
31
- // todo
32
- return 'main';
33
- }
34
- getProjectManageUrl() {
35
- return this.connector._getProjectManageUrl;
36
- }
37
- // todo make these custom error classes to be thrown from within
38
- // sync/create/publish/etc
39
- hasAccess() {
40
- return Promise.resolve({
41
- hasPermissions: true,
42
- hasConnection: true
43
- });
44
- }
45
- validateDocuments() {
46
- return Promise.resolve({ errors: [] });
47
- }
48
- // for now reset/destroy are not needed
49
- reset() {
50
- return Promise.resolve();
51
- }
52
- destroy() {
53
- return Promise.resolve();
54
- }
55
- async _getAPIPromises(name) {
56
- return this.connector.getAPIPromises(name);
57
- }
58
- async _getImplementation(name) {
59
- return this.connector.definedImplementations.get(name);
60
- }
61
- async init({ cache }) {
62
- this.integration.netlifyConnectPlugin?.setRuntimeSupportsCreate();
63
- // wait for Connects init to finish
64
- const { connect, create } = await this._getAPIPromises('init');
65
- await connect.promise;
66
- // send back the Create cache so the SDK can use it to insert & delete
67
- // documents/assets/etc
68
- create.resolve(cache);
69
- }
70
- async updateDocument(stuff) {
71
- const update = await this._getImplementation('documents.update');
72
- if (update) {
73
- return update(stuff);
74
- }
75
- throw new Error('connector.documents({ update: fn }) is not implemented');
76
- }
77
- async createDocument(stuff) {
78
- const create = await this._getImplementation('documents.create');
79
- if (create) {
80
- return create(stuff);
81
- }
82
- throw new Error('connector.documents({ create: fn }) is not implemented');
83
- }
84
- async deleteDocument(stuff) {
85
- const del = await this._getImplementation('documents.delete');
86
- if (del) {
87
- return del(stuff);
88
- }
89
- throw new Error('connector.documents({ delete: fn }) is not implemented');
90
- }
91
- async publishDocuments(stuff) {
92
- const publish = await this._getImplementation('documents.publish');
93
- if (publish) {
94
- return publish(stuff);
95
- }
96
- throw new Error('connector.documents({ publish: fn }) is not implemented');
97
- }
98
- async getSchema() {
99
- const models = await this.getModels();
100
- const locales = await this.getLocales();
101
- return {
102
- models: models || [],
103
- locales: locales || [],
104
- context: {}
105
- };
106
- }
107
- async getModels() {
108
- const { connect, create } = await this._getAPIPromises('model');
109
- const modelBuilder = await connect.promise;
110
- try {
111
- const models = convertModels(modelBuilder);
112
- console.log(models);
113
- return models;
114
- }
115
- catch (e) {
116
- create.reject(e);
117
- }
118
- finally {
119
- create.resolve();
120
- }
121
- }
122
- async getLocales() {
123
- return this.connector._getLocales();
124
- }
125
- async connectSyncFinished() {
126
- const { connect } = await this._getAPIPromises(`sync`);
127
- await connect.promise;
128
- return this.connector;
129
- }
130
- async getDocuments() {
131
- return (await this.connectSyncFinished()).restoreAllDocuments();
132
- }
133
- async getAssets() {
134
- return (await this.connectSyncFinished()).restoreAllAssets();
135
- }
136
- async uploadAsset(stuff) {
137
- //TODO
138
- return {
139
- id: '',
140
- type: 'asset',
141
- manageUrl: '',
142
- status: 'added',
143
- createdAt: '',
144
- updatedAt: '',
145
- fields: {},
146
- context: undefined
147
- };
148
- }
149
- getContentEngineConfig() {
150
- return {
151
- connector: 'unified-connector-test-connector',
152
- plugins: [
153
- {
154
- resolve: 'unified-connector-test-connector',
155
- options: this.options || {}
156
- }
157
- ]
158
- };
159
- }
160
- async onFilesChange({ updatedFiles }) {
161
- return {};
162
- }
163
- }
164
- //# sourceMappingURL=IntegrationWrapper.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IntegrationWrapper.mjs","sourceRoot":"","sources":["../../src/integration/IntegrationWrapper.mts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import * as CSITypes from '@stackbit/types';
2
- export declare function convertModels(modelBuilder: any): (CSITypes.DataModel<unknown> | CSITypes.ObjectModel<unknown>)[];
3
- //# sourceMappingURL=ModelConverter.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModelConverter.d.mts","sourceRoot":"","sources":["../../src/integration/ModelConverter.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAE5C,wBAAgB,aAAa,CAAC,YAAY,EAAE,GAAG,mEAY9C"}
@@ -1,125 +0,0 @@
1
- export function convertModels(modelBuilder) {
2
- const createModels = [];
3
- modelBuilder.models.forEach((model) => {
4
- if (model.getTypeName() === `Image`) {
5
- return;
6
- }
7
- const createModel = convertModel(model, modelBuilder.models);
8
- if (createModel) {
9
- createModels.push(createModel);
10
- }
11
- });
12
- return createModels;
13
- }
14
- function convertModel(model, models) {
15
- let fieldGroups = model.fieldGroups;
16
- if (model.devOnlyFieldGroup) {
17
- fieldGroups || (fieldGroups = []);
18
- fieldGroups.push(model.devOnlyFieldGroup);
19
- }
20
- // Create doesn't have named union types
21
- if (model.isUnionType) {
22
- return false;
23
- }
24
- const name = model.originalName || model.typeName;
25
- const csiModel = {
26
- name: name,
27
- label: model.label || model.name,
28
- type: model.isObjectType ? `object` : `data`,
29
- fieldGroups,
30
- fields: sdkFieldsToStackbitFields(model.fields, models)
31
- };
32
- return csiModel;
33
- }
34
- function sdkFieldsToStackbitFields(fields, models) {
35
- return fields.map((field) => {
36
- const definedTypename = field.type;
37
- const fieldModel = models.get(definedTypename);
38
- const typename = fieldModel?.originalName || definedTypename;
39
- const isObject = fieldModel?.isObjectType;
40
- const scalarTypename = isObject
41
- ? `object`
42
- : {
43
- // create only has a number field
44
- float: 'number',
45
- int: 'number'
46
- }[typename.toLowerCase()] ||
47
- // all other scalar types are supported as lowercase typenames
48
- typename.toLowerCase();
49
- const isImage = typename === `Image`;
50
- const isReference = !isImage && fieldModel?.isNodeType;
51
- const isUnion = fieldModel?.isUnionType;
52
- const firstUnionType = isUnion && fieldModel?.compositeTypes && models.get(fieldModel.compositeTypes[0]);
53
- const isObjectUnion = firstUnionType && firstUnionType.isObjectType;
54
- const isReferenceUnion = firstUnionType && firstUnionType.isNodeType;
55
- const type = (() => {
56
- if (isObjectUnion)
57
- return `model`;
58
- if (isReference || isReferenceUnion)
59
- return `reference`;
60
- if (isUnion) {
61
- // throw new ModelError(`Unhandled union type for model ${typename}. This is a bug in the Netlify SDK.`);
62
- }
63
- if (isImage)
64
- return `image`;
65
- return scalarTypename;
66
- })();
67
- const stackbitField = {
68
- type,
69
- name: field.name
70
- };
71
- if (typename.toLowerCase() === `float`) {
72
- stackbitField.subtype = `float`;
73
- }
74
- if (isObject) {
75
- stackbitField.fields = fieldModel.sdkFieldsToStackbitFields();
76
- }
77
- // any field names starting with _ are internal mandatory fields.
78
- // they shouldn't be set as required in the Create UI as content admins
79
- // don't need to set these fields, connector authors do.
80
- if (`required` in field && !field.name.startsWith(`_`)) {
81
- stackbitField.required = field.required;
82
- }
83
- if (`label` in field) {
84
- stackbitField.label = field.label;
85
- }
86
- if (`hidden` in field) {
87
- stackbitField.hidden = field.hidden;
88
- }
89
- if (`readOnly` in field) {
90
- stackbitField.readOnly = field.readOnly;
91
- }
92
- if (`localized` in field) {
93
- stackbitField.localized = field.localized;
94
- }
95
- if (`defaultValue` in field) {
96
- stackbitField.default = field.defaultValue;
97
- }
98
- if (`group` in field) {
99
- stackbitField.group = field.group;
100
- }
101
- if (isUnion) {
102
- stackbitField.models = (fieldModel.compositeTypes || []).map((ct) => {
103
- const fullType = models.get(ct);
104
- return fullType.getOriginalName();
105
- });
106
- }
107
- else if (isReference) {
108
- stackbitField.models = [fieldModel.getOriginalName()];
109
- }
110
- if (field.list) {
111
- const { name, required, hidden, ...items } = stackbitField;
112
- return {
113
- name,
114
- required,
115
- hidden,
116
- type: `list`,
117
- items
118
- };
119
- }
120
- else {
121
- return stackbitField;
122
- }
123
- });
124
- }
125
- //# sourceMappingURL=ModelConverter.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModelConverter.mjs","sourceRoot":"","sources":["../../src/integration/ModelConverter.mts"],"names":[],"mappings":"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"}