@swiftuijs/twill 0.3.0 → 0.4.0

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 (72) hide show
  1. package/README.md +8 -3
  2. package/bin/run.mjs +2 -2
  3. package/dist/branches.d.ts +7 -1
  4. package/dist/cli.js +7 -8
  5. package/dist/{compilation-cache-7SugqJ4n.js → compilation-cache-BrV71YKt.js} +2 -3
  6. package/dist/{compilation-cache-7SugqJ4n.js.map → compilation-cache-BrV71YKt.js.map} +1 -1
  7. package/dist/{compiler-CbNSBUI2.js → compiler-DI0H4d1R.js} +178 -66
  8. package/dist/compiler-DI0H4d1R.js.map +1 -0
  9. package/dist/compiler.d.ts +2 -0
  10. package/dist/config-la_KkjCS.js +1 -0
  11. package/dist/config.js +2 -2
  12. package/dist/{configuration-BVMf6Q_j.js → configuration-ppqhmuy4.js} +7 -5
  13. package/dist/configuration-ppqhmuy4.js.map +1 -0
  14. package/dist/configuration.d.ts +1 -1
  15. package/dist/declarations-DXtb1AHP.js +131 -0
  16. package/dist/declarations-DXtb1AHP.js.map +1 -0
  17. package/dist/declarations.js +1 -132
  18. package/dist/doctor-BHwU_YBw.js +200 -0
  19. package/dist/doctor-BHwU_YBw.js.map +1 -0
  20. package/dist/doctor.js +1 -202
  21. package/dist/editor.d.ts +1 -0
  22. package/dist/editor.js +31 -5
  23. package/dist/editor.js.map +1 -1
  24. package/dist/esbuild.js +2 -3
  25. package/dist/{extensions-B1xTkoYP.js → extensions-7ixttcoK.js} +2 -3
  26. package/dist/{extensions-B1xTkoYP.js.map → extensions-7ixttcoK.js.map} +1 -1
  27. package/dist/{files-BW9geU0_.js → files-CgwJJ992.js} +3 -4
  28. package/dist/{files-BW9geU0_.js.map → files-CgwJJ992.js.map} +1 -1
  29. package/dist/index.js +2 -2
  30. package/dist/{loader-compiler-D1teTrXw.js → loader-compiler.js} +4 -5
  31. package/dist/loader-compiler.js.map +1 -0
  32. package/dist/loader-registration-BO43rvVU.js +14 -0
  33. package/dist/loader-registration-BO43rvVU.js.map +1 -0
  34. package/dist/loader-registration.d.ts +4 -0
  35. package/dist/loader-registration.js +1 -0
  36. package/dist/loader-state-DB7sONR_.js +60 -0
  37. package/dist/loader-state-DB7sONR_.js.map +1 -0
  38. package/dist/loader-state.d.ts +34 -0
  39. package/dist/loader-sync.d.ts +3 -0
  40. package/dist/loader-sync.js +27 -0
  41. package/dist/loader-sync.js.map +1 -0
  42. package/dist/loader.d.ts +2 -4
  43. package/dist/loader.js +10 -48
  44. package/dist/loader.js.map +1 -1
  45. package/dist/{plugin-BHfiQ2L-.js → plugin-DDOHhv7Z.js} +6 -7
  46. package/dist/{plugin-BHfiQ2L-.js.map → plugin-DDOHhv7Z.js.map} +1 -1
  47. package/dist/project-DYXf2Kgt.js +442 -0
  48. package/dist/project-DYXf2Kgt.js.map +1 -0
  49. package/dist/project.js +2 -443
  50. package/dist/register.js +3 -4
  51. package/dist/register.js.map +1 -1
  52. package/dist/rollup.js +2 -3
  53. package/dist/rspack.js +2 -3
  54. package/dist/syntax.js +2 -3
  55. package/dist/{transpile-D8P8Lsbx.js → transpile--6CFGUm0.js} +3 -4
  56. package/dist/{transpile-D8P8Lsbx.js.map → transpile--6CFGUm0.js.map} +1 -1
  57. package/dist/typescript-plugin.cjs +252 -128
  58. package/dist/typescript-plugin.cjs.map +1 -1
  59. package/dist/vite-D0Ct4uy4.js +6 -0
  60. package/dist/vite-D0Ct4uy4.js.map +1 -0
  61. package/dist/vite-react.js +2 -3
  62. package/dist/vite.js +1 -7
  63. package/dist/webpack.js +2 -3
  64. package/package.json +3 -3
  65. package/schemas/twill.schema.json +6 -0
  66. package/dist/compiler-CbNSBUI2.js.map +0 -1
  67. package/dist/configuration-BVMf6Q_j.js.map +0 -1
  68. package/dist/declarations.js.map +0 -1
  69. package/dist/doctor.js.map +0 -1
  70. package/dist/loader-compiler-D1teTrXw.js.map +0 -1
  71. package/dist/project.js.map +0 -1
  72. package/dist/vite.js.map +0 -1
