@plasmicapp/cli 0.1.340 → 0.1.342
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/dist/actions/sync-project-module.d.ts +5 -0
- package/dist/actions/sync-style-tokens-provider.d.ts +5 -0
- package/dist/api.d.ts +12 -1
- package/dist/index.js +1701 -1456
- package/dist/lib.js +1658 -1413
- package/dist/plasmic.schema.json +10 -0
- package/dist/utils/config-utils.d.ts +5 -1
- package/package.json +2 -2
- package/src/__mocks__/api.ts +2 -1
- package/src/actions/export.ts +40 -1
- package/src/actions/sync-project-module.ts +88 -0
- package/src/actions/sync-style-tokens-provider.ts +96 -0
- package/src/actions/sync.ts +21 -38
- package/src/api.ts +16 -1
- package/src/migrations/migrations.ts +0 -2
- package/src/test-common/fixtures.ts +3 -2
- package/src/utils/checksum.ts +37 -0
- package/src/utils/code-utils.ts +73 -6
- package/src/utils/config-utils.ts +11 -2
- package/src/utils/get-context.ts +28 -4
- package/dist/migrations/0.1.57-ensureJsBundleThemes.d.ts +0 -2
- package/src/migrations/0.1.57-ensureJsBundleThemes.ts +0 -10
package/dist/plasmic.schema.json
CHANGED
|
@@ -434,6 +434,10 @@
|
|
|
434
434
|
"description": "Project ID",
|
|
435
435
|
"type": "string"
|
|
436
436
|
},
|
|
437
|
+
"projectModuleFilePath": {
|
|
438
|
+
"description": "File location for the project-wide plasmic.ts file. Relative to srcDir",
|
|
439
|
+
"type": "string"
|
|
440
|
+
},
|
|
437
441
|
"projectName": {
|
|
438
442
|
"description": "Project name synced down from Studio",
|
|
439
443
|
"type": "string"
|
|
@@ -442,6 +446,10 @@
|
|
|
442
446
|
"description": "File location for the project-wide splits provider. Relative to srcDir",
|
|
443
447
|
"type": "string"
|
|
444
448
|
},
|
|
449
|
+
"styleTokensProviderFilePath": {
|
|
450
|
+
"description": "File location for the project-wide style tokens provider. Relative to srcDir",
|
|
451
|
+
"type": "string"
|
|
452
|
+
},
|
|
445
453
|
"version": {
|
|
446
454
|
"description": "A version range for syncing this project. Can be:\n* \"latest\" - always syncs down whatever has been saved in the project.\n* \">0\" - always syncs down the latest published version of the project.\n* any other semver string you'd like",
|
|
447
455
|
"type": "string"
|
|
@@ -455,8 +463,10 @@
|
|
|
455
463
|
"images",
|
|
456
464
|
"indirect",
|
|
457
465
|
"projectId",
|
|
466
|
+
"projectModuleFilePath",
|
|
458
467
|
"projectName",
|
|
459
468
|
"splitsProviderFilePath",
|
|
469
|
+
"styleTokensProviderFilePath",
|
|
460
470
|
"version"
|
|
461
471
|
],
|
|
462
472
|
"type": "object"
|
|
@@ -144,6 +144,10 @@ export interface ProjectConfig {
|
|
|
144
144
|
globalContextsFilePath: string;
|
|
145
145
|
/** File location for the project-wide splits provider. Relative to srcDir */
|
|
146
146
|
splitsProviderFilePath: string;
|
|
147
|
+
/** File location for the project-wide style tokens provider. Relative to srcDir */
|
|
148
|
+
styleTokensProviderFilePath: string;
|
|
149
|
+
/** File location for the project-wide plasmic.ts file. Relative to srcDir */
|
|
150
|
+
projectModuleFilePath: string;
|
|
147
151
|
jsBundleThemes?: JsBundleThemeConfig[];
|
|
148
152
|
codeComponents?: CodeComponentConfig[];
|
|
149
153
|
customFunctions?: CustomFunctionConfig[];
|
|
@@ -260,7 +264,7 @@ export interface GlobalVariantGroupConfig {
|
|
|
260
264
|
contextFilePath: string;
|
|
261
265
|
}
|
|
262
266
|
export interface FileLock {
|
|
263
|
-
type: "renderModule" | "cssRules" | "icon" | "image" | "projectCss" | "globalVariant" | "globalContexts" | "splitsProvider";
|
|
267
|
+
type: "renderModule" | "cssRules" | "icon" | "image" | "projectCss" | "globalVariant" | "globalContexts" | "splitsProvider" | "styleTokensProvider" | "projectModule";
|
|
264
268
|
checksum: string;
|
|
265
269
|
assetId: string;
|
|
266
270
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plasmicapp/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.342",
|
|
4
4
|
"description": "plasmic cli for syncing local code with Plasmic designs",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=12"
|
|
@@ -83,5 +83,5 @@
|
|
|
83
83
|
"wrap-ansi": "^7.0.0",
|
|
84
84
|
"yargs": "^15.4.1"
|
|
85
85
|
},
|
|
86
|
-
"gitHead": "
|
|
86
|
+
"gitHead": "354b30e84489d6a01d96855a04c844aa4fa80f3a"
|
|
87
87
|
}
|
package/src/__mocks__/api.ts
CHANGED
|
@@ -193,7 +193,6 @@ function genProjectMetaBundle(projectId: string): ProjectMetaBundle {
|
|
|
193
193
|
projectName: projectId,
|
|
194
194
|
cssFileName: genFilename(projectId, "css"),
|
|
195
195
|
cssRules: `theClass {color: green;}`,
|
|
196
|
-
jsBundleThemes: [],
|
|
197
196
|
};
|
|
198
197
|
}
|
|
199
198
|
|
|
@@ -356,6 +355,8 @@ class PlasmicApi {
|
|
|
356
355
|
projectCssChecksum: "",
|
|
357
356
|
globalContextsChecksum: "",
|
|
358
357
|
splitsProviderChecksum: "",
|
|
358
|
+
styleTokensProviderChecksum: "",
|
|
359
|
+
projectModuleChecksum: "",
|
|
359
360
|
} as ChecksumBundle,
|
|
360
361
|
usedNpmPackages: [],
|
|
361
362
|
externalCssImports: [],
|
package/src/actions/export.ts
CHANGED
|
@@ -10,17 +10,19 @@ import {
|
|
|
10
10
|
} from "../utils/code-utils";
|
|
11
11
|
import {
|
|
12
12
|
CodeConfig,
|
|
13
|
-
findConfigFile,
|
|
14
13
|
I18NConfig,
|
|
15
14
|
ImagesConfig,
|
|
16
15
|
PlasmicConfig,
|
|
17
16
|
StyleConfig,
|
|
17
|
+
findConfigFile,
|
|
18
18
|
} from "../utils/config-utils";
|
|
19
19
|
import { getContext, getCurrentOrDefaultAuth } from "../utils/get-context";
|
|
20
20
|
import { tuple } from "../utils/lang-utils";
|
|
21
21
|
import { DEFAULT_GLOBAL_CONTEXTS_NAME } from "./sync-global-contexts";
|
|
22
22
|
import { ensureImageAssetContents } from "./sync-images";
|
|
23
|
+
import { DEFAULT_PROJECT_MODULE_NAME } from "./sync-project-module";
|
|
23
24
|
import { DEFAULT_SPLITS_PROVIDER_NAME } from "./sync-splits-provider";
|
|
25
|
+
import { DEFAULT_STYLE_TOKENS_PROVIDER_NAME } from "./sync-style-tokens-provider";
|
|
24
26
|
|
|
25
27
|
export interface ExportArgs extends CommonArgs {
|
|
26
28
|
projects: readonly string[];
|
|
@@ -138,6 +140,20 @@ export async function exportProjectsCli(opts: ExportArgs): Promise<void> {
|
|
|
138
140
|
);
|
|
139
141
|
}
|
|
140
142
|
|
|
143
|
+
if (bundle.projectConfig.styleTokensProviderBundle) {
|
|
144
|
+
writeFile(
|
|
145
|
+
`${DEFAULT_STYLE_TOKENS_PROVIDER_NAME}.${extx}`,
|
|
146
|
+
bundle.projectConfig.styleTokensProviderBundle.module
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (bundle.projectConfig.projectModuleBundle) {
|
|
151
|
+
writeFile(
|
|
152
|
+
`${DEFAULT_PROJECT_MODULE_NAME}.${extx}`,
|
|
153
|
+
bundle.projectConfig.projectModuleBundle.module
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
|
|
141
157
|
if (bundle.projectConfig.reactWebExportedFiles) {
|
|
142
158
|
for (const file of bundle.projectConfig.reactWebExportedFiles) {
|
|
143
159
|
writeFile(file.fileName, file.content);
|
|
@@ -196,6 +212,13 @@ export async function exportProjectsCli(opts: ExportArgs): Promise<void> {
|
|
|
196
212
|
splitsProviderFilePath: bundle.projectConfig.splitsProviderBundle
|
|
197
213
|
? `${projectName}/${DEFAULT_SPLITS_PROVIDER_NAME}.${extx}`
|
|
198
214
|
: "",
|
|
215
|
+
styleTokensProviderFilePath: bundle.projectConfig
|
|
216
|
+
.styleTokensProviderBundle
|
|
217
|
+
? `${projectName}/${DEFAULT_STYLE_TOKENS_PROVIDER_NAME}.${extx}`
|
|
218
|
+
: "",
|
|
219
|
+
projectModuleFilePath: bundle.projectConfig.projectModuleBundle
|
|
220
|
+
? `${projectName}/${DEFAULT_PROJECT_MODULE_NAME}.${extx}`
|
|
221
|
+
: "",
|
|
199
222
|
components: bundle.components.map((comp) => ({
|
|
200
223
|
id: comp.id,
|
|
201
224
|
name: comp.componentName,
|
|
@@ -351,6 +374,22 @@ async function exportProjects(api: PlasmicApi, opts: ExportOpts) {
|
|
|
351
374
|
);
|
|
352
375
|
proj.projectConfig.splitsProviderBundle.module = res[1];
|
|
353
376
|
}
|
|
377
|
+
if (proj.projectConfig.styleTokensProviderBundle) {
|
|
378
|
+
const res = maybeConvertTsxToJsx(
|
|
379
|
+
`${DEFAULT_STYLE_TOKENS_PROVIDER_NAME}.tsx`,
|
|
380
|
+
proj.projectConfig.styleTokensProviderBundle.module,
|
|
381
|
+
"."
|
|
382
|
+
);
|
|
383
|
+
proj.projectConfig.styleTokensProviderBundle.module = res[1];
|
|
384
|
+
}
|
|
385
|
+
if (proj.projectConfig.projectModuleBundle) {
|
|
386
|
+
const res = maybeConvertTsxToJsx(
|
|
387
|
+
`${DEFAULT_PROJECT_MODULE_NAME}.tsx`,
|
|
388
|
+
proj.projectConfig.projectModuleBundle.module,
|
|
389
|
+
"."
|
|
390
|
+
);
|
|
391
|
+
proj.projectConfig.projectModuleBundle.module = res[1];
|
|
392
|
+
}
|
|
354
393
|
}
|
|
355
394
|
}
|
|
356
395
|
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import L from "lodash";
|
|
2
|
+
import { ChecksumBundle, ProjectMetaBundle } from "../api";
|
|
3
|
+
import { logger } from "../deps";
|
|
4
|
+
import { formatScript, tsxToJsx } from "../utils/code-utils";
|
|
5
|
+
import {
|
|
6
|
+
PlasmicContext,
|
|
7
|
+
ProjectConfig,
|
|
8
|
+
ProjectLock,
|
|
9
|
+
} from "../utils/config-utils";
|
|
10
|
+
import {
|
|
11
|
+
defaultResourcePath,
|
|
12
|
+
deleteFile,
|
|
13
|
+
fileExists,
|
|
14
|
+
writeFileContent,
|
|
15
|
+
} from "../utils/file-utils";
|
|
16
|
+
|
|
17
|
+
const MODULE_NAME = "plasmic";
|
|
18
|
+
export const DEFAULT_PROJECT_MODULE_NAME = MODULE_NAME;
|
|
19
|
+
|
|
20
|
+
export async function syncProjectModule(
|
|
21
|
+
context: PlasmicContext,
|
|
22
|
+
projectMeta: ProjectMetaBundle,
|
|
23
|
+
projectConfig: ProjectConfig,
|
|
24
|
+
projectLock: ProjectLock,
|
|
25
|
+
checksums: ChecksumBundle,
|
|
26
|
+
baseDir: string
|
|
27
|
+
) {
|
|
28
|
+
const resourcePath = getProjectModuleResourcePath(context, projectConfig);
|
|
29
|
+
if (checksums.projectModuleChecksum && projectMeta.projectModuleBundle) {
|
|
30
|
+
if (context.cliArgs.quiet !== true) {
|
|
31
|
+
logger.info(
|
|
32
|
+
`Syncing module: ${MODULE_NAME}@${projectLock.version}\t['${projectConfig.projectName}' ${projectConfig.projectId} ${projectConfig.version}]`
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
if (context.config.code.lang === "js") {
|
|
36
|
+
projectMeta.projectModuleBundle.module = formatScript(
|
|
37
|
+
tsxToJsx(projectMeta.projectModuleBundle.module),
|
|
38
|
+
baseDir
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
writeFileContent(
|
|
42
|
+
context,
|
|
43
|
+
resourcePath,
|
|
44
|
+
projectMeta.projectModuleBundle.module,
|
|
45
|
+
{ force: true }
|
|
46
|
+
);
|
|
47
|
+
projectConfig.projectModuleFilePath = resourcePath;
|
|
48
|
+
const fl = projectLock.fileLocks.find(
|
|
49
|
+
(fl) =>
|
|
50
|
+
fl.assetId === projectConfig.projectId && fl.type === "projectModule"
|
|
51
|
+
);
|
|
52
|
+
if (fl) {
|
|
53
|
+
fl.checksum = checksums.projectModuleChecksum || "";
|
|
54
|
+
} else {
|
|
55
|
+
projectLock.fileLocks.push({
|
|
56
|
+
assetId: projectConfig.projectId,
|
|
57
|
+
checksum: checksums.projectModuleChecksum || "",
|
|
58
|
+
type: "projectModule",
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
} else if (
|
|
62
|
+
!checksums.projectModuleChecksum &&
|
|
63
|
+
!projectMeta.projectModuleBundle
|
|
64
|
+
) {
|
|
65
|
+
if (fileExists(context, resourcePath)) {
|
|
66
|
+
deleteFile(context, resourcePath);
|
|
67
|
+
}
|
|
68
|
+
projectConfig.projectModuleFilePath = "";
|
|
69
|
+
L.remove(
|
|
70
|
+
projectLock.fileLocks,
|
|
71
|
+
(fl) =>
|
|
72
|
+
fl.assetId === projectConfig.projectId && fl.type === "projectModule"
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function getProjectModuleResourcePath(
|
|
78
|
+
context: PlasmicContext,
|
|
79
|
+
projectConfig: ProjectConfig
|
|
80
|
+
) {
|
|
81
|
+
return projectConfig.projectModuleFilePath !== ""
|
|
82
|
+
? projectConfig.projectModuleFilePath
|
|
83
|
+
: defaultResourcePath(
|
|
84
|
+
context,
|
|
85
|
+
projectConfig.projectName,
|
|
86
|
+
`${MODULE_NAME}.${context.config.code.lang === "ts" ? "tsx" : "jsx"}`
|
|
87
|
+
);
|
|
88
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import L from "lodash";
|
|
2
|
+
import { ChecksumBundle, ProjectMetaBundle } from "../api";
|
|
3
|
+
import { logger } from "../deps";
|
|
4
|
+
import { formatScript, tsxToJsx } from "../utils/code-utils";
|
|
5
|
+
import {
|
|
6
|
+
PlasmicContext,
|
|
7
|
+
ProjectConfig,
|
|
8
|
+
ProjectLock,
|
|
9
|
+
} from "../utils/config-utils";
|
|
10
|
+
import {
|
|
11
|
+
defaultResourcePath,
|
|
12
|
+
deleteFile,
|
|
13
|
+
fileExists,
|
|
14
|
+
writeFileContent,
|
|
15
|
+
} from "../utils/file-utils";
|
|
16
|
+
|
|
17
|
+
const MODULE_NAME = "PlasmicStyleTokensProvider";
|
|
18
|
+
export const DEFAULT_STYLE_TOKENS_PROVIDER_NAME = MODULE_NAME;
|
|
19
|
+
|
|
20
|
+
export async function syncStyleTokensProvider(
|
|
21
|
+
context: PlasmicContext,
|
|
22
|
+
projectMeta: ProjectMetaBundle,
|
|
23
|
+
projectConfig: ProjectConfig,
|
|
24
|
+
projectLock: ProjectLock,
|
|
25
|
+
checksums: ChecksumBundle,
|
|
26
|
+
baseDir: string
|
|
27
|
+
) {
|
|
28
|
+
const resourcePath = getStyleTokensProviderResourcePath(
|
|
29
|
+
context,
|
|
30
|
+
projectConfig
|
|
31
|
+
);
|
|
32
|
+
if (
|
|
33
|
+
checksums.styleTokensProviderChecksum &&
|
|
34
|
+
projectMeta.styleTokensProviderBundle
|
|
35
|
+
) {
|
|
36
|
+
if (context.cliArgs.quiet !== true) {
|
|
37
|
+
logger.info(
|
|
38
|
+
`Syncing module: ${MODULE_NAME}@${projectLock.version}\t['${projectConfig.projectName}' ${projectConfig.projectId} ${projectConfig.version}]`
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
if (context.config.code.lang === "js") {
|
|
42
|
+
projectMeta.styleTokensProviderBundle.module = formatScript(
|
|
43
|
+
tsxToJsx(projectMeta.styleTokensProviderBundle.module),
|
|
44
|
+
baseDir
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
writeFileContent(
|
|
48
|
+
context,
|
|
49
|
+
resourcePath,
|
|
50
|
+
projectMeta.styleTokensProviderBundle.module,
|
|
51
|
+
{ force: true }
|
|
52
|
+
);
|
|
53
|
+
projectConfig.styleTokensProviderFilePath = resourcePath;
|
|
54
|
+
const fl = projectLock.fileLocks.find(
|
|
55
|
+
(fl) =>
|
|
56
|
+
fl.assetId === projectConfig.projectId &&
|
|
57
|
+
fl.type === "styleTokensProvider"
|
|
58
|
+
);
|
|
59
|
+
if (fl) {
|
|
60
|
+
fl.checksum = checksums.styleTokensProviderChecksum || "";
|
|
61
|
+
} else {
|
|
62
|
+
projectLock.fileLocks.push({
|
|
63
|
+
assetId: projectConfig.projectId,
|
|
64
|
+
checksum: checksums.styleTokensProviderChecksum || "",
|
|
65
|
+
type: "styleTokensProvider",
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
} else if (
|
|
69
|
+
!checksums.styleTokensProviderChecksum &&
|
|
70
|
+
!projectMeta.styleTokensProviderBundle
|
|
71
|
+
) {
|
|
72
|
+
if (fileExists(context, resourcePath)) {
|
|
73
|
+
deleteFile(context, resourcePath);
|
|
74
|
+
}
|
|
75
|
+
projectConfig.styleTokensProviderFilePath = "";
|
|
76
|
+
L.remove(
|
|
77
|
+
projectLock.fileLocks,
|
|
78
|
+
(fl) =>
|
|
79
|
+
fl.assetId === projectConfig.projectId &&
|
|
80
|
+
fl.type === "styleTokensProvider"
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function getStyleTokensProviderResourcePath(
|
|
86
|
+
context: PlasmicContext,
|
|
87
|
+
projectConfig: ProjectConfig
|
|
88
|
+
) {
|
|
89
|
+
return projectConfig.styleTokensProviderFilePath !== ""
|
|
90
|
+
? projectConfig.styleTokensProviderFilePath
|
|
91
|
+
: defaultResourcePath(
|
|
92
|
+
context,
|
|
93
|
+
projectConfig.projectName,
|
|
94
|
+
`${MODULE_NAME}.${context.config.code.lang === "ts" ? "tsx" : "jsx"}`
|
|
95
|
+
);
|
|
96
|
+
}
|
package/src/actions/sync.ts
CHANGED
|
@@ -56,7 +56,9 @@ import { syncGlobalContexts } from "./sync-global-contexts";
|
|
|
56
56
|
import { syncGlobalVariants } from "./sync-global-variants";
|
|
57
57
|
import { syncProjectIconAssets } from "./sync-icons";
|
|
58
58
|
import { syncProjectImageAssets } from "./sync-images";
|
|
59
|
+
import { syncProjectModule } from "./sync-project-module";
|
|
59
60
|
import { syncSplitsProvider } from "./sync-splits-provider";
|
|
61
|
+
import { syncStyleTokensProvider } from "./sync-style-tokens-provider";
|
|
60
62
|
import { upsertStyleTokens } from "./sync-styles";
|
|
61
63
|
|
|
62
64
|
export interface SyncArgs extends CommonArgs {
|
|
@@ -605,13 +607,6 @@ async function syncProject(
|
|
|
605
607
|
opts.baseDir
|
|
606
608
|
);
|
|
607
609
|
});
|
|
608
|
-
(projectBundle.projectConfig.jsBundleThemes || []).forEach((theme) => {
|
|
609
|
-
[theme.themeFileName, theme.themeModule] = maybeConvertTsxToJsx(
|
|
610
|
-
theme.themeFileName,
|
|
611
|
-
theme.themeModule,
|
|
612
|
-
opts.baseDir
|
|
613
|
-
);
|
|
614
|
-
});
|
|
615
610
|
}
|
|
616
611
|
await syncGlobalVariants(
|
|
617
612
|
context,
|
|
@@ -766,37 +761,7 @@ async function syncProjectConfig(
|
|
|
766
761
|
checksum: checksums.projectCssChecksum,
|
|
767
762
|
});
|
|
768
763
|
|
|
769
|
-
|
|
770
|
-
for (const theme of projectBundle.jsBundleThemes) {
|
|
771
|
-
if (!projectConfig.jsBundleThemes) {
|
|
772
|
-
projectConfig.jsBundleThemes = [];
|
|
773
|
-
}
|
|
774
|
-
let themeConfig = projectConfig.jsBundleThemes.find(
|
|
775
|
-
(c) => c.bundleName === theme.bundleName
|
|
776
|
-
);
|
|
777
|
-
if (!themeConfig) {
|
|
778
|
-
const themeFilePath = defaultResourcePath(
|
|
779
|
-
context,
|
|
780
|
-
projectConfig,
|
|
781
|
-
theme.themeFileName
|
|
782
|
-
);
|
|
783
|
-
themeConfig = { themeFilePath, bundleName: theme.bundleName };
|
|
784
|
-
projectConfig.jsBundleThemes.push(themeConfig);
|
|
785
|
-
}
|
|
786
|
-
const formatted = formatAsLocal(
|
|
787
|
-
theme.themeModule,
|
|
788
|
-
themeConfig.themeFilePath
|
|
789
|
-
);
|
|
790
|
-
await writeFileContent(context, themeConfig.themeFilePath, formatted, {
|
|
791
|
-
force: true,
|
|
792
|
-
});
|
|
793
|
-
}
|
|
794
|
-
*/
|
|
795
|
-
|
|
796
|
-
if (
|
|
797
|
-
projectConfig.jsBundleThemes &&
|
|
798
|
-
projectConfig.jsBundleThemes.length === 0
|
|
799
|
-
) {
|
|
764
|
+
if (projectConfig.jsBundleThemes?.length === 0) {
|
|
800
765
|
delete projectConfig.jsBundleThemes;
|
|
801
766
|
}
|
|
802
767
|
|
|
@@ -818,6 +783,24 @@ async function syncProjectConfig(
|
|
|
818
783
|
baseDir
|
|
819
784
|
);
|
|
820
785
|
|
|
786
|
+
await syncProjectModule(
|
|
787
|
+
context,
|
|
788
|
+
projectBundle,
|
|
789
|
+
projectConfig,
|
|
790
|
+
projectLock,
|
|
791
|
+
checksums,
|
|
792
|
+
baseDir
|
|
793
|
+
);
|
|
794
|
+
|
|
795
|
+
await syncStyleTokensProvider(
|
|
796
|
+
context,
|
|
797
|
+
projectBundle,
|
|
798
|
+
projectConfig,
|
|
799
|
+
projectLock,
|
|
800
|
+
checksums,
|
|
801
|
+
baseDir
|
|
802
|
+
);
|
|
803
|
+
|
|
821
804
|
// Write out components
|
|
822
805
|
await syncProjectComponents(
|
|
823
806
|
context,
|
package/src/api.ts
CHANGED
|
@@ -65,6 +65,16 @@ export interface SplitsProviderBundle {
|
|
|
65
65
|
module: string;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
+
export interface StyleTokensProviderBundle {
|
|
69
|
+
id: string;
|
|
70
|
+
module: string;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface ProjectModuleBundle {
|
|
74
|
+
id: string;
|
|
75
|
+
module: string;
|
|
76
|
+
}
|
|
77
|
+
|
|
68
78
|
export interface JsBundleTheme {
|
|
69
79
|
themeFileName: string;
|
|
70
80
|
themeModule: string;
|
|
@@ -76,9 +86,10 @@ export interface ProjectMetaBundle {
|
|
|
76
86
|
projectName: string;
|
|
77
87
|
cssFileName: string;
|
|
78
88
|
cssRules: string;
|
|
79
|
-
jsBundleThemes?: JsBundleTheme[];
|
|
80
89
|
globalContextBundle?: GlobalContextBundle;
|
|
81
90
|
splitsProviderBundle?: SplitsProviderBundle;
|
|
91
|
+
styleTokensProviderBundle?: StyleTokensProviderBundle;
|
|
92
|
+
projectModuleBundle?: ProjectModuleBundle;
|
|
82
93
|
// A list of files that are exported from the project and *can* be used by the user
|
|
83
94
|
reactWebExportedFiles?: Array<{
|
|
84
95
|
fileName: string;
|
|
@@ -190,6 +201,10 @@ export interface ChecksumBundle {
|
|
|
190
201
|
globalContextsChecksum: string;
|
|
191
202
|
// Checksum of project splits provider
|
|
192
203
|
splitsProviderChecksum: string;
|
|
204
|
+
// Checksum of project style tokens provider
|
|
205
|
+
styleTokensProviderChecksum: string;
|
|
206
|
+
// Checksum of project plasmic.ts
|
|
207
|
+
projectModuleChecksum: string;
|
|
193
208
|
}
|
|
194
209
|
|
|
195
210
|
export interface CodeComponentMeta {
|
|
@@ -40,7 +40,6 @@ import { migrateInit } from "./0.1.27-migrateInit";
|
|
|
40
40
|
import { tsToTsx } from "./0.1.28-tsToTsx";
|
|
41
41
|
import { ensureProjectIcons } from "./0.1.31-ensureProjectIcons";
|
|
42
42
|
import { ensureVersion } from "./0.1.42-ensureVersion";
|
|
43
|
-
import { ensureJsBundleThemes } from "./0.1.57-ensureJsBundleThemes";
|
|
44
43
|
import { ensureImageFiles } from "./0.1.64-imageFiles";
|
|
45
44
|
import { ensureComponentType } from "./0.1.95-componentType";
|
|
46
45
|
export interface MigrateContext {
|
|
@@ -61,7 +60,6 @@ export const MIGRATIONS: Record<string, MigrateConfigFunc> = {
|
|
|
61
60
|
"0.1.28": tsToTsx,
|
|
62
61
|
"0.1.31": ensureProjectIcons,
|
|
63
62
|
"0.1.42": ensureVersion,
|
|
64
|
-
"0.1.57": ensureJsBundleThemes,
|
|
65
63
|
"0.1.64": ensureImageFiles,
|
|
66
64
|
"0.1.95": ensureComponentType,
|
|
67
65
|
"0.1.146": ensureReactRuntime,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/// <reference types="@types/jest" />
|
|
2
2
|
import L from "lodash";
|
|
3
|
+
import { MockProject } from "../__mocks__/api";
|
|
3
4
|
import { SyncArgs } from "../actions/sync";
|
|
4
5
|
import { PlasmicConfig, ProjectConfig } from "../utils/config-utils";
|
|
5
6
|
import { TempRepo } from "../utils/test-utils";
|
|
6
|
-
import { MockProject } from "../__mocks__/api";
|
|
7
7
|
|
|
8
8
|
jest.mock("../api");
|
|
9
9
|
|
|
@@ -148,10 +148,11 @@ export const project1Config: ProjectConfig = {
|
|
|
148
148
|
],
|
|
149
149
|
icons: [],
|
|
150
150
|
images: [],
|
|
151
|
-
jsBundleThemes: [],
|
|
152
151
|
indirect: false,
|
|
153
152
|
globalContextsFilePath: "",
|
|
154
153
|
splitsProviderFilePath: "",
|
|
154
|
+
styleTokensProviderFilePath: "",
|
|
155
|
+
projectModuleFilePath: "",
|
|
155
156
|
};
|
|
156
157
|
|
|
157
158
|
export function expectProject1PlasmicJson(optional?: {
|
package/src/utils/checksum.ts
CHANGED
|
@@ -33,6 +33,12 @@ function getFilesByFileLockAssetId(
|
|
|
33
33
|
splitsProvider: {
|
|
34
34
|
[projectConfig.projectId]: projectConfig.splitsProviderFilePath,
|
|
35
35
|
},
|
|
36
|
+
styleTokensProvider: {
|
|
37
|
+
[projectConfig.projectId]: projectConfig.styleTokensProviderFilePath,
|
|
38
|
+
},
|
|
39
|
+
projectModule: {
|
|
40
|
+
[projectConfig.projectId]: projectConfig.projectModuleFilePath,
|
|
41
|
+
},
|
|
36
42
|
} as const;
|
|
37
43
|
}
|
|
38
44
|
|
|
@@ -60,6 +66,8 @@ export function getChecksums(
|
|
|
60
66
|
projectCssChecksum: "",
|
|
61
67
|
globalContextsChecksum: "",
|
|
62
68
|
splitsProviderChecksum: "",
|
|
69
|
+
styleTokensProviderChecksum: "",
|
|
70
|
+
projectModuleChecksum: "",
|
|
63
71
|
};
|
|
64
72
|
}
|
|
65
73
|
|
|
@@ -161,6 +169,33 @@ export function getChecksums(
|
|
|
161
169
|
? globalContextsChecksums[0].checksum
|
|
162
170
|
: "";
|
|
163
171
|
|
|
172
|
+
const styleTokensProviderChecksums = fileLocks
|
|
173
|
+
.filter(
|
|
174
|
+
(fileLock) =>
|
|
175
|
+
fileLock.type === "styleTokensProvider" &&
|
|
176
|
+
fileLock.assetId === projectId
|
|
177
|
+
)
|
|
178
|
+
.filter((fileLock) =>
|
|
179
|
+
checkFile(fileLocations.styleTokensProvider[fileLock.assetId])
|
|
180
|
+
);
|
|
181
|
+
assert(styleTokensProviderChecksums.length < 2);
|
|
182
|
+
const styleTokensProviderChecksum =
|
|
183
|
+
styleTokensProviderChecksums.length > 0
|
|
184
|
+
? styleTokensProviderChecksums[0].checksum
|
|
185
|
+
: "";
|
|
186
|
+
|
|
187
|
+
const projectModuleChecksums = fileLocks
|
|
188
|
+
.filter(
|
|
189
|
+
(fileLock) =>
|
|
190
|
+
fileLock.type === "projectModule" && fileLock.assetId === projectId
|
|
191
|
+
)
|
|
192
|
+
.filter((fileLock) =>
|
|
193
|
+
checkFile(fileLocations.projectModule[fileLock.assetId])
|
|
194
|
+
);
|
|
195
|
+
assert(projectModuleChecksums.length < 2);
|
|
196
|
+
const projectModuleChecksum =
|
|
197
|
+
projectModuleChecksums.length > 0 ? projectModuleChecksums[0].checksum : "";
|
|
198
|
+
|
|
164
199
|
const splitsProviderChecksums = fileLocks
|
|
165
200
|
.filter(
|
|
166
201
|
(fileLock) =>
|
|
@@ -184,5 +219,7 @@ export function getChecksums(
|
|
|
184
219
|
projectCssChecksum,
|
|
185
220
|
globalContextsChecksum,
|
|
186
221
|
splitsProviderChecksum,
|
|
222
|
+
styleTokensProviderChecksum,
|
|
223
|
+
projectModuleChecksum,
|
|
187
224
|
};
|
|
188
225
|
}
|