@dxos/plugin-template 0.4.7-main.7a94090
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/.eslintrc.js +9 -0
- package/LICENSE +8 -0
- package/README.md +21 -0
- package/dist/package.json +41 -0
- package/dist/src/dev/main.tsx.t.d.ts +49 -0
- package/dist/src/dev/main.tsx.t.d.ts.map +1 -0
- package/dist/src/dev/main.tsx.t.js +82 -0
- package/dist/src/dev/main.tsx.t.js.map +1 -0
- package/dist/src/dev/translations.d.ts +21 -0
- package/dist/src/dev/translations.d.ts.map +1 -0
- package/dist/src/dev/translations.js +27 -0
- package/dist/src/dev/translations.js.map +1 -0
- package/dist/src/package.json.t.d.ts +54 -0
- package/dist/src/package.json.t.d.ts.map +1 -0
- package/dist/src/package.json.t.js +102 -0
- package/dist/src/package.json.t.js.map +1 -0
- package/dist/src/src/plugin.tsx.t.d.ts +49 -0
- package/dist/src/src/plugin.tsx.t.d.ts.map +1 -0
- package/dist/src/src/plugin.tsx.t.js +68 -0
- package/dist/src/src/plugin.tsx.t.js.map +1 -0
- package/dist/src/template.t.d.ts +16 -0
- package/dist/src/template.t.d.ts.map +1 -0
- package/dist/src/template.t.js +25 -0
- package/dist/src/template.t.js.map +1 -0
- package/dist/src/utils.t/packageJson.d.ts +6 -0
- package/dist/src/utils.t/packageJson.d.ts.map +1 -0
- package/dist/src/utils.t/packageJson.js +6 -0
- package/dist/src/utils.t/packageJson.js.map +1 -0
- package/dist/src/vite.config.ts.t.d.ts +49 -0
- package/dist/src/vite.config.ts.t.d.ts.map +1 -0
- package/dist/src/vite.config.ts.t.js +77 -0
- package/dist/src/vite.config.ts.t.js.map +1 -0
- package/dist/test/scenarios.d.ts +4 -0
- package/dist/test/scenarios.d.ts.map +1 -0
- package/dist/test/scenarios.js +19 -0
- package/dist/test/scenarios.js.map +1 -0
- package/dist/test/template.test.d.ts +2 -0
- package/dist/test/template.test.d.ts.map +1 -0
- package/dist/test/template.test.js +61 -0
- package/dist/test/template.test.js.map +1 -0
- package/package.json +41 -0
- package/project.json +25 -0
- package/src/package.json.t.ts +107 -0
- package/src/src/plugin.tsx.t.ts +63 -0
- package/src/template.t.ts +20 -0
- package/src/utils.t/packageJson.ts +7 -0
- package/src/vite.config.ts.t.ts +72 -0
- package/test/scenarios.ts +20 -0
- package/test/template.test.ts +40 -0
- package/tsconfig.json +34 -0
- package/tsconfig.plate.json +15 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
(options: import("@dxos/plate").Options<{
|
|
3
|
+
name: string;
|
|
4
|
+
createFolder: boolean;
|
|
5
|
+
defaultPlugins: boolean;
|
|
6
|
+
}, import("@dxos/plate").SlotsWithContext<{
|
|
7
|
+
name: string;
|
|
8
|
+
createFolder: boolean;
|
|
9
|
+
defaultPlugins: boolean;
|
|
10
|
+
}, {}, Required<Omit<import("@dxos/plate").Options<{
|
|
11
|
+
name: string;
|
|
12
|
+
createFolder: boolean;
|
|
13
|
+
defaultPlugins: boolean;
|
|
14
|
+
}, {}>, "slots" | "input">> & {
|
|
15
|
+
input: {
|
|
16
|
+
name: string;
|
|
17
|
+
createFolder: boolean;
|
|
18
|
+
defaultPlugins: boolean;
|
|
19
|
+
};
|
|
20
|
+
outputFile: string;
|
|
21
|
+
slots: import("@dxos/plate").SlotProducers<{}>;
|
|
22
|
+
inherited: import("@dxos/plate").FileResults<{
|
|
23
|
+
name: string;
|
|
24
|
+
createFolder: boolean;
|
|
25
|
+
defaultPlugins: boolean;
|
|
26
|
+
}, import("@dxos/plate").FileSlots<{
|
|
27
|
+
name: string;
|
|
28
|
+
createFolder: boolean;
|
|
29
|
+
defaultPlugins: boolean;
|
|
30
|
+
}>> | undefined;
|
|
31
|
+
} & {
|
|
32
|
+
imports: {
|
|
33
|
+
(): (relativeTo?: (string | string[]) | undefined) => string;
|
|
34
|
+
use: {
|
|
35
|
+
(name: string, from: string | string[], o?: {
|
|
36
|
+
aliasOf?: string | undefined;
|
|
37
|
+
isDefault?: boolean | undefined;
|
|
38
|
+
} | undefined): () => string;
|
|
39
|
+
(names: string[], from: string | string[], o?: {
|
|
40
|
+
aliasOf?: string | undefined;
|
|
41
|
+
isDefault?: boolean | undefined;
|
|
42
|
+
} | undefined): Record<string, () => string>;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
}>>): Promise<import("@dxos/plate").FileResults<any, import("@dxos/plate").FileSlots<any>>>;
|
|
46
|
+
slots: {};
|
|
47
|
+
};
|
|
48
|
+
export default _default;
|
|
49
|
+
//# sourceMappingURL=vite.config.ts.t.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.config.ts.t.d.ts","sourceRoot":"","sources":["../../src/vite.config.ts.t.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,wBAoEE"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const template_t_1 = __importDefault(require("./template.t"));
|
|
7
|
+
const plate_1 = require("@dxos/plate");
|
|
8
|
+
exports.default = template_t_1.default.define.script({
|
|
9
|
+
content: ({ input: { defaultPlugins } }) => {
|
|
10
|
+
return (0, plate_1.plate /* javascript */) `
|
|
11
|
+
import { defineConfig } from "vite";
|
|
12
|
+
import { resolve } from "path";
|
|
13
|
+
import react from "@vitejs/plugin-react";
|
|
14
|
+
import { ThemePlugin } from "@dxos/react-ui-theme/plugin";
|
|
15
|
+
|
|
16
|
+
${defaultPlugins && (0, plate_1.plate /* javascript */) `
|
|
17
|
+
import { ConfigPlugin } from "@dxos/config/vite-plugin";
|
|
18
|
+
import TopLevelAwaitPlugin from 'vite-plugin-top-level-await';
|
|
19
|
+
import WasmPlugin from 'vite-plugin-wasm';
|
|
20
|
+
`}
|
|
21
|
+
|
|
22
|
+
// https://vitejs.dev/config/
|
|
23
|
+
export default defineConfig({
|
|
24
|
+
server: {
|
|
25
|
+
host: true,
|
|
26
|
+
},
|
|
27
|
+
root: 'dev',
|
|
28
|
+
build: { outDir: "dev/out", target: "esnext" },
|
|
29
|
+
optimizeDeps: { esbuildOptions: { target: "esnext" } },
|
|
30
|
+
define: {
|
|
31
|
+
process: {
|
|
32
|
+
env: {
|
|
33
|
+
NODE_ENV: JSON.stringify(process.env.NODE_ENV),
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
plugins: [
|
|
38
|
+
react(),
|
|
39
|
+
ThemePlugin({
|
|
40
|
+
root: __dirname + '/dev',
|
|
41
|
+
content: [
|
|
42
|
+
resolve(__dirname, "./dev/index.html"),
|
|
43
|
+
resolve(__dirname, "./src/**/*.{js,ts,jsx,tsx}"),
|
|
44
|
+
resolve(__dirname, "./dev/**/*.{js,ts,jsx,tsx}"),
|
|
45
|
+
${defaultPlugins && (0, plate_1.plate /* javascript */) `
|
|
46
|
+
resolve(__dirname, "node_modules/@dxos/react-ui/dist/**/*.mjs"),
|
|
47
|
+
resolve(__dirname, "node_modules/@dxos/react-ui-theme/dist/**/*.mjs"),
|
|
48
|
+
resolve(
|
|
49
|
+
__dirname,
|
|
50
|
+
"node_modules/@dxos/react-ui-mosaic/dist/lib/**/*.mjs"
|
|
51
|
+
),
|
|
52
|
+
resolve(
|
|
53
|
+
__dirname,
|
|
54
|
+
"node_modules/@dxos/react-ui-stack/dist/lib/**/*.mjs"
|
|
55
|
+
),
|
|
56
|
+
resolve(
|
|
57
|
+
__dirname,
|
|
58
|
+
"node_modules/@dxos/react-ui-navtree/dist/lib/**/*.mjs"
|
|
59
|
+
),
|
|
60
|
+
resolve(
|
|
61
|
+
__dirname,
|
|
62
|
+
"node_modules/@braneframe/plugin-*/dist/lib/**/*.mjs"
|
|
63
|
+
),
|
|
64
|
+
`}
|
|
65
|
+
],
|
|
66
|
+
}),
|
|
67
|
+
${defaultPlugins && (0, plate_1.plate /* javascript */) `
|
|
68
|
+
ConfigPlugin(),
|
|
69
|
+
TopLevelAwaitPlugin(),
|
|
70
|
+
WasmPlugin(),
|
|
71
|
+
`}
|
|
72
|
+
],
|
|
73
|
+
});
|
|
74
|
+
`;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=vite.config.ts.t.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.config.ts.t.js","sourceRoot":"","sources":["../../src/vite.config.ts.t.ts"],"names":[],"mappings":";;;;;AAAA,8DAAoC;AACpC,uCAAoC;AAEpC,kBAAe,oBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE;QACzC,OAAO,IAAA,aAAK,CAAA,gBAAgB,EAAA;;;;;;QAMxB,cAAc,IAAI,IAAA,aAAK,CAAA,gBAAgB,EAAA;;;;OAIxC;;;;;;;;;;;;;;;;;;;;;;;;;gBAyBS,cAAc,IAAI,IAAA,aAAK,CAAA,gBAAgB,EAAA;;;;;;;;;;;;;;;;;;;eAmBxC;;;YAGH,cAAc,IAAI,IAAA,aAAK,CAAA,gBAAgB,EAAA;;;;WAIxC;;;KAGN,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenarios.d.ts","sourceRoot":"","sources":["../../test/scenarios.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAE9C,eAAO,MAAM,SAAS,EAAE,OAAO,CAAC,OAAO,QAAQ,CAAC,EAW/C,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2023 DXOS.org
|
|
4
|
+
//
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.scenarios = void 0;
|
|
7
|
+
exports.scenarios = [
|
|
8
|
+
{
|
|
9
|
+
name: 'default',
|
|
10
|
+
createFolder: true,
|
|
11
|
+
defaultPlugins: true,
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: 'default-bare',
|
|
15
|
+
createFolder: true,
|
|
16
|
+
defaultPlugins: false,
|
|
17
|
+
},
|
|
18
|
+
];
|
|
19
|
+
//# sourceMappingURL=scenarios.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenarios.js","sourceRoot":"","sources":["../../test/scenarios.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAMW,QAAA,SAAS,GAA+B;IACnD;QACE,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,IAAI;QAClB,cAAc,EAAE,IAAI;KACrB;IACD;QACE,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE,IAAI;QAClB,cAAc,EAAE,KAAK;KACtB;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.test.d.ts","sourceRoot":"","sources":["../../test/template.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2023 DXOS.org
|
|
4
|
+
//
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
+
if (mod && mod.__esModule) return mod;
|
|
23
|
+
var result = {};
|
|
24
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
+
__setModuleDefault(result, mod);
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
28
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
29
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
const chai_1 = __importStar(require("chai"));
|
|
33
|
+
const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
|
|
34
|
+
const path_1 = __importDefault(require("path"));
|
|
35
|
+
const tmp_promise_1 = __importDefault(require("tmp-promise"));
|
|
36
|
+
const scenarios_1 = require("./scenarios");
|
|
37
|
+
const package_json_1 = __importDefault(require("../package.json"));
|
|
38
|
+
const template_t_1 = __importDefault(require("../src/template.t"));
|
|
39
|
+
chai_1.default.use(chai_as_promised_1.default);
|
|
40
|
+
describe('plugin template', () => {
|
|
41
|
+
it('exists', () => {
|
|
42
|
+
(0, chai_1.expect)(true).to.be.true;
|
|
43
|
+
});
|
|
44
|
+
it('execute with permuted inputs', async () => {
|
|
45
|
+
console.log('executing', scenarios_1.scenarios.length, 'scenarios...');
|
|
46
|
+
const tempFolder = await tmp_promise_1.default.dir({ unsafeCleanup: false, keep: true, prefix: 'plugin-template' });
|
|
47
|
+
const promises = scenarios_1.scenarios.map(async (scenario) => {
|
|
48
|
+
const outputDirectory = path_1.default.resolve(tempFolder.path);
|
|
49
|
+
const results = await template_t_1.default.apply({
|
|
50
|
+
input: { ...scenario, name: `${package_json_1.default.name.split('/')[1]}-${scenario.name}` },
|
|
51
|
+
outputDirectory,
|
|
52
|
+
after: false, // do not print messages
|
|
53
|
+
});
|
|
54
|
+
return await results.apply();
|
|
55
|
+
});
|
|
56
|
+
await Promise.all(promises);
|
|
57
|
+
console.log('done executing scenarios');
|
|
58
|
+
console.log(`temp folder: ${tempFolder.path}`);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=template.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.test.js","sourceRoot":"","sources":["../../test/template.test.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,6CAAoC;AACpC,wEAA8C;AAC9C,gDAAwB;AACxB,8DAA8B;AAE9B,2CAAwC;AACxC,mEAA0C;AAC1C,mEAAyC;AAEzC,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AAEzB,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QAChB,IAAA,aAAM,EAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,qBAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,MAAM,qBAAG,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAElG,MAAM,QAAQ,GAAG,qBAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAChD,MAAM,eAAe,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEtD,MAAM,OAAO,GAAG,MAAM,oBAAQ,CAAC,KAAK,CAAC;gBACnC,KAAK,EAAE,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,GAAG,sBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE;gBAClF,eAAe;gBACf,KAAK,EAAE,KAAK,EAAE,wBAAwB;aACvC,CAAC,CAAC;YAEH,OAAO,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dxos/plugin-template",
|
|
3
|
+
"version": "0.4.7-main.7a94090",
|
|
4
|
+
"description": "An template project for prototyping plugins for the DXOS app framework.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"dxos",
|
|
7
|
+
"plugin",
|
|
8
|
+
"template",
|
|
9
|
+
"composer",
|
|
10
|
+
"local-first",
|
|
11
|
+
"offline",
|
|
12
|
+
"multiplayer"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://dxos.org",
|
|
15
|
+
"bugs": "https://github.com/dxos/dxos/issues",
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"author": "info@dxos.org",
|
|
18
|
+
"main": "dist/src/template.t.js",
|
|
19
|
+
"types": "dist/src/template.t.d.ts",
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"lodash.merge": "^4.6.2",
|
|
22
|
+
"sanitize-filename": "1.6.3",
|
|
23
|
+
"@dxos/plate": "0.4.7-main.7a94090"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@phosphor-icons/react": "^2.0.5",
|
|
27
|
+
"@types/lodash.merge": "^4.6.6",
|
|
28
|
+
"tmp-promise": "^3.0.3",
|
|
29
|
+
"ts-node": "10.9.1",
|
|
30
|
+
"types-package-json": "^2.0.39",
|
|
31
|
+
"typescript": "^5.2.2",
|
|
32
|
+
"@dxos/app-framework": "0.4.7-main.7a94090"
|
|
33
|
+
},
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"access": "public"
|
|
36
|
+
},
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsc",
|
|
39
|
+
"out": "plate ../bare-template/src --output=out --verbose"
|
|
40
|
+
}
|
|
41
|
+
}
|
package/project.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
|
|
3
|
+
"name": "plugin-template",
|
|
4
|
+
"sourceRoot": "packages/apps/templates/plugin-template/src",
|
|
5
|
+
"projectType": "library",
|
|
6
|
+
"targets": {
|
|
7
|
+
"build": {
|
|
8
|
+
"options": {
|
|
9
|
+
"main": "packages/apps/templates/plugin-template/src/config.t.ts",
|
|
10
|
+
"outputPath": "packages/apps/templates/plugin-template/dist",
|
|
11
|
+
"tsConfig": "packages/apps/templates/plugin-template/tsconfig.json"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"lint": {},
|
|
15
|
+
"test": {
|
|
16
|
+
"options": {
|
|
17
|
+
"checkLeaks": false,
|
|
18
|
+
"ciEnvironments": [
|
|
19
|
+
"nodejs"
|
|
20
|
+
],
|
|
21
|
+
"forceExit": true
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2022 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { promises as fs } from 'fs';
|
|
6
|
+
import { InputOf, Slot } from '@dxos/plate';
|
|
7
|
+
import { PackageJson } from './utils.t/packageJson';
|
|
8
|
+
|
|
9
|
+
import merge from 'lodash.merge';
|
|
10
|
+
|
|
11
|
+
import template from './template.t';
|
|
12
|
+
|
|
13
|
+
type Context = { version: string } & InputOf<typeof template>;
|
|
14
|
+
|
|
15
|
+
export namespace Features {
|
|
16
|
+
export const react = (): Partial<PackageJson> => ({
|
|
17
|
+
dependencies: {
|
|
18
|
+
react: '^18.2.0',
|
|
19
|
+
'react-dom': '^18.2.0',
|
|
20
|
+
},
|
|
21
|
+
devDependencies: {
|
|
22
|
+
'@types/react': '~18.2.0',
|
|
23
|
+
'@types/react-dom': '~18.2.0',
|
|
24
|
+
'@vitejs/plugin-react': '^4.2.1',
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export const dxosUi = (): Partial<PackageJson> => ({
|
|
29
|
+
dependencies: {
|
|
30
|
+
'@phosphor-icons/react': '^2.0.5',
|
|
31
|
+
},
|
|
32
|
+
devDependencies: {
|
|
33
|
+
'@dxos/react-ui': '^0.4.6',
|
|
34
|
+
'@dxos/react-ui-theme': '^0.4.6',
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export const defaultPlugins = (): Partial<PackageJson> => ({
|
|
39
|
+
devDependencies: {
|
|
40
|
+
'vite-plugin-top-level-await': '^1.3.1',
|
|
41
|
+
'vite-plugin-wasm': '^3.3.0',
|
|
42
|
+
'@dxos/config': '^0.4.6',
|
|
43
|
+
'@braneframe/plugin-space': '^0.4.6',
|
|
44
|
+
'@braneframe/plugin-navtree': '^0.4.6',
|
|
45
|
+
'@braneframe/plugin-layout': '^0.4.6',
|
|
46
|
+
'@braneframe/plugin-graph': '^0.4.6',
|
|
47
|
+
'@braneframe/plugin-client': '^0.4.6',
|
|
48
|
+
'@braneframe/plugin-stack': '^0.4.6',
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export const base = ({ name, version }: Context): Partial<PackageJson> => {
|
|
54
|
+
return {
|
|
55
|
+
name,
|
|
56
|
+
version: version,
|
|
57
|
+
description: `${name} - a composer plugin`,
|
|
58
|
+
private: true,
|
|
59
|
+
main: 'dist/index.js',
|
|
60
|
+
types: 'dist/index.d.ts',
|
|
61
|
+
scripts: {
|
|
62
|
+
build: 'tsc',
|
|
63
|
+
dev: 'vite',
|
|
64
|
+
},
|
|
65
|
+
dependencies: {
|
|
66
|
+
'@preact/signals-react': '^1.3.6',
|
|
67
|
+
"@dxos/app-framework": "0.4.6",
|
|
68
|
+
},
|
|
69
|
+
devDependencies: {
|
|
70
|
+
'@types/node': '^18.11.9',
|
|
71
|
+
typescript: '^5.0.4',
|
|
72
|
+
vite: '^5.1.3',
|
|
73
|
+
'@braneframe/plugin-theme': '^0.4.6',
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const loadJson = async (moduleRelativePath: string) => {
|
|
79
|
+
const content = await fs.readFile(path.resolve(__dirname, moduleRelativePath));
|
|
80
|
+
return JSON.parse(content.toString());
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export default template.define
|
|
84
|
+
.slots<{ packageJson?: Slot<Partial<PackageJson>, InputOf<typeof template>, { depVersion?: string }> }>({
|
|
85
|
+
packageJson: {},
|
|
86
|
+
})
|
|
87
|
+
.text({
|
|
88
|
+
content: async ({ input, slots: { packageJson: slotPackageJson } }) => {
|
|
89
|
+
const context = {
|
|
90
|
+
version: '0.0.1',
|
|
91
|
+
...input,
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const [first, ...rest] = [
|
|
95
|
+
base(context),
|
|
96
|
+
Features.react(),
|
|
97
|
+
Features.dxosUi(),
|
|
98
|
+
input.defaultPlugins && Features.defaultPlugins(),
|
|
99
|
+
slotPackageJson?.() ?? {},
|
|
100
|
+
].filter(Boolean);
|
|
101
|
+
|
|
102
|
+
const packageJson = merge(first, ...rest);
|
|
103
|
+
|
|
104
|
+
const result = JSON.stringify(packageJson, null, 2);
|
|
105
|
+
return result;
|
|
106
|
+
},
|
|
107
|
+
});
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { plate } from "@dxos/plate";
|
|
2
|
+
import template from "../template.t";
|
|
3
|
+
|
|
4
|
+
export default template.define.script({
|
|
5
|
+
content: ({ input: { name }, imports }) => plate/* javascript */`
|
|
6
|
+
${imports}
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import { Asterisk } from '@phosphor-icons/react';
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
PluginDefinition,
|
|
12
|
+
type SurfaceProvides,
|
|
13
|
+
type GraphBuilderProvides,
|
|
14
|
+
type IntentResolverProvides,
|
|
15
|
+
type TranslationsProvides,
|
|
16
|
+
pluginMeta,
|
|
17
|
+
} from '@dxos/app-framework';
|
|
18
|
+
|
|
19
|
+
export const PLUGIN_ID = '${name}';
|
|
20
|
+
|
|
21
|
+
export const meta = pluginMeta({
|
|
22
|
+
id: PLUGIN_ID,
|
|
23
|
+
name: "",
|
|
24
|
+
iconComponent: Asterisk,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export type TemplatePluginProvides = SurfaceProvides &
|
|
28
|
+
IntentResolverProvides &
|
|
29
|
+
GraphBuilderProvides &
|
|
30
|
+
TranslationsProvides & {};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* See https://docs.dxos.org/composer/plugins/definition
|
|
34
|
+
*/
|
|
35
|
+
const plugin = (): PluginDefinition<TemplatePluginProvides> => {
|
|
36
|
+
return {
|
|
37
|
+
meta,
|
|
38
|
+
provides: {
|
|
39
|
+
root: () => null,
|
|
40
|
+
surface: {
|
|
41
|
+
component: ({ data, role }) => null,
|
|
42
|
+
},
|
|
43
|
+
intent: {
|
|
44
|
+
resolver: (intent) => {},
|
|
45
|
+
},
|
|
46
|
+
graph: {
|
|
47
|
+
builder: ({ parent, plugins }) => {},
|
|
48
|
+
},
|
|
49
|
+
translations: [
|
|
50
|
+
{
|
|
51
|
+
'en-US': {
|
|
52
|
+
[PLUGIN_ID]: {
|
|
53
|
+
'plugin name': 'Template',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
export default plugin;
|
|
62
|
+
`
|
|
63
|
+
})
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z, interactiveDirectory } from '@dxos/plate';
|
|
2
|
+
import sanitize from 'sanitize-filename';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
|
|
5
|
+
export default interactiveDirectory({
|
|
6
|
+
src: __filename.endsWith('.ts') ? __dirname : path.resolve(__dirname, '../../src'),
|
|
7
|
+
inputShape: z.object({
|
|
8
|
+
name: z.string().describe('Name the new package').default(path.basename(process.cwd())),
|
|
9
|
+
createFolder: z.boolean().describe('Create a new folder for the project').default(true),
|
|
10
|
+
defaultPlugins: z.boolean().describe('Include default plugins').default(true),
|
|
11
|
+
}),
|
|
12
|
+
options({ input, outputDirectory, ...rest }) {
|
|
13
|
+
const { name, createFolder } = {...input};
|
|
14
|
+
return {
|
|
15
|
+
input,
|
|
16
|
+
outputDirectory: createFolder ? path.resolve(outputDirectory, sanitize(name ?? '')) : outputDirectory,
|
|
17
|
+
...rest,
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import template from './template.t';
|
|
2
|
+
import { plate } from '@dxos/plate';
|
|
3
|
+
|
|
4
|
+
export default template.define.script({
|
|
5
|
+
content: ({ input: { defaultPlugins } }) => {
|
|
6
|
+
return plate/* javascript */`
|
|
7
|
+
import { defineConfig } from "vite";
|
|
8
|
+
import { resolve } from "path";
|
|
9
|
+
import react from "@vitejs/plugin-react";
|
|
10
|
+
import { ThemePlugin } from "@dxos/react-ui-theme/plugin";
|
|
11
|
+
|
|
12
|
+
${defaultPlugins && plate/* javascript */`
|
|
13
|
+
import { ConfigPlugin } from "@dxos/config/vite-plugin";
|
|
14
|
+
import TopLevelAwaitPlugin from 'vite-plugin-top-level-await';
|
|
15
|
+
import WasmPlugin from 'vite-plugin-wasm';
|
|
16
|
+
`}
|
|
17
|
+
|
|
18
|
+
// https://vitejs.dev/config/
|
|
19
|
+
export default defineConfig({
|
|
20
|
+
server: {
|
|
21
|
+
host: true,
|
|
22
|
+
},
|
|
23
|
+
root: 'dev',
|
|
24
|
+
build: { outDir: "dev/out", target: "esnext" },
|
|
25
|
+
optimizeDeps: { esbuildOptions: { target: "esnext" } },
|
|
26
|
+
define: {
|
|
27
|
+
process: {
|
|
28
|
+
env: {
|
|
29
|
+
NODE_ENV: JSON.stringify(process.env.NODE_ENV),
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
plugins: [
|
|
34
|
+
react(),
|
|
35
|
+
ThemePlugin({
|
|
36
|
+
root: __dirname + '/dev',
|
|
37
|
+
content: [
|
|
38
|
+
resolve(__dirname, "./dev/index.html"),
|
|
39
|
+
resolve(__dirname, "./src/**/*.{js,ts,jsx,tsx}"),
|
|
40
|
+
resolve(__dirname, "./dev/**/*.{js,ts,jsx,tsx}"),
|
|
41
|
+
${defaultPlugins && plate/* javascript */`
|
|
42
|
+
resolve(__dirname, "node_modules/@dxos/react-ui/dist/**/*.mjs"),
|
|
43
|
+
resolve(__dirname, "node_modules/@dxos/react-ui-theme/dist/**/*.mjs"),
|
|
44
|
+
resolve(
|
|
45
|
+
__dirname,
|
|
46
|
+
"node_modules/@dxos/react-ui-mosaic/dist/lib/**/*.mjs"
|
|
47
|
+
),
|
|
48
|
+
resolve(
|
|
49
|
+
__dirname,
|
|
50
|
+
"node_modules/@dxos/react-ui-stack/dist/lib/**/*.mjs"
|
|
51
|
+
),
|
|
52
|
+
resolve(
|
|
53
|
+
__dirname,
|
|
54
|
+
"node_modules/@dxos/react-ui-navtree/dist/lib/**/*.mjs"
|
|
55
|
+
),
|
|
56
|
+
resolve(
|
|
57
|
+
__dirname,
|
|
58
|
+
"node_modules/@braneframe/plugin-*/dist/lib/**/*.mjs"
|
|
59
|
+
),
|
|
60
|
+
`}
|
|
61
|
+
],
|
|
62
|
+
}),
|
|
63
|
+
${defaultPlugins && plate/* javascript */`
|
|
64
|
+
ConfigPlugin(),
|
|
65
|
+
TopLevelAwaitPlugin(),
|
|
66
|
+
WasmPlugin(),
|
|
67
|
+
`}
|
|
68
|
+
],
|
|
69
|
+
});
|
|
70
|
+
`
|
|
71
|
+
}
|
|
72
|
+
})
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type InputOf } from '@dxos/plate';
|
|
6
|
+
|
|
7
|
+
import type template from '../src/template.t';
|
|
8
|
+
|
|
9
|
+
export const scenarios: InputOf<typeof template>[] = [
|
|
10
|
+
{
|
|
11
|
+
name: 'default',
|
|
12
|
+
createFolder: true,
|
|
13
|
+
defaultPlugins: true,
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: 'default-bare',
|
|
17
|
+
createFolder: true,
|
|
18
|
+
defaultPlugins: false,
|
|
19
|
+
},
|
|
20
|
+
];
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import chai, { expect } from 'chai';
|
|
6
|
+
import chaiAsPromised from 'chai-as-promised';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
import tmp from 'tmp-promise';
|
|
9
|
+
|
|
10
|
+
import { scenarios } from './scenarios';
|
|
11
|
+
import packageJson from '../package.json';
|
|
12
|
+
import template from '../src/template.t';
|
|
13
|
+
|
|
14
|
+
chai.use(chaiAsPromised);
|
|
15
|
+
|
|
16
|
+
describe('plugin template', () => {
|
|
17
|
+
it('exists', () => {
|
|
18
|
+
expect(true).to.be.true;
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('execute with permuted inputs', async () => {
|
|
22
|
+
console.log('executing', scenarios.length, 'scenarios...');
|
|
23
|
+
const tempFolder = await tmp.dir({ unsafeCleanup: false, keep: true, prefix: 'plugin-template' });
|
|
24
|
+
|
|
25
|
+
const promises = scenarios.map(async (scenario) => {
|
|
26
|
+
const outputDirectory = path.resolve(tempFolder.path);
|
|
27
|
+
|
|
28
|
+
const results = await template.apply({
|
|
29
|
+
input: { ...scenario, name: `${packageJson.name.split('/')[1]}-${scenario.name}` },
|
|
30
|
+
outputDirectory,
|
|
31
|
+
after: false, // do not print messages
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
return await results.apply();
|
|
35
|
+
});
|
|
36
|
+
await Promise.all(promises);
|
|
37
|
+
console.log('done executing scenarios');
|
|
38
|
+
console.log(`temp folder: ${tempFolder.path}`);
|
|
39
|
+
});
|
|
40
|
+
});
|