@@ -0,0 +1,131 @@
1
+ import { n as sourceFilename, t as TwillProject } from "./project-DYXf2Kgt.js";
2
+ import MagicString from "magic-string";
3
+ import { mkdirSync, renameSync, writeFileSync } from "node:fs";
4
+ import { basename, dirname, relative, resolve } from "node:path";
5
+ import ts from "typescript";
6
+ import remapping from "@ampproject/remapping";
7
+ // src/declarations.ts
8
+ var moduleName = (value) => value.replace(/\.twillx?(?:\.tsx?)?$/, ".js").replace(/\.(?:tsx?|jsx)$/, ".js").replace(/\.(m|c)ts$/, ".$1js");
9
+ var outputName = (filename) => filename.replace(/\.twillx?\.d\.ts(?=\.map$|$)/, ".d.ts");
10
+ function moduleEdits(text, filename, source, redirects) {
11
+ const file = ts.createSourceFile(filename, text, ts.ScriptTarget.Latest, true);
12
+ const edits = new MagicString(text);
13
+ const visit = (node) => {
14
+ if (ts.isStringLiteral(node)) {
15
+ const parent = node.parent;
16
+ if ((ts.isImportDeclaration(parent) || ts.isExportDeclaration(parent)) && parent.moduleSpecifier === node || ts.isExternalModuleReference(parent) || ts.isLiteralTypeNode(parent) && ts.isImportTypeNode(parent.parent)) {
17
+ let value = moduleName(node.text);
18
+ if (source && node.text.startsWith(".")) {
19
+ const base = sourceFilename(resolve(dirname(source), node.text));
20
+ const target = [base, ...[
21
+ ".twill",
22
+ ".twillx",
23
+ ".ts",
24
+ ".tsx",
25
+ ".mts",
26
+ ".cts",
27
+ ".js"
28
+ ].map((ext) => base + ext)].map((candidate) => redirects.get(candidate)).find(Boolean);
29
+ if (target) {
30
+ value = relative(dirname(filename), target).replaceAll("\\", "/").replace(/\.d\.(ts|mts|cts)$/, (_, extension) => extension === "ts" ? ".js" : extension === "mts" ? ".mjs" : ".cjs");
31
+ if (!value.startsWith(".")) value = "./" + value;
32
+ }
33
+ }
34
+ if (value !== node.text) edits.overwrite(node.getStart() + 1, node.end - 1, value);
35
+ }
36
+ }
37
+ ts.forEachChild(node, visit);
38
+ };
39
+ visit(file);
40
+ return edits;
41
+ }
42
+ /** Emits ordinary declaration files; a reference build visits dependencies first.
43
+ * No output is written for a project with syntax, type or emit errors. */
44
+ function emitDeclarations(tsconfig, options = {}) {
45
+ const result = {
46
+ projects: [],
47
+ files: [],
48
+ diagnostics: []
49
+ };
50
+ const visited = /* @__PURE__ */ new Set();
51
+ const active = /* @__PURE__ */ new Set();
52
+ const redirects = /* @__PURE__ */ new Map();
53
+ const build = (config, root) => {
54
+ config = sourceFilename(resolve(config));
55
+ if (active.has(config)) throw new Error(`Circular project reference: ${config}`);
56
+ if (visited.has(config)) return;
57
+ active.add(config);
58
+ const parsed = ts.getParsedCommandLineOfConfigFile(config, {}, {
59
+ ...ts.sys,
60
+ getCurrentDirectory: () => dirname(config),
61
+ onUnRecoverableConfigFileDiagnostic() {}
62
+ });
63
+ if (options.build) for (const reference of parsed?.projectReferences ?? []) build(ts.resolveProjectReferencePath(reference), false);
64
+ active.delete(config);
65
+ visited.add(config);
66
+ if (result.diagnostics.some((item) => item.category === "error")) return;
67
+ const project = new TwillProject(config, {}, { declarationRedirects: redirects });
68
+ try {
69
+ const outDir = resolve(root && options.outDir || parsed?.options.declarationDir || parsed?.options.outDir || resolve(project.root, "dist"));
70
+ const emitted = project.declarationOutput(outDir, options.declarationMap ?? true);
71
+ result.diagnostics.push(...emitted.diagnostics);
72
+ if (emitted.diagnostics.some((item) => item.category === "error")) return;
73
+ const inputs = new Set(project.sourceFiles().map((file) => ts.sys.useCaseSensitiveFileNames ? file : file.toLowerCase()));
74
+ const files = /* @__PURE__ */ new Map();
75
+ const edits = /* @__PURE__ */ new Map();
76
+ const projectRedirects = new Map(redirects);
77
+ const outputKeys = /* @__PURE__ */ new Set();
78
+ for (const file of emitted.files) if (!file.filename.endsWith(".map")) for (const source of file.sources) projectRedirects.set(source, outputName(file.filename));
79
+ for (const file of emitted.files) {
80
+ const filename = outputName(file.filename);
81
+ const key = ts.sys.useCaseSensitiveFileNames ? filename : filename.toLowerCase();
82
+ if (inputs.has(key)) throw new Error(`Declaration output would overwrite source: ${filename}`);
83
+ if (outputKeys.has(key)) throw new Error(`Declaration output collision: ${filename}`);
84
+ outputKeys.add(key);
85
+ if (!filename.endsWith(".map")) {
86
+ const changed = moduleEdits(file.text, filename, file.sources[0], projectRedirects);
87
+ edits.set(filename, changed);
88
+ files.set(filename, {
89
+ text: changed.toString().replace(/(sourceMappingURL=.*)\.twillx?\.d\.ts\.map/g, "$1.d.ts.map"),
90
+ sources: file.sources
91
+ });
92
+ } else files.set(filename, {
93
+ text: file.text,
94
+ sources: file.sources
95
+ });
96
+ }
97
+ for (const [filename, file] of files) if (filename.endsWith(".map")) {
98
+ const declaration = filename.slice(0, -4);
99
+ const originalMap = JSON.parse(file.text);
100
+ const source = sourceFilename(resolve(dirname(filename), originalMap.sourceRoot ?? "", decodeURIComponent(originalMap.sources[0] ?? "")));
101
+ const transformed = project.transformed(source);
102
+ const maps = [edits.get(declaration).generateMap({
103
+ source: declaration,
104
+ hires: true,
105
+ includeContent: true
106
+ }), originalMap];
107
+ if (transformed) maps.push(transformed.map);
108
+ const combined = remapping(maps, () => null);
109
+ combined.file = basename(declaration);
110
+ combined.sources = combined.sources.map(() => relative(dirname(filename), source).replaceAll("\\", "/"));
111
+ file.text = JSON.stringify(combined);
112
+ }
113
+ for (const [filename, file] of files) {
114
+ mkdirSync(dirname(filename), { recursive: true });
115
+ const staging = filename + ".twill-tmp";
116
+ writeFileSync(staging, file.text);
117
+ renameSync(staging, filename);
118
+ result.files.push(filename);
119
+ if (!filename.endsWith(".map")) for (const source of file.sources) redirects.set(source, filename);
120
+ }
121
+ result.projects.push(config);
122
+ } finally {
123
+ project.dispose();
124
+ }
125
+ };
126
+ build(tsconfig, true);
127
+ return result;
128
+ }
129
+ export { emitDeclarations as t };
130
+
131
+ //# sourceMappingURL=declarations-DXtb1AHP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declarations-DXtb1AHP.js","names":[],"sources":["../src/declarations.ts"],"sourcesContent":["import ts from 'typescript';\nimport MagicString from 'magic-string';\nimport remapping from '@ampproject/remapping';\nimport { resolve, dirname, basename, relative } from 'node:path';\nimport { mkdirSync, writeFileSync, renameSync } from 'node:fs';\nimport { TwillProject, type ProjectDiagnostic, sourceFilename } from './project.js';\n\nexport interface DeclarationOptions {\n outDir?: string;\n build?: boolean;\n declarationMap?: boolean;\n}\nexport interface DeclarationBuild {\n projects: string[];\n files: string[];\n diagnostics: ProjectDiagnostic[];\n}\n\nconst moduleName = (value: string) =>\n value\n .replace(/\\.twillx?(?:\\.tsx?)?$/, '.js')\n .replace(/\\.(?:tsx?|jsx)$/, '.js')\n .replace(/\\.(m|c)ts$/, '.$1js');\nconst outputName = (filename: string) => filename.replace(/\\.twillx?\\.d\\.ts(?=\\.map$|$)/, '.d.ts');\nfunction moduleEdits(\n text: string,\n filename: string,\n source: string | undefined,\n redirects: ReadonlyMap<string, string>,\n) {\n const file = ts.createSourceFile(filename, text, ts.ScriptTarget.Latest, true);\n const edits = new MagicString(text);\n const visit = (node: ts.Node) => {\n if (ts.isStringLiteral(node)) {\n const parent = node.parent;\n if (\n ((ts.isImportDeclaration(parent) || ts.isExportDeclaration(parent)) &&\n parent.moduleSpecifier === node) ||\n ts.isExternalModuleReference(parent) ||\n (ts.isLiteralTypeNode(parent) && ts.isImportTypeNode(parent.parent))\n ) {\n let value = moduleName(node.text);\n if (source && node.text.startsWith('.')) {\n const base = sourceFilename(resolve(dirname(source), node.text));\n const target = [\n base,\n ...['.twill', '.twillx', '.ts', '.tsx', '.mts', '.cts', '.js'].map((ext) => base + ext),\n ]\n .map((candidate) => redirects.get(candidate))\n .find(Boolean);\n if (target) {\n value = relative(dirname(filename), target)\n .replaceAll('\\\\', '/')\n .replace(/\\.d\\.(ts|mts|cts)$/, (_, extension: string) =>\n extension === 'ts' ? '.js' : extension === 'mts' ? '.mjs' : '.cjs',\n );\n if (!value.startsWith('.')) value = './' + value;\n }\n }\n if (value !== node.text) edits.overwrite(node.getStart() + 1, node.end - 1, value);\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(file);\n return edits;\n}\n\n/** Emits ordinary declaration files; a reference build visits dependencies first.\n * No output is written for a project with syntax, type or emit errors. */\nexport function emitDeclarations(\n tsconfig: string,\n options: DeclarationOptions = {},\n): DeclarationBuild {\n const result: DeclarationBuild = { projects: [], files: [], diagnostics: [] };\n const visited = new Set<string>();\n const active = new Set<string>();\n const redirects = new Map<string, string>();\n const build = (config: string, root: boolean) => {\n config = sourceFilename(resolve(config));\n if (active.has(config)) throw new Error(`Circular project reference: ${config}`);\n if (visited.has(config)) return;\n active.add(config);\n const parsed = ts.getParsedCommandLineOfConfigFile(\n config,\n {},\n {\n ...ts.sys,\n getCurrentDirectory: () => dirname(config),\n onUnRecoverableConfigFileDiagnostic() {},\n },\n );\n if (options.build)\n for (const reference of parsed?.projectReferences ?? [])\n build(ts.resolveProjectReferencePath(reference), false);\n active.delete(config);\n visited.add(config);\n if (result.diagnostics.some((item) => item.category === 'error')) return;\n const project = new TwillProject(config, {}, { declarationRedirects: redirects });\n try {\n const outDir = resolve(\n (root && options.outDir) ||\n parsed?.options.declarationDir ||\n parsed?.options.outDir ||\n resolve(project.root, 'dist'),\n );\n const emitted = project.declarationOutput(outDir, options.declarationMap ?? true);\n result.diagnostics.push(...emitted.diagnostics);\n if (emitted.diagnostics.some((item) => item.category === 'error')) return;\n const inputs = new Set(\n project\n .sourceFiles()\n .map((file) => (ts.sys.useCaseSensitiveFileNames ? file : file.toLowerCase())),\n );\n const files = new Map<string, { text: string; sources: string[] }>();\n const edits = new Map<string, MagicString>();\n const projectRedirects = new Map(redirects);\n const outputKeys = new Set<string>();\n for (const file of emitted.files)\n if (!file.filename.endsWith('.map'))\n for (const source of file.sources)\n projectRedirects.set(source, outputName(file.filename));\n for (const file of emitted.files) {\n const filename = outputName(file.filename);\n const key = ts.sys.useCaseSensitiveFileNames ? filename : filename.toLowerCase();\n if (inputs.has(key))\n throw new Error(`Declaration output would overwrite source: ${filename}`);\n if (outputKeys.has(key)) throw new Error(`Declaration output collision: ${filename}`);\n outputKeys.add(key);\n if (!filename.endsWith('.map')) {\n const changed = moduleEdits(file.text, filename, file.sources[0], projectRedirects);\n edits.set(filename, changed);\n files.set(filename, {\n text: changed\n .toString()\n .replace(/(sourceMappingURL=.*)\\.twillx?\\.d\\.ts\\.map/g, '$1.d.ts.map'),\n sources: file.sources,\n });\n } else files.set(filename, { text: file.text, sources: file.sources });\n }\n for (const [filename, file] of files)\n if (filename.endsWith('.map')) {\n const declaration = filename.slice(0, -4);\n const originalMap = JSON.parse(file.text);\n const source = sourceFilename(\n resolve(\n dirname(filename),\n originalMap.sourceRoot ?? '',\n decodeURIComponent(originalMap.sources[0] ?? ''),\n ),\n );\n const transformed = project.transformed(source);\n const changed = edits.get(declaration)!;\n const maps: any[] = [\n changed.generateMap({ source: declaration, hires: true, includeContent: true }),\n originalMap,\n ];\n if (transformed) maps.push(transformed.map);\n const combined = remapping(maps as any, () => null);\n combined.file = basename(declaration);\n combined.sources = combined.sources.map(() =>\n relative(dirname(filename), source).replaceAll('\\\\', '/'),\n );\n file.text = JSON.stringify(combined);\n }\n for (const [filename, file] of files) {\n mkdirSync(dirname(filename), { recursive: true });\n const staging = filename + '.twill-tmp';\n writeFileSync(staging, file.text);\n renameSync(staging, filename);\n result.files.push(filename);\n if (!filename.endsWith('.map'))\n for (const source of file.sources) redirects.set(source, filename);\n }\n result.projects.push(config);\n } finally {\n project.dispose();\n }\n };\n build(tsconfig, true);\n return result;\n}\n"],"mappings":"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"}
@@ -1,132 +1 @@
1
- import { TwillProject, sourceFilename } from "./project.js";
2
- import MagicString from "magic-string";
3
- import { mkdirSync, renameSync, writeFileSync } from "node:fs";
4
- import { basename, dirname, relative, resolve } from "node:path";
5
- import ts from "typescript";
6
- import remapping from "@ampproject/remapping";
7
- //#region src/declarations.ts
8
- var moduleName = (value) => value.replace(/\.twillx?(?:\.tsx?)?$/, ".js").replace(/\.(?:tsx?|jsx)$/, ".js").replace(/\.(m|c)ts$/, ".$1js");
9
- var outputName = (filename) => filename.replace(/\.twillx?\.d\.ts(?=\.map$|$)/, ".d.ts");
10
- function moduleEdits(text, filename, source, redirects) {
11
- const file = ts.createSourceFile(filename, text, ts.ScriptTarget.Latest, true);
12
- const edits = new MagicString(text);
13
- const visit = (node) => {
14
- if (ts.isStringLiteral(node)) {
15
- const parent = node.parent;
16
- if ((ts.isImportDeclaration(parent) || ts.isExportDeclaration(parent)) && parent.moduleSpecifier === node || ts.isExternalModuleReference(parent) || ts.isLiteralTypeNode(parent) && ts.isImportTypeNode(parent.parent)) {
17
- let value = moduleName(node.text);
18
- if (source && node.text.startsWith(".")) {
19
- const base = sourceFilename(resolve(dirname(source), node.text));
20
- const target = [base, ...[
21
- ".twill",
22
- ".twillx",
23
- ".ts",
24
- ".tsx",
25
- ".mts",
26
- ".cts",
27
- ".js"
28
- ].map((ext) => base + ext)].map((candidate) => redirects.get(candidate)).find(Boolean);
29
- if (target) {
30
- value = relative(dirname(filename), target).replaceAll("\\", "/").replace(/\.d\.(ts|mts|cts)$/, (_, extension) => extension === "ts" ? ".js" : extension === "mts" ? ".mjs" : ".cjs");
31
- if (!value.startsWith(".")) value = "./" + value;
32
- }
33
- }
34
- if (value !== node.text) edits.overwrite(node.getStart() + 1, node.end - 1, value);
35
- }
36
- }
37
- ts.forEachChild(node, visit);
38
- };
39
- visit(file);
40
- return edits;
41
- }
42
- /** Emits ordinary declaration files; a reference build visits dependencies first.
43
- * No output is written for a project with syntax, type or emit errors. */
44
- function emitDeclarations(tsconfig, options = {}) {
45
- const result = {
46
- projects: [],
47
- files: [],
48
- diagnostics: []
49
- };
50
- const visited = /* @__PURE__ */ new Set();
51
- const active = /* @__PURE__ */ new Set();
52
- const redirects = /* @__PURE__ */ new Map();
53
- const build = (config, root) => {
54
- config = sourceFilename(resolve(config));
55
- if (active.has(config)) throw new Error(`Circular project reference: ${config}`);
56
- if (visited.has(config)) return;
57
- active.add(config);
58
- const parsed = ts.getParsedCommandLineOfConfigFile(config, {}, {
59
- ...ts.sys,
60
- getCurrentDirectory: () => dirname(config),
61
- onUnRecoverableConfigFileDiagnostic() {}
62
- });
63
- if (options.build) for (const reference of parsed?.projectReferences ?? []) build(ts.resolveProjectReferencePath(reference), false);
64
- active.delete(config);
65
- visited.add(config);
66
- if (result.diagnostics.some((item) => item.category === "error")) return;
67
- const project = new TwillProject(config, {}, { declarationRedirects: redirects });
68
- try {
69
- const outDir = resolve(root && options.outDir || parsed?.options.declarationDir || parsed?.options.outDir || resolve(project.root, "dist"));
70
- const emitted = project.declarationOutput(outDir, options.declarationMap ?? true);
71
- result.diagnostics.push(...emitted.diagnostics);
72
- if (emitted.diagnostics.some((item) => item.category === "error")) return;
73
- const inputs = new Set(project.sourceFiles().map((file) => ts.sys.useCaseSensitiveFileNames ? file : file.toLowerCase()));
74
- const files = /* @__PURE__ */ new Map();
75
- const edits = /* @__PURE__ */ new Map();
76
- const projectRedirects = new Map(redirects);
77
- const outputKeys = /* @__PURE__ */ new Set();
78
- for (const file of emitted.files) if (!file.filename.endsWith(".map")) for (const source of file.sources) projectRedirects.set(source, outputName(file.filename));
79
- for (const file of emitted.files) {
80
- const filename = outputName(file.filename);
81
- const key = ts.sys.useCaseSensitiveFileNames ? filename : filename.toLowerCase();
82
- if (inputs.has(key)) throw new Error(`Declaration output would overwrite source: ${filename}`);
83
- if (outputKeys.has(key)) throw new Error(`Declaration output collision: ${filename}`);
84
- outputKeys.add(key);
85
- if (!filename.endsWith(".map")) {
86
- const changed = moduleEdits(file.text, filename, file.sources[0], projectRedirects);
87
- edits.set(filename, changed);
88
- files.set(filename, {
89
- text: changed.toString().replace(/(sourceMappingURL=.*)\.twillx?\.d\.ts\.map/g, "$1.d.ts.map"),
90
- sources: file.sources
91
- });
92
- } else files.set(filename, {
93
- text: file.text,
94
- sources: file.sources
95
- });
96
- }
97
- for (const [filename, file] of files) if (filename.endsWith(".map")) {
98
- const declaration = filename.slice(0, -4);
99
- const originalMap = JSON.parse(file.text);
100
- const source = sourceFilename(resolve(dirname(filename), originalMap.sourceRoot ?? "", decodeURIComponent(originalMap.sources[0] ?? "")));
101
- const transformed = project.transformed(source);
102
- const maps = [edits.get(declaration).generateMap({
103
- source: declaration,
104
- hires: true,
105
- includeContent: true
106
- }), originalMap];
107
- if (transformed) maps.push(transformed.map);
108
- const combined = remapping(maps, () => null);
109
- combined.file = basename(declaration);
110
- combined.sources = combined.sources.map(() => relative(dirname(filename), source).replaceAll("\\", "/"));
111
- file.text = JSON.stringify(combined);
112
- }
113
- for (const [filename, file] of files) {
114
- mkdirSync(dirname(filename), { recursive: true });
115
- const staging = filename + ".twill-tmp";
116
- writeFileSync(staging, file.text);
117
- renameSync(staging, filename);
118
- result.files.push(filename);
119
- if (!filename.endsWith(".map")) for (const source of file.sources) redirects.set(source, filename);
120
- }
121
- result.projects.push(config);
122
- } finally {
123
- project.dispose();
124
- }
125
- };
126
- build(tsconfig, true);
127
- return result;
128
- }
129
- //#endregion
130
- export { emitDeclarations };
131
-
132
- //# sourceMappingURL=declarations.js.map
1
+ export { t as emitDeclarations } from "./declarations-DXtb1AHP.js";
@@ -0,0 +1,200 @@
1
+ import { n as isTwillFile } from "./extensions-7ixttcoK.js";
2
+ import ts from "typescript";
3
+ var package_default = {
4
+ name: "@swiftuijs/twill",
5
+ version: "0.4.0",
6
+ description: "Twill extends TypeScript with Swift-inspired syntax: trailing closures, guards, defer and checked switch expressions. Compiles to ordinary JavaScript.",
7
+ main: "./dist/typescript-plugin.cjs",
8
+ repository: {
9
+ "type": "git",
10
+ "url": "git+https://github.com/swiftuijs/twill.git",
11
+ "directory": "packages/twill"
12
+ },
13
+ keywords: [
14
+ "javascript",
15
+ "typescript",
16
+ "trailing-closures",
17
+ "swift",
18
+ "vite",
19
+ "unplugin",
20
+ "react",
21
+ "vue",
22
+ "twill",
23
+ "guard",
24
+ "defer"
25
+ ],
26
+ author: {
27
+ "name": "forth.ink",
28
+ "url": "https://forth.ink"
29
+ },
30
+ license: "MIT",
31
+ type: "module",
32
+ bugs: { "url": "https://github.com/swiftuijs/twill/issues" },
33
+ homepage: "https://twill.evecalm.com/",
34
+ dependencies: {
35
+ "@ampproject/remapping": "^2.3.0",
36
+ "@jridgewell/trace-mapping": "^0.3.31",
37
+ "acorn": "8.18.0",
38
+ "acorn-jsx": "^5.3.2",
39
+ "acorn-typescript": "1.4.13",
40
+ "magic-string": "^1.4.2",
41
+ "typescript": "catalog:",
42
+ "unplugin": "^3.4.0"
43
+ },
44
+ sideEffects: false,
45
+ engines: { "node": "^20.19.0 || >=22.12.0" },
46
+ files: [
47
+ "bin",
48
+ "dist/**/*.js",
49
+ "dist/**/*.js.map",
50
+ "dist/**/*.d.ts",
51
+ "schemas",
52
+ "README.md",
53
+ "LICENSE",
54
+ "dist/**/*.cjs",
55
+ "dist/**/*.cjs.map",
56
+ "dist/*.LICENSE.txt"
57
+ ],
58
+ bin: { "twill": "./bin/twill.mjs" },
59
+ exports: {
60
+ ".": {
61
+ "types": "./dist/index.d.ts",
62
+ "import": "./dist/index.js"
63
+ },
64
+ "./vite": {
65
+ "types": "./dist/vite.d.ts",
66
+ "import": "./dist/vite.js"
67
+ },
68
+ "./rollup": {
69
+ "types": "./dist/rollup.d.ts",
70
+ "import": "./dist/rollup.js"
71
+ },
72
+ "./esbuild": {
73
+ "types": "./dist/esbuild.d.ts",
74
+ "import": "./dist/esbuild.js"
75
+ },
76
+ "./webpack": {
77
+ "types": "./dist/webpack.d.ts",
78
+ "import": "./dist/webpack.js"
79
+ },
80
+ "./rspack": {
81
+ "types": "./dist/rspack.d.ts",
82
+ "import": "./dist/rspack.js"
83
+ },
84
+ "./project": {
85
+ "types": "./dist/project.d.ts",
86
+ "import": "./dist/project.js"
87
+ },
88
+ "./editor": {
89
+ "types": "./dist/editor.d.ts",
90
+ "import": "./dist/editor.js"
91
+ },
92
+ "./register": {
93
+ "types": "./dist/register.d.ts",
94
+ "import": "./dist/register.js"
95
+ },
96
+ "./schema": "./schemas/twill.schema.json",
97
+ "./typescript-plugin": {
98
+ "types": "./dist/typescript-plugin.d.ts",
99
+ "require": "./dist/typescript-plugin.cjs",
100
+ "default": "./dist/typescript-plugin.cjs"
101
+ },
102
+ "./doctor": {
103
+ "types": "./dist/doctor.d.ts",
104
+ "import": "./dist/doctor.js"
105
+ },
106
+ "./syntax": {
107
+ "types": "./dist/syntax.d.ts",
108
+ "import": "./dist/syntax.js"
109
+ },
110
+ "./config": {
111
+ "types": "./dist/config.d.ts",
112
+ "import": "./dist/config.js"
113
+ },
114
+ "./declarations": {
115
+ "types": "./dist/declarations.d.ts",
116
+ "import": "./dist/declarations.js"
117
+ },
118
+ "./vite-react": {
119
+ "types": "./dist/vite-react.d.ts",
120
+ "import": "./dist/vite-react.js"
121
+ }
122
+ },
123
+ peerDependencies: {
124
+ "react": "^18.2.0 || ^19.0.0",
125
+ "vue": "^3.3.0",
126
+ "@vitejs/plugin-react": "^6.1.1"
127
+ },
128
+ peerDependenciesMeta: {
129
+ "react": { "optional": true },
130
+ "vue": { "optional": true },
131
+ "@vitejs/plugin-react": { "optional": true }
132
+ },
133
+ types: "./dist/index.d.ts",
134
+ publishConfig: { "access": "public" },
135
+ module: "./dist/index.js",
136
+ scripts: {
137
+ "build": "node ../../scripts/generate-runtime-helper.mjs && vite build && vite build --config vite.plugin.config.ts && node scripts/prepare-core.mjs",
138
+ "typecheck": "tsc --noEmit -p tsconfig.json",
139
+ "prepack": "pnpm run build",
140
+ "test:unit": "vitest run",
141
+ "test:watch": "vitest",
142
+ "test:coverage": "vitest run --coverage",
143
+ "test:package": "node tests/consumer.mjs",
144
+ "test:size": "node tests/bundle-size.mjs",
145
+ "test:browser": "playwright test",
146
+ "benchmark": "node benchmarks/compiler.mjs",
147
+ "test": "pnpm run test:unit",
148
+ "benchmark:branching": "node benchmarks/branching.mjs",
149
+ "benchmark:enum-patterns": "node benchmarks/enum-patterns.mjs",
150
+ "benchmark:runtime": "node benchmarks/runtime-helpers.mjs",
151
+ "benchmark:if-bindings": "node benchmarks/if-bindings.mjs"
152
+ },
153
+ devDependencies: {
154
+ "vite": "catalog:",
155
+ "vite-plugin-dts": "^5.1.2",
156
+ "@types/node": "catalog:",
157
+ "@vitejs/plugin-react": "catalog:",
158
+ "vitest": "catalog:",
159
+ "@vitest/coverage-v8": "catalog:",
160
+ "@rspack/core": "catalog:",
161
+ "@types/react": "catalog:",
162
+ "@types/react-dom": "catalog:",
163
+ "@vue/server-renderer": "catalog:",
164
+ "esbuild": "catalog:",
165
+ "react": "catalog:",
166
+ "react-dom": "catalog:",
167
+ "rollup": "catalog:",
168
+ "vue": "catalog:",
169
+ "webpack": "catalog:",
170
+ "@playwright/test": "catalog:",
171
+ "@swiftuijs/twill-runtime": "workspace:*"
172
+ }
173
+ };
174
+ // src/doctor.ts
175
+ /** Shareable diagnostics without source contents or environment-variable values. */
176
+ function inspectProject(project, filename) {
177
+ const started = performance.now();
178
+ const diagnostics = project.diagnostics(filename);
179
+ const files = project.sourceFiles();
180
+ return {
181
+ twillVersion: package_default.version,
182
+ typescriptVersion: ts.version,
183
+ nodeVersion: process.version,
184
+ root: project.root,
185
+ configFiles: project.configFiles,
186
+ compilerOptions: project.compilerOptions,
187
+ files: {
188
+ total: files.length,
189
+ twill: files.filter(isTwillFile).length,
190
+ native: files.filter((file) => !isTwillFile(file)).length
191
+ },
192
+ sourceFiles: files,
193
+ diagnostics,
194
+ diagnosticTimeMs: performance.now() - started,
195
+ ok: !diagnostics.some((diagnostic) => diagnostic.category === "error")
196
+ };
197
+ }
198
+ export { inspectProject as t };
199
+
200
+ //# sourceMappingURL=doctor-BHwU_YBw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-BHwU_YBw.js","names":["metadata"],"sources":["../package.json","../src/doctor.ts"],"sourcesContent":["{\n \"name\": \"@swiftuijs/twill\",\n \"version\": \"0.4.0\",\n \"description\": \"Twill extends TypeScript with Swift-inspired syntax: trailing closures, guards, defer and checked switch expressions. Compiles to ordinary JavaScript.\",\n \"main\": \"./dist/typescript-plugin.cjs\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/swiftuijs/twill.git\",\n \"directory\": \"packages/twill\"\n },\n \"keywords\": [\n \"javascript\",\n \"typescript\",\n \"trailing-closures\",\n \"swift\",\n \"vite\",\n \"unplugin\",\n \"react\",\n \"vue\",\n \"twill\",\n \"guard\",\n \"defer\"\n ],\n \"author\": {\n \"name\": \"forth.ink\",\n \"url\": \"https://forth.ink\"\n },\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"bugs\": {\n \"url\": \"https://github.com/swiftuijs/twill/issues\"\n },\n \"homepage\": \"https://twill.evecalm.com/\",\n \"dependencies\": {\n \"@ampproject/remapping\": \"^2.3.0\",\n \"@jridgewell/trace-mapping\": \"^0.3.31\",\n \"acorn\": \"8.18.0\",\n \"acorn-jsx\": \"^5.3.2\",\n \"acorn-typescript\": \"1.4.13\",\n \"magic-string\": \"^1.4.2\",\n \"typescript\": \"catalog:\",\n \"unplugin\": \"^3.4.0\"\n },\n \"sideEffects\": false,\n \"engines\": {\n \"node\": \"^20.19.0 || >=22.12.0\"\n },\n \"files\": [\n \"bin\",\n \"dist/**/*.js\",\n \"dist/**/*.js.map\",\n \"dist/**/*.d.ts\",\n \"schemas\",\n \"README.md\",\n \"LICENSE\",\n \"dist/**/*.cjs\",\n \"dist/**/*.cjs.map\",\n \"dist/*.LICENSE.txt\"\n ],\n \"bin\": {\n \"twill\": \"./bin/twill.mjs\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n },\n \"./vite\": {\n \"types\": \"./dist/vite.d.ts\",\n \"import\": \"./dist/vite.js\"\n },\n \"./rollup\": {\n \"types\": \"./dist/rollup.d.ts\",\n \"import\": \"./dist/rollup.js\"\n },\n \"./esbuild\": {\n \"types\": \"./dist/esbuild.d.ts\",\n \"import\": \"./dist/esbuild.js\"\n },\n \"./webpack\": {\n \"types\": \"./dist/webpack.d.ts\",\n \"import\": \"./dist/webpack.js\"\n },\n \"./rspack\": {\n \"types\": \"./dist/rspack.d.ts\",\n \"import\": \"./dist/rspack.js\"\n },\n \"./project\": {\n \"types\": \"./dist/project.d.ts\",\n \"import\": \"./dist/project.js\"\n },\n \"./editor\": {\n \"types\": \"./dist/editor.d.ts\",\n \"import\": \"./dist/editor.js\"\n },\n \"./register\": {\n \"types\": \"./dist/register.d.ts\",\n \"import\": \"./dist/register.js\"\n },\n \"./schema\": \"./schemas/twill.schema.json\",\n \"./typescript-plugin\": {\n \"types\": \"./dist/typescript-plugin.d.ts\",\n \"require\": \"./dist/typescript-plugin.cjs\",\n \"default\": \"./dist/typescript-plugin.cjs\"\n },\n \"./doctor\": {\n \"types\": \"./dist/doctor.d.ts\",\n \"import\": \"./dist/doctor.js\"\n },\n \"./syntax\": {\n \"types\": \"./dist/syntax.d.ts\",\n \"import\": \"./dist/syntax.js\"\n },\n \"./config\": {\n \"types\": \"./dist/config.d.ts\",\n \"import\": \"./dist/config.js\"\n },\n \"./declarations\": {\n \"types\": \"./dist/declarations.d.ts\",\n \"import\": \"./dist/declarations.js\"\n },\n \"./vite-react\": {\n \"types\": \"./dist/vite-react.d.ts\",\n \"import\": \"./dist/vite-react.js\"\n }\n },\n \"peerDependencies\": {\n \"react\": \"^18.2.0 || ^19.0.0\",\n \"vue\": \"^3.3.0\",\n \"@vitejs/plugin-react\": \"^6.1.1\"\n },\n \"peerDependenciesMeta\": {\n \"react\": {\n \"optional\": true\n },\n \"vue\": {\n \"optional\": true\n },\n \"@vitejs/plugin-react\": {\n \"optional\": true\n }\n },\n \"types\": \"./dist/index.d.ts\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"module\": \"./dist/index.js\",\n \"scripts\": {\n \"build\": \"node ../../scripts/generate-runtime-helper.mjs && vite build && vite build --config vite.plugin.config.ts && node scripts/prepare-core.mjs\",\n \"typecheck\": \"tsc --noEmit -p tsconfig.json\",\n \"prepack\": \"pnpm run build\",\n \"test:unit\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"test:package\": \"node tests/consumer.mjs\",\n \"test:size\": \"node tests/bundle-size.mjs\",\n \"test:browser\": \"playwright test\",\n \"benchmark\": \"node benchmarks/compiler.mjs\",\n \"test\": \"pnpm run test:unit\",\n \"benchmark:branching\": \"node benchmarks/branching.mjs\",\n \"benchmark:enum-patterns\": \"node benchmarks/enum-patterns.mjs\",\n \"benchmark:runtime\": \"node benchmarks/runtime-helpers.mjs\",\n \"benchmark:if-bindings\": \"node benchmarks/if-bindings.mjs\"\n },\n \"devDependencies\": {\n \"vite\": \"catalog:\",\n \"vite-plugin-dts\": \"^5.1.2\",\n \"@types/node\": \"catalog:\",\n \"@vitejs/plugin-react\": \"catalog:\",\n \"vitest\": \"catalog:\",\n \"@vitest/coverage-v8\": \"catalog:\",\n \"@rspack/core\": \"catalog:\",\n \"@types/react\": \"catalog:\",\n \"@types/react-dom\": \"catalog:\",\n \"@vue/server-renderer\": \"catalog:\",\n \"esbuild\": \"catalog:\",\n \"react\": \"catalog:\",\n \"react-dom\": \"catalog:\",\n \"rollup\": \"catalog:\",\n \"vue\": \"catalog:\",\n \"webpack\": \"catalog:\",\n \"@playwright/test\": \"catalog:\",\n \"@swiftuijs/twill-runtime\": \"workspace:*\"\n }\n}\n","import ts from 'typescript';\nimport metadata from '../package.json';\nimport { TwillProject } from './project.js';\nimport { isTwillFile } from './compiler.js';\n\n/** Shareable diagnostics without source contents or environment-variable values. */\nexport function inspectProject(project: TwillProject, filename?: string) {\n const started = performance.now();\n const diagnostics = project.diagnostics(filename);\n const files = project.sourceFiles();\n return {\n twillVersion: metadata.version,\n typescriptVersion: ts.version,\n nodeVersion: process.version,\n root: project.root,\n configFiles: project.configFiles,\n compilerOptions: project.compilerOptions,\n files: {\n total: files.length,\n twill: files.filter(isTwillFile).length,\n native: files.filter((file) => !isTwillFile(file)).length,\n },\n sourceFiles: files,\n diagnostics,\n diagnosticTimeMs: performance.now() - started,\n ok: !diagnostics.some((diagnostic) => diagnostic.category === 'error'),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACMA,SAAgB,eAAe,SAAuB,UAAmB;CACvE,MAAM,UAAU,YAAY,IAAI;CAChC,MAAM,cAAc,QAAQ,YAAY,QAAQ;CAChD,MAAM,QAAQ,QAAQ,YAAY;CAClC,OAAO;EACL,cAAcA,gBAAS;EACvB,mBAAmB,GAAG;EACtB,aAAa,QAAQ;EACrB,MAAM,QAAQ;EACd,aAAa,QAAQ;EACrB,iBAAiB,QAAQ;EACzB,OAAO;GACL,OAAO,MAAM;GACb,OAAO,MAAM,OAAO,WAAW,CAAC,CAAC;GACjC,QAAQ,MAAM,QAAQ,SAAS,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;EACrD;EACA,aAAa;EACb;EACA,kBAAkB,YAAY,IAAI,IAAI;EACtC,IAAI,CAAC,YAAY,MAAM,eAAe,WAAW,aAAa,OAAO;CACvE;AACF"}