@dtwo/schema 3.0.0-rc.13

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/index.mjs ADDED
@@ -0,0 +1,567 @@
1
+ import { defineUntypedSchema } from 'untyped';
2
+ import defu from 'defu';
3
+ import { join, resolve } from 'pathe';
4
+ import { isDevelopment, isDebug } from 'std-env';
5
+ import { findWorkspaceDir } from 'pkg-types';
6
+ import createResolver from 'postcss-import-resolver';
7
+ import { withoutLeadingSlash } from 'ufo';
8
+
9
+ const adhoc = defineUntypedSchema({
10
+ components: {
11
+ $resolve: (val) => {
12
+ if (Array.isArray(val)) {
13
+ return { dirs: val };
14
+ }
15
+ if (val === void 0 || val === true) {
16
+ return { dirs: [{ path: "~/components/global", global: true }, "~/components"] };
17
+ }
18
+ return val;
19
+ }
20
+ },
21
+ imports: {
22
+ global: false,
23
+ dirs: []
24
+ },
25
+ pages: void 0,
26
+ telemetry: void 0
27
+ });
28
+
29
+ const app = defineUntypedSchema({
30
+ kdu: {
31
+ compilerOptions: {}
32
+ },
33
+ app: {
34
+ baseURL: {
35
+ $resolve: async (val) => val || process.env.DTWO_APP_BASE_URL || "/"
36
+ },
37
+ buildAssetsDir: {
38
+ $resolve: async (val) => val || process.env.DTWO_APP_BUILD_ASSETS_DIR || "/_dtwo/"
39
+ },
40
+ cdnURL: {
41
+ $resolve: async (val, get) => await get("dev") ? "" : (process.env.DTWO_APP_CDN_URL ?? val) || ""
42
+ },
43
+ head: {
44
+ $resolve: async (val, get) => {
45
+ const resolved = defu(val, await get("meta"), {
46
+ meta: [],
47
+ link: [],
48
+ style: [],
49
+ script: [],
50
+ noscript: []
51
+ });
52
+ if (!resolved.meta.find((m) => m.charset)?.charset) {
53
+ resolved.meta.unshift({ charset: resolved.charset || "utf-8" });
54
+ }
55
+ if (!resolved.meta.find((m) => m.name === "viewport")?.content) {
56
+ resolved.meta.unshift({ name: "viewport", content: resolved.viewport || "width=device-width, initial-scale=1" });
57
+ }
58
+ resolved.meta = resolved.meta.filter(Boolean);
59
+ resolved.link = resolved.link.filter(Boolean);
60
+ resolved.style = resolved.style.filter(Boolean);
61
+ resolved.script = resolved.script.filter(Boolean);
62
+ resolved.noscript = resolved.noscript.filter(Boolean);
63
+ return resolved;
64
+ }
65
+ },
66
+ layoutTransition: false,
67
+ pageTransition: false,
68
+ keepalive: false,
69
+ rootId: "__dtwo",
70
+ rootTag: "div"
71
+ },
72
+ plugins: [],
73
+ css: {
74
+ $resolve: (val) => (val ?? []).map((c) => c.src || c)
75
+ }
76
+ });
77
+
78
+ const build = defineUntypedSchema({
79
+ builder: {
80
+ $resolve: async (val, get) => {
81
+ if (typeof val === "object") {
82
+ return val;
83
+ }
84
+ const map = {
85
+ wite: "@dtwo/wite-builder",
86
+ webpack: "@dtwo/webpack-builder"
87
+ };
88
+ return map[val] || val || (await get("wite") === false ? map.webpack : map.wite);
89
+ }
90
+ },
91
+ sourcemap: {
92
+ $resolve: async (val, get) => {
93
+ if (typeof val === "boolean") {
94
+ return { server: val, client: val };
95
+ }
96
+ return defu(val, {
97
+ server: true,
98
+ client: await get("dev")
99
+ });
100
+ }
101
+ },
102
+ build: {
103
+ transpile: {
104
+ $resolve: (val) => [].concat(val).filter(Boolean)
105
+ },
106
+ templates: [],
107
+ analyze: {
108
+ $resolve: async (val, get) => {
109
+ if (val !== true) {
110
+ return val ?? false;
111
+ }
112
+ const rootDir = await get("rootDir");
113
+ return {
114
+ template: "treemap",
115
+ projectRoot: rootDir,
116
+ filename: join(rootDir, ".dtwo/stats", "{name}.html")
117
+ };
118
+ }
119
+ }
120
+ }
121
+ });
122
+
123
+ const common = defineUntypedSchema({
124
+ extends: null,
125
+ theme: null,
126
+ rootDir: {
127
+ $resolve: (val) => typeof val === "string" ? resolve(val) : process.cwd()
128
+ },
129
+ workspaceDir: {
130
+ $resolve: async (val, get) => val ? resolve(await get("rootDir"), val) : await findWorkspaceDir(await get("rootDir")).catch(() => get("rootDir"))
131
+ },
132
+ srcDir: {
133
+ $resolve: async (val, get) => resolve(await get("rootDir"), val || ".")
134
+ },
135
+ serverDir: {
136
+ $resolve: async (val, get) => resolve(await get("rootDir"), val || resolve(await get("srcDir"), "server"))
137
+ },
138
+ buildDir: {
139
+ $resolve: async (val, get) => resolve(await get("rootDir"), val || ".dtwo")
140
+ },
141
+ modulesDir: {
142
+ $default: ["node_modules"],
143
+ $resolve: async (val, get) => [
144
+ ...await Promise.all(val.map(async (dir) => resolve(await get("rootDir"), dir))),
145
+ resolve(process.cwd(), "node_modules")
146
+ ]
147
+ },
148
+ dev: Boolean(isDevelopment),
149
+ test: Boolean(isDevelopment),
150
+ debug: {
151
+ $resolve: async (val, get) => val ?? isDebug
152
+ },
153
+ ssr: {
154
+ $resolve: (val) => val ?? true
155
+ },
156
+ modules: [],
157
+ dir: {
158
+ assets: "assets",
159
+ layouts: "layouts",
160
+ middleware: "middleware",
161
+ pages: "pages",
162
+ plugins: "plugins",
163
+ public: {
164
+ $resolve: async (val, get) => val || await get("dir.static") || "public"
165
+ },
166
+ static: {
167
+ $schema: { deprecated: "use `dir.public` option instead" },
168
+ $resolve: async (val, get) => val || await get("dir.public") || "public"
169
+ }
170
+ },
171
+ extensions: {
172
+ $resolve: (val) => [".js", ".jsx", ".mjs", ".ts", ".tsx", ".kdu"].concat(val).filter(Boolean)
173
+ },
174
+ alias: {
175
+ $resolve: async (val, get) => ({
176
+ "~~": await get("rootDir"),
177
+ "@@": await get("rootDir"),
178
+ "~": await get("srcDir"),
179
+ "@": await get("srcDir"),
180
+ [await get("dir.assets")]: join(await get("srcDir"), await get("dir.assets")),
181
+ [await get("dir.public")]: join(await get("srcDir"), await get("dir.public")),
182
+ ...val
183
+ })
184
+ },
185
+ ignoreOptions: void 0,
186
+ ignorePrefix: "-",
187
+ ignore: {
188
+ $resolve: async (val, get) => [
189
+ "**/*.stories.{js,ts,jsx,tsx}",
190
+ "**/*.{spec,test}.{js,ts,jsx,tsx}",
191
+ "**/*.d.ts",
192
+ ".output",
193
+ await get("ignorePrefix") && `**/${await get("ignorePrefix")}*.*`
194
+ ].concat(val).filter(Boolean)
195
+ },
196
+ watchers: {
197
+ rewatchOnRawEvents: void 0,
198
+ webpack: {
199
+ aggregateTimeout: 1e3
200
+ },
201
+ chokidar: {
202
+ ignoreInitial: true
203
+ }
204
+ },
205
+ hooks: null,
206
+ runtimeConfig: {
207
+ $resolve: async (val, get) => defu(val, {
208
+ public: await get("publicRuntimeConfig"),
209
+ app: {
210
+ baseURL: (await get("app")).baseURL,
211
+ buildAssetsDir: (await get("app")).buildAssetsDir,
212
+ cdnURL: (await get("app")).cdnURL
213
+ }
214
+ })
215
+ },
216
+ appConfig: {}
217
+ });
218
+
219
+ const dev = defineUntypedSchema({
220
+ devServer: {
221
+ https: false,
222
+ port: process.env.DTWO_PORT || process.env.HOLE_PORT || process.env.PORT || 3e3,
223
+ host: process.env.DTWO_HOST || process.env.HOLE_HOST || process.env.HOST || "localhost",
224
+ url: "http://localhost:3000"
225
+ }
226
+ });
227
+
228
+ const experimental = defineUntypedSchema({
229
+ experimental: {
230
+ asyncEntry: {
231
+ $resolve: (val) => val ?? false
232
+ },
233
+ reactivityTransform: false,
234
+ externalKdu: true,
235
+ treeshakeClientOnly: true,
236
+ witeNode: {
237
+ $resolve: (val) => {
238
+ val = process.env.EXPERIMENTAL_WITE_NODE ? true : val;
239
+ if (val === true) {
240
+ console.warn("`wite-node` is now enabled by default. You can safely remove `experimental.witeNode` from your config.");
241
+ } else if (val === false) {
242
+ console.warn("`wite-node` is now enabled by default. To disable it, set `wite.devBundler` to `legacy` instead.");
243
+ }
244
+ return val ?? true;
245
+ }
246
+ },
247
+ witeServerDynamicImports: true,
248
+ inlineSSRStyles: {
249
+ async $resolve(val, get) {
250
+ if (val === false || await get("dev") || await get("ssr") === false || await get("builder") === "@dtwo/webpack-builder") {
251
+ return false;
252
+ }
253
+ return val ?? true;
254
+ }
255
+ },
256
+ noScripts: false,
257
+ payloadExtraction: {
258
+ async $resolve(enabled, get) {
259
+ enabled = enabled ?? false;
260
+ if (enabled) {
261
+ console.warn("Using experimental payload extraction for full-static output. You can opt-out by setting `experimental.payloadExtraction` to `false`.");
262
+ }
263
+ return enabled;
264
+ }
265
+ },
266
+ crossOriginPrefetch: false,
267
+ writeEarlyHints: false
268
+ }
269
+ });
270
+
271
+ const generate = defineUntypedSchema({
272
+ generate: {
273
+ routes: [],
274
+ exclude: []
275
+ }
276
+ });
277
+
278
+ const internal = defineUntypedSchema({
279
+ _majorVersion: 3,
280
+ _legacyGenerate: false,
281
+ _start: false,
282
+ _build: false,
283
+ _generate: false,
284
+ _prepare: false,
285
+ _cli: false,
286
+ _requiredModules: {},
287
+ _dtwoConfigFile: void 0,
288
+ _dtwoConfigFiles: [],
289
+ appDir: "",
290
+ _installedModules: [],
291
+ _modules: []
292
+ });
293
+
294
+ const hole = defineUntypedSchema({
295
+ hole: {
296
+ routeRules: {
297
+ $resolve: async (val, get) => ({
298
+ ...await get("routeRules") || {},
299
+ ...val || {}
300
+ })
301
+ }
302
+ },
303
+ routeRules: {},
304
+ serverHandlers: [],
305
+ devServerHandlers: []
306
+ });
307
+
308
+ const postcss = defineUntypedSchema({
309
+ postcss: {
310
+ config: false,
311
+ plugins: {
312
+ "postcss-import": {
313
+ $resolve: async (val, get) => val !== false ? defu(val || {}, {
314
+ resolve: createResolver({
315
+ alias: { ...await get("alias") },
316
+ modules: [
317
+ await get("srcDir"),
318
+ await get("rootDir"),
319
+ ...await get("modulesDir")
320
+ ]
321
+ })
322
+ }) : val
323
+ },
324
+ "postcss-url": {},
325
+ autoprefixer: {},
326
+ cssnano: {
327
+ $resolve: async (val, get) => val ?? !(await get("dev") && {
328
+ preset: ["default", {
329
+ minifyFontValues: { removeQuotes: false }
330
+ }]
331
+ })
332
+ }
333
+ }
334
+ }
335
+ });
336
+
337
+ const router = defineUntypedSchema({
338
+ router: {
339
+ options: {}
340
+ }
341
+ });
342
+
343
+ const typescript = defineUntypedSchema({
344
+ typescript: {
345
+ strict: true,
346
+ includeWorkspace: false,
347
+ typeCheck: false,
348
+ tsConfig: {},
349
+ shim: true
350
+ }
351
+ });
352
+
353
+ const wite = defineUntypedSchema({
354
+ wite: {
355
+ root: {
356
+ $resolve: async (val, get) => val ?? await get("srcDir")
357
+ },
358
+ mode: {
359
+ $resolve: async (val, get) => val ?? (await get("dev") ? "development" : "production")
360
+ },
361
+ logLevel: "warn",
362
+ define: {
363
+ $resolve: async (val, get) => ({
364
+ "process.dev": await get("dev"),
365
+ ...val || {}
366
+ })
367
+ },
368
+ resolve: {
369
+ extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".kdu"]
370
+ },
371
+ publicDir: {
372
+ $resolve: async (val, get) => val ?? resolve(await get("srcDir"), (await get("dir")).public)
373
+ },
374
+ kdu: {
375
+ isProduction: {
376
+ $resolve: async (val, get) => val ?? !await get("dev")
377
+ },
378
+ template: {
379
+ compilerOptions: {
380
+ $resolve: async (val, get) => val ?? (await get("kdu")).compilerOptions
381
+ }
382
+ }
383
+ },
384
+ optimizeDeps: {
385
+ exclude: {
386
+ $resolve: async (val, get) => [
387
+ ...val || [],
388
+ ...(await get("build.transpile")).filter((i) => typeof i === "string"),
389
+ "kdu-demi"
390
+ ]
391
+ }
392
+ },
393
+ esbuild: {
394
+ jsxFactory: "h",
395
+ jsxFragment: "Fragment",
396
+ tsconfigRaw: "{}"
397
+ },
398
+ clearScreen: false,
399
+ build: {
400
+ assetsDir: {
401
+ $resolve: async (val, get) => val ?? withoutLeadingSlash((await get("app")).buildAssetsDir)
402
+ },
403
+ emptyOutDir: false
404
+ },
405
+ server: {
406
+ fs: {
407
+ allow: {
408
+ $resolve: async (val, get) => [
409
+ await get("buildDir"),
410
+ await get("srcDir"),
411
+ await get("rootDir"),
412
+ await get("workspaceDir"),
413
+ ...await get("modulesDir"),
414
+ ...val ?? []
415
+ ]
416
+ }
417
+ }
418
+ }
419
+ }
420
+ });
421
+
422
+ const webpack = defineUntypedSchema({
423
+ webpack: {
424
+ analyze: {
425
+ $resolve: async (val, get) => {
426
+ if (val !== true) {
427
+ return val ?? false;
428
+ }
429
+ const rootDir = await get("rootDir");
430
+ return {
431
+ template: "treemap",
432
+ projectRoot: rootDir,
433
+ filename: join(rootDir, ".dtwo/stats", "{name}.html")
434
+ };
435
+ }
436
+ },
437
+ profile: process.argv.includes("--profile"),
438
+ extractCSS: true,
439
+ cssSourceMap: {
440
+ $resolve: async (val, get) => val ?? await get("dev")
441
+ },
442
+ serverURLPolyfill: "url",
443
+ filenames: {
444
+ app: ({ isDev }) => isDev ? `[name].js` : `[contenthash:7].js`,
445
+ chunk: ({ isDev }) => isDev ? `[name].js` : `[contenthash:7].js`,
446
+ css: ({ isDev }) => isDev ? "[name].css" : "css/[contenthash:7].css",
447
+ img: ({ isDev }) => isDev ? "[path][name].[ext]" : "img/[name].[contenthash:7].[ext]",
448
+ font: ({ isDev }) => isDev ? "[path][name].[ext]" : "fonts/[name].[contenthash:7].[ext]",
449
+ video: ({ isDev }) => isDev ? "[path][name].[ext]" : "videos/[name].[contenthash:7].[ext]"
450
+ },
451
+ loaders: {
452
+ $resolve: async (val, get) => {
453
+ const styleLoaders = [
454
+ "css",
455
+ "cssModules",
456
+ "less",
457
+ "sass",
458
+ "scss",
459
+ "stylus",
460
+ "kduStyle"
461
+ ];
462
+ for (const name of styleLoaders) {
463
+ const loader = val[name];
464
+ if (loader && loader.sourceMap === void 0) {
465
+ loader.sourceMap = Boolean(await get("build.cssSourceMap"));
466
+ }
467
+ }
468
+ return val;
469
+ },
470
+ file: { esModule: false },
471
+ fontUrl: { esModule: false, limit: 1e3 },
472
+ imgUrl: { esModule: false, limit: 1e3 },
473
+ pugPlain: {},
474
+ kdu: {
475
+ productionMode: { $resolve: async (val, get) => val ?? !await get("dev") },
476
+ transformAssetUrls: {
477
+ video: "src",
478
+ source: "src",
479
+ object: "src",
480
+ embed: "src"
481
+ },
482
+ compilerOptions: { $resolve: async (val, get) => val ?? await get("kdu.compilerOptions") }
483
+ },
484
+ css: {
485
+ importLoaders: 0,
486
+ url: {
487
+ filter: (url, resourcePath) => !url.startsWith("/")
488
+ },
489
+ esModule: false
490
+ },
491
+ cssModules: {
492
+ importLoaders: 0,
493
+ url: {
494
+ filter: (url, resourcePath) => !url.startsWith("/")
495
+ },
496
+ esModule: false,
497
+ modules: {
498
+ localIdentName: "[local]_[hash:base64:5]"
499
+ }
500
+ },
501
+ less: {},
502
+ sass: {
503
+ sassOptions: {
504
+ indentedSyntax: true
505
+ }
506
+ },
507
+ scss: {},
508
+ stylus: {},
509
+ kduStyle: {}
510
+ },
511
+ plugins: [],
512
+ terser: {},
513
+ aggressiveCodeRemoval: false,
514
+ optimizeCSS: {
515
+ $resolve: async (val, get) => val ?? (await get("build.extractCSS") ? {} : false)
516
+ },
517
+ optimization: {
518
+ runtimeChunk: "single",
519
+ minimize: { $resolve: async (val, get) => val ?? !await get("dev") },
520
+ minimizer: void 0,
521
+ splitChunks: {
522
+ chunks: "all",
523
+ automaticNameDelimiter: "/",
524
+ cacheGroups: {}
525
+ }
526
+ },
527
+ postcss: {
528
+ execute: void 0,
529
+ postcssOptions: {
530
+ config: {
531
+ $resolve: async (val, get) => val ?? await get("postcss.config")
532
+ },
533
+ plugins: {
534
+ $resolve: async (val, get) => val ?? await get("postcss.plugins")
535
+ }
536
+ },
537
+ sourceMap: void 0,
538
+ implementation: void 0,
539
+ order: ""
540
+ },
541
+ devMiddleware: {
542
+ stats: "none"
543
+ },
544
+ hotMiddleware: {},
545
+ friendlyErrors: true,
546
+ warningIgnoreFilters: []
547
+ }
548
+ });
549
+
550
+ const index = {
551
+ ...adhoc,
552
+ ...app,
553
+ ...build,
554
+ ...common,
555
+ ...dev,
556
+ ...experimental,
557
+ ...generate,
558
+ ...internal,
559
+ ...hole,
560
+ ...postcss,
561
+ ...router,
562
+ ...typescript,
563
+ ...wite,
564
+ ...webpack
565
+ };
566
+
567
+ export { index as DtwoConfigSchema };
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@dtwo/schema",
3
+ "version": "3.0.0-rc.13",
4
+ "repository": "d2js/framework",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.mjs",
8
+ "types": "./dist/index.d.ts",
9
+ "files": [
10
+ "dist",
11
+ "schema"
12
+ ],
13
+ "devDependencies": {
14
+ "@types/lodash.template": "^4",
15
+ "@types/semver": "^7",
16
+ "@unhead/schema": "^0.6.9",
17
+ "@witejs/plugin-kdu": "^4.0.0",
18
+ "holepack": "^1.0.0",
19
+ "kdu-router": "^4.1.6",
20
+ "unbuild": "latest",
21
+ "wite": "^4.0.0"
22
+ },
23
+ "dependencies": {
24
+ "c12": "^1.0.1",
25
+ "create-require": "^1.1.1",
26
+ "defu": "^6.1.1",
27
+ "jiti": "^1.16.0",
28
+ "pathe": "^1.0.0",
29
+ "pkg-types": "^1.0.1",
30
+ "postcss-import-resolver": "^2.0.0",
31
+ "scule": "^1.0.0",
32
+ "std-env": "^3.3.1",
33
+ "ufo": "^1.0.0",
34
+ "unimport": "^1.0.0",
35
+ "untyped": "^1.0.0"
36
+ },
37
+ "engines": {
38
+ "node": "^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
39
+ },
40
+ "scripts": {}
41
+ }