@plasmicapp/cli 0.1.183 → 0.1.186
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 +11 -8
- package/dist/actions/sync-components.js +3 -2
- package/dist/utils/envdetect.js +1 -1
- package/dist/utils/file-utils.d.ts +10 -0
- package/dist/utils/file-utils.js +29 -1
- package/dist/utils/npm-utils.js +3 -1
- package/package.json +2 -2
- package/src/actions/sync-components.ts +4 -2
- package/src/utils/envdetect.ts +1 -1
- package/src/utils/file-utils.ts +31 -0
- package/src/utils/npm-utils.ts +3 -1
package/README
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
Plasmic CLI for syncing Plasmic designs down into your local repo as generated React code.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
=======
|
|
3
|
+
Plasmic is the visual builder for React. Learn more at <https://plasmic.app>.
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
# Install
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @plasmicapp/cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
# Usage
|
|
12
|
+
|
|
13
|
+
See <https://docs.plasmic.app/learn/codegen-guide/> for the full docs to get started with Plasmic codegen.
|
|
10
14
|
|
|
11
15
|
`plasmic init` creates the initial plasmic.json file, pointing to your local dev host.
|
|
12
16
|
|
|
13
17
|
`plasmic sync --projects ...` allows you to sync all components in the specified projects
|
|
14
|
-
down as code files to your current folder.
|
|
18
|
+
down as code files to your current folder. Once you've run `plasmic init`, you can run
|
|
15
19
|
`plasmic sync` from any subfolder of the folder with the `plasmic.json` file.
|
|
16
|
-
|
|
@@ -42,7 +42,8 @@ const updateDirectSkeleton = (newFileContent, editedFileContent, context, compCo
|
|
|
42
42
|
throw e;
|
|
43
43
|
}
|
|
44
44
|
else {
|
|
45
|
-
|
|
45
|
+
lang_utils_1.assert(e instanceof Error);
|
|
46
|
+
throw new error_1.HandledError(e.message);
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
49
|
})), () => { }, appendJsxOnMissingBase);
|
|
@@ -170,7 +171,7 @@ function syncProjectComponents(context, project, version, componentBundles, forc
|
|
|
170
171
|
}
|
|
171
172
|
if (isPage &&
|
|
172
173
|
config_utils_1.isPageAwarePlatform(context.config.platform) &&
|
|
173
|
-
skeletonPath
|
|
174
|
+
!file_utils_1.eqPagePath(skeletonPath, compConfig.importSpec.modulePath) &&
|
|
174
175
|
file_utils_1.fileExists(context, compConfig.importSpec.modulePath)) {
|
|
175
176
|
if (context.cliArgs.quiet !== true) {
|
|
176
177
|
deps_1.logger.info(`Renaming page file: ${compConfig.importSpec.modulePath} -> ${skeletonPath}\t['${project.projectName}' ${project.projectId}/${id} ${project.version}]`);
|
package/dist/utils/envdetect.js
CHANGED
|
@@ -27,7 +27,7 @@ function detectNextJs() {
|
|
|
27
27
|
}
|
|
28
28
|
exports.detectNextJs = detectNextJs;
|
|
29
29
|
function detectGatsby() {
|
|
30
|
-
return findup_sync_1.default("gatsby-config.js");
|
|
30
|
+
return findup_sync_1.default("gatsby-config.js") || findup_sync_1.default("gatsby-config.ts");
|
|
31
31
|
}
|
|
32
32
|
exports.detectGatsby = detectGatsby;
|
|
33
33
|
function detectCreateReactApp() {
|
|
@@ -9,6 +9,16 @@ export declare function writeFileContentRaw(filePath: string, content: string |
|
|
|
9
9
|
export declare function defaultResourcePath(context: PlasmicContext, project: ProjectConfig | ProjectMetaBundle | string, ...subpaths: string[]): string;
|
|
10
10
|
export declare function defaultPublicResourcePath(context: PlasmicContext, project: ProjectConfig, ...subpaths: string[]): string;
|
|
11
11
|
export declare function defaultPagePath(context: PlasmicContext, fileName: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Returns true iff paths `a` and `b` resolve to the same page URI. For
|
|
14
|
+
* example:
|
|
15
|
+
*
|
|
16
|
+
* - pages/about.tsx and pages/about.js resolve to the same URI (/about).
|
|
17
|
+
* - pages/about/index.tsx and pages/about.tsx resolve to the same URI (/about).
|
|
18
|
+
* - pages/index.tsx and pages/index/index.tsx do not resolve to the same URI
|
|
19
|
+
* (they resolve, respectively, to / and /index).
|
|
20
|
+
*/
|
|
21
|
+
export declare function eqPagePath(a: string, b: string): boolean;
|
|
12
22
|
export declare function writeFileContent(context: PlasmicContext, srcDirFilePath: string, content: string | Buffer, opts?: {
|
|
13
23
|
force?: boolean;
|
|
14
24
|
}): Promise<void>;
|
package/dist/utils/file-utils.js
CHANGED
|
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.existsBuffered = exports.deleteFileBuffered = exports.renameFileBuffered = exports.readFileText = exports.writeFileText = exports.withBufferedFs = exports.assertAllPathsInRootDir = exports.findFile = exports.findSrcDirPath = exports.buildBaseNameToFiles = exports.renameFile = exports.makeFilePath = exports.fileExists = exports.deleteFile = exports.readFileContent = exports.writeFileContent = exports.defaultPagePath = exports.defaultPublicResourcePath = exports.defaultResourcePath = exports.writeFileContentRaw = exports.stripExtension = void 0;
|
|
15
|
+
exports.existsBuffered = exports.deleteFileBuffered = exports.renameFileBuffered = exports.readFileText = exports.writeFileText = exports.withBufferedFs = exports.assertAllPathsInRootDir = exports.findFile = exports.findSrcDirPath = exports.buildBaseNameToFiles = exports.renameFile = exports.makeFilePath = exports.fileExists = exports.deleteFile = exports.readFileContent = exports.writeFileContent = exports.eqPagePath = exports.defaultPagePath = exports.defaultPublicResourcePath = exports.defaultResourcePath = exports.writeFileContentRaw = exports.stripExtension = void 0;
|
|
16
16
|
const fs_1 = __importDefault(require("fs"));
|
|
17
17
|
const glob_1 = __importDefault(require("glob"));
|
|
18
18
|
const lodash_1 = __importDefault(require("lodash"));
|
|
@@ -68,6 +68,34 @@ function defaultPagePath(context, fileName) {
|
|
|
68
68
|
return fileName;
|
|
69
69
|
}
|
|
70
70
|
exports.defaultPagePath = defaultPagePath;
|
|
71
|
+
/**
|
|
72
|
+
* Returns true iff paths `a` and `b` resolve to the same page URI. For
|
|
73
|
+
* example:
|
|
74
|
+
*
|
|
75
|
+
* - pages/about.tsx and pages/about.js resolve to the same URI (/about).
|
|
76
|
+
* - pages/about/index.tsx and pages/about.tsx resolve to the same URI (/about).
|
|
77
|
+
* - pages/index.tsx and pages/index/index.tsx do not resolve to the same URI
|
|
78
|
+
* (they resolve, respectively, to / and /index).
|
|
79
|
+
*/
|
|
80
|
+
function eqPagePath(a, b) {
|
|
81
|
+
// Remove extension and ensure that a.length < b.length.
|
|
82
|
+
a = stripExtension(a);
|
|
83
|
+
b = stripExtension(b);
|
|
84
|
+
if (a.length > b.length) {
|
|
85
|
+
[a, b] = [b, a];
|
|
86
|
+
}
|
|
87
|
+
// pages/about.tsx and pages/about.js resolve to the same page URI.
|
|
88
|
+
if (a === b) {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
// pages/about.* and pages/about/index.* resolve to the same URI, but
|
|
92
|
+
// pages/index.* and pages/index/index.* do not.
|
|
93
|
+
if (!a.endsWith("/index") && `${a}/index` === b) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
exports.eqPagePath = eqPagePath;
|
|
71
99
|
function writeFileContent(context, srcDirFilePath, content, opts = {}) {
|
|
72
100
|
return __awaiter(this, void 0, void 0, function* () {
|
|
73
101
|
const path = makeFilePath(context, srcDirFilePath);
|
package/dist/utils/npm-utils.js
CHANGED
|
@@ -155,7 +155,9 @@ function findInstalledPackageJsonFile(context, pkg) {
|
|
|
155
155
|
const rootDir = packageJsonPath
|
|
156
156
|
? path_1.default.dirname(packageJsonPath)
|
|
157
157
|
: context.rootDir;
|
|
158
|
-
const files = fast_glob_1.default.sync(`${rootDir}/**/node_modules/${pkg}/package.json
|
|
158
|
+
const files = fast_glob_1.default.sync(`${rootDir}/**/node_modules/${pkg}/package.json`, {
|
|
159
|
+
ignore: [`**/node_modules/**/node_modules/**`],
|
|
160
|
+
});
|
|
159
161
|
return files.length > 0 ? files[0] : undefined;
|
|
160
162
|
}
|
|
161
163
|
function parsePackageJson(path) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plasmicapp/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.186",
|
|
4
4
|
"description": "plasmic cli for syncing local code with Plasmic designs",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=12"
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand --watch",
|
|
17
17
|
"build": "bash build.sh",
|
|
18
18
|
"plasmic": "ts-node src/index.ts",
|
|
19
|
-
"prepare": "yarn build"
|
|
19
|
+
"prepare": "if-env PREPARE_NO_BUILD=true || yarn build"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@babel/preset-typescript": "^7.12.1",
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
defaultPagePath,
|
|
22
22
|
defaultResourcePath,
|
|
23
23
|
deleteFile,
|
|
24
|
+
eqPagePath,
|
|
24
25
|
fileExists,
|
|
25
26
|
readFileContent,
|
|
26
27
|
renameFile,
|
|
@@ -71,7 +72,8 @@ const updateDirectSkeleton = async (
|
|
|
71
72
|
) {
|
|
72
73
|
throw e;
|
|
73
74
|
} else {
|
|
74
|
-
|
|
75
|
+
assert(e instanceof Error);
|
|
76
|
+
throw new HandledError(e.message);
|
|
75
77
|
}
|
|
76
78
|
}
|
|
77
79
|
}),
|
|
@@ -302,7 +304,7 @@ export async function syncProjectComponents(
|
|
|
302
304
|
if (
|
|
303
305
|
isPage &&
|
|
304
306
|
isPageAwarePlatform(context.config.platform) &&
|
|
305
|
-
skeletonPath
|
|
307
|
+
!eqPagePath(skeletonPath, compConfig.importSpec.modulePath) &&
|
|
306
308
|
fileExists(context, compConfig.importSpec.modulePath)
|
|
307
309
|
) {
|
|
308
310
|
if (context.cliArgs.quiet !== true) {
|
package/src/utils/envdetect.ts
CHANGED
package/src/utils/file-utils.ts
CHANGED
|
@@ -87,6 +87,37 @@ export function defaultPagePath(context: PlasmicContext, fileName: string) {
|
|
|
87
87
|
return fileName;
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
+
/**
|
|
91
|
+
* Returns true iff paths `a` and `b` resolve to the same page URI. For
|
|
92
|
+
* example:
|
|
93
|
+
*
|
|
94
|
+
* - pages/about.tsx and pages/about.js resolve to the same URI (/about).
|
|
95
|
+
* - pages/about/index.tsx and pages/about.tsx resolve to the same URI (/about).
|
|
96
|
+
* - pages/index.tsx and pages/index/index.tsx do not resolve to the same URI
|
|
97
|
+
* (they resolve, respectively, to / and /index).
|
|
98
|
+
*/
|
|
99
|
+
export function eqPagePath(a: string, b: string) {
|
|
100
|
+
// Remove extension and ensure that a.length < b.length.
|
|
101
|
+
a = stripExtension(a);
|
|
102
|
+
b = stripExtension(b);
|
|
103
|
+
if (a.length > b.length) {
|
|
104
|
+
[a, b] = [b, a];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// pages/about.tsx and pages/about.js resolve to the same page URI.
|
|
108
|
+
if (a === b) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// pages/about.* and pages/about/index.* resolve to the same URI, but
|
|
113
|
+
// pages/index.* and pages/index/index.* do not.
|
|
114
|
+
if (!a.endsWith("/index") && `${a}/index` === b) {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
|
|
90
121
|
export async function writeFileContent(
|
|
91
122
|
context: PlasmicContext,
|
|
92
123
|
srcDirFilePath: string,
|
package/src/utils/npm-utils.ts
CHANGED
|
@@ -169,7 +169,9 @@ function findInstalledPackageJsonFile(context: PlasmicContext, pkg: string) {
|
|
|
169
169
|
const rootDir = packageJsonPath
|
|
170
170
|
? path.dirname(packageJsonPath)
|
|
171
171
|
: context.rootDir;
|
|
172
|
-
const files = glob.sync(`${rootDir}/**/node_modules/${pkg}/package.json
|
|
172
|
+
const files = glob.sync(`${rootDir}/**/node_modules/${pkg}/package.json`, {
|
|
173
|
+
ignore: [`**/node_modules/**/node_modules/**`],
|
|
174
|
+
});
|
|
173
175
|
return files.length > 0 ? files[0] : undefined;
|
|
174
176
|
}
|
|
175
177
|
|