attio 0.0.1-experimental.20240522

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 (94) hide show
  1. package/README.md +9 -0
  2. package/lib/build.d.ts +160 -0
  3. package/lib/build.d.ts.map +1 -0
  4. package/lib/build.js +81 -0
  5. package/lib/build.js.map +1 -0
  6. package/lib/cli.d.ts +3 -0
  7. package/lib/cli.d.ts.map +1 -0
  8. package/lib/cli.js +5 -0
  9. package/lib/cli.js.map +1 -0
  10. package/lib/commands/build.d.ts +4 -0
  11. package/lib/commands/build.d.ts.map +1 -0
  12. package/lib/commands/build.js +28 -0
  13. package/lib/commands/build.js.map +1 -0
  14. package/lib/commands/scaffold.d.ts +10 -0
  15. package/lib/commands/scaffold.d.ts.map +1 -0
  16. package/lib/commands/scaffold.js +95 -0
  17. package/lib/commands/scaffold.js.map +1 -0
  18. package/lib/commands/watch.d.ts +3 -0
  19. package/lib/commands/watch.d.ts.map +1 -0
  20. package/lib/commands/watch.js +56 -0
  21. package/lib/commands/watch.js.map +1 -0
  22. package/lib/components/BuildError.d.ts +12 -0
  23. package/lib/components/BuildError.d.ts.map +1 -0
  24. package/lib/components/BuildError.js +56 -0
  25. package/lib/components/BuildError.js.map +1 -0
  26. package/lib/components/BuildLog.d.ts +7 -0
  27. package/lib/components/BuildLog.d.ts.map +1 -0
  28. package/lib/components/BuildLog.js +7 -0
  29. package/lib/components/BuildLog.js.map +1 -0
  30. package/lib/components/MultiSelect.d.ts +13 -0
  31. package/lib/components/MultiSelect.d.ts.map +1 -0
  32. package/lib/components/MultiSelect.js +66 -0
  33. package/lib/components/MultiSelect.js.map +1 -0
  34. package/lib/components/Select.d.ts +12 -0
  35. package/lib/components/Select.d.ts.map +1 -0
  36. package/lib/components/Select.js +8 -0
  37. package/lib/components/Select.js.map +1 -0
  38. package/lib/components/TypeScriptError.d.ts +11 -0
  39. package/lib/components/TypeScriptError.d.ts.map +1 -0
  40. package/lib/components/TypeScriptError.js +47 -0
  41. package/lib/components/TypeScriptError.js.map +1 -0
  42. package/lib/hooks/useFullScreen.d.ts +3 -0
  43. package/lib/hooks/useFullScreen.d.ts.map +1 -0
  44. package/lib/hooks/useFullScreen.js +17 -0
  45. package/lib/hooks/useFullScreen.js.map +1 -0
  46. package/lib/machines/build-machine.d.ts +60 -0
  47. package/lib/machines/build-machine.d.ts.map +1 -0
  48. package/lib/machines/build-machine.js +64 -0
  49. package/lib/machines/build-machine.js.map +1 -0
  50. package/lib/machines/scaffold-machine.d.ts +311 -0
  51. package/lib/machines/scaffold-machine.d.ts.map +1 -0
  52. package/lib/machines/scaffold-machine.js +260 -0
  53. package/lib/machines/scaffold-machine.js.map +1 -0
  54. package/lib/machines/watch-machine.d.ts +199 -0
  55. package/lib/machines/watch-machine.d.ts.map +1 -0
  56. package/lib/machines/watch-machine.js +218 -0
  57. package/lib/machines/watch-machine.js.map +1 -0
  58. package/lib/templates/common/README.md +19 -0
  59. package/lib/templates/javascript/.eslintignore +4 -0
  60. package/lib/templates/javascript/actions.jsx +12 -0
  61. package/lib/templates/javascript/counter-action.jsx +18 -0
  62. package/lib/templates/javascript/eslint.cjs +1 -0
  63. package/lib/templates/javascript/package.json +24 -0
  64. package/lib/templates/typescript/.eslintignore +4 -0
  65. package/lib/templates/typescript/actions.tsx +12 -0
  66. package/lib/templates/typescript/counter-action.tsx +18 -0
  67. package/lib/templates/typescript/eslint.cjs +6 -0
  68. package/lib/templates/typescript/package.json +25 -0
  69. package/lib/templates/typescript/tsconfig.json +50 -0
  70. package/lib/util/copy-with-replace.d.ts +2 -0
  71. package/lib/util/copy-with-replace.d.ts.map +1 -0
  72. package/lib/util/copy-with-replace.js +29 -0
  73. package/lib/util/copy-with-replace.js.map +1 -0
  74. package/lib/util/create-directory.d.ts +2 -0
  75. package/lib/util/create-directory.d.ts.map +1 -0
  76. package/lib/util/create-directory.js +20 -0
  77. package/lib/util/create-directory.js.map +1 -0
  78. package/lib/util/is-command-available.d.ts +2 -0
  79. package/lib/util/is-command-available.d.ts.map +1 -0
  80. package/lib/util/is-command-available.js +13 -0
  81. package/lib/util/is-command-available.js.map +1 -0
  82. package/lib/util/make-extension-name.d.ts +2 -0
  83. package/lib/util/make-extension-name.d.ts.map +1 -0
  84. package/lib/util/make-extension-name.js +11 -0
  85. package/lib/util/make-extension-name.js.map +1 -0
  86. package/lib/util/typescript.d.ts +41 -0
  87. package/lib/util/typescript.d.ts.map +1 -0
  88. package/lib/util/typescript.js +74 -0
  89. package/lib/util/typescript.js.map +1 -0
  90. package/lib/util/validate-project-name.d.ts +2 -0
  91. package/lib/util/validate-project-name.d.ts.map +1 -0
  92. package/lib/util/validate-project-name.js +27 -0
  93. package/lib/util/validate-project-name.js.map +1 -0
  94. package/package.json +50 -0
@@ -0,0 +1,218 @@
1
+ import chokidar from "chokidar";
2
+ import * as esbuild from "esbuild";
3
+ import path from "path";
4
+ import { assign, setup, fromCallback } from "xstate";
5
+ import { HARDCODED_OUTPUT_FILES, createBuildConfig, errorSchema, generateEntry, getAppDir, } from "../build.js";
6
+ import { getDiagnostics, readConfig, typeScriptErrorSchema, } from "../util/typescript.js";
7
+ export const watchMachine = setup({
8
+ types: {
9
+ context: {},
10
+ events: {},
11
+ },
12
+ guards: {
13
+ "no TypeScript error": ({ context }) => !context.lastTypeScriptError,
14
+ "no JavaScript error": ({ context }) => !context.lastJavaScriptError,
15
+ },
16
+ actors: {
17
+ prepareBuildContext: fromCallback(({ sendBack }) => {
18
+ let buildContexts;
19
+ const prepare = async () => {
20
+ const contents = await generateEntry();
21
+ buildContexts = await Promise.all(HARDCODED_OUTPUT_FILES.map(async (outfile) => esbuild.context({ ...createBuildConfig(contents), outfile })));
22
+ sendBack({ type: "Build Contexts Prepared", buildContexts });
23
+ };
24
+ prepare();
25
+ return async () => {
26
+ if (!buildContexts)
27
+ return;
28
+ await Promise.all(buildContexts.map(async (context) => context.dispose()));
29
+ };
30
+ }),
31
+ build: fromCallback(({ sendBack, input }) => {
32
+ const buildContexts = input;
33
+ const build = async () => {
34
+ try {
35
+ await Promise.all(buildContexts.map(async (buildContext) => buildContext.rebuild()));
36
+ sendBack({ type: "JavaScript Success", time: new Date() });
37
+ }
38
+ catch (e) {
39
+ sendBack({
40
+ type: "JavaScript Error",
41
+ error: errorSchema.parse(e),
42
+ time: new Date(),
43
+ });
44
+ }
45
+ };
46
+ build();
47
+ }),
48
+ validateTypeScript: fromCallback(({ sendBack }) => {
49
+ const validate = async () => {
50
+ var _a;
51
+ try {
52
+ const program = await readConfig(path.resolve("tsconfig.json"));
53
+ const errors = await getDiagnostics(program);
54
+ if (errors.length) {
55
+ sendBack({ type: "TypeScript Error", errors, time: new Date() });
56
+ }
57
+ else {
58
+ sendBack({ type: "TypeScript Success", time: new Date() });
59
+ }
60
+ }
61
+ catch (e) {
62
+ sendBack({
63
+ type: "TypeScript Error",
64
+ errors: [
65
+ typeScriptErrorSchema.parse({ text: (_a = e.message) !== null && _a !== void 0 ? _a : "ERROR" }),
66
+ ],
67
+ time: new Date(),
68
+ });
69
+ }
70
+ };
71
+ validate();
72
+ }),
73
+ watch: fromCallback(({ sendBack }) => {
74
+ const appDir = getAppDir();
75
+ const watcher = chokidar.watch(appDir);
76
+ watcher.on("ready", () => watcher.on("all", () => {
77
+ sendBack({ type: "Change" });
78
+ }));
79
+ return () => {
80
+ watcher.close();
81
+ };
82
+ }),
83
+ },
84
+ actions: {
85
+ clearLastJavaScriptError: assign({
86
+ lastJavaScriptError: () => undefined,
87
+ }),
88
+ clearLastTypeScriptError: assign({
89
+ lastTypeScriptError: () => undefined,
90
+ }),
91
+ setBuildContexts: assign({
92
+ buildContexts: (_, params) => params.buildContexts,
93
+ }),
94
+ setLastJavaScriptError: assign({
95
+ lastJavaScriptError: (_, params) => ({
96
+ time: params.time,
97
+ error: params.error,
98
+ }),
99
+ }),
100
+ setLastTypeScriptError: assign({
101
+ lastTypeScriptError: (_, params) => ({
102
+ time: params.time,
103
+ errors: params.errors,
104
+ }),
105
+ }),
106
+ setLastSuccess: assign({
107
+ lastSuccess: (_, params) => params.time,
108
+ }),
109
+ },
110
+ }).createMachine({
111
+ context: {},
112
+ id: "Watch Machine",
113
+ type: "parallel",
114
+ states: {
115
+ TypeScript: {
116
+ states: {
117
+ "Validating": {
118
+ on: {
119
+ "TypeScript Error": {
120
+ target: "Errored",
121
+ actions: {
122
+ type: "setLastTypeScriptError",
123
+ params: ({ event }) => event,
124
+ },
125
+ },
126
+ "TypeScript Success": [
127
+ {
128
+ target: "No TypeScript Errors",
129
+ guard: "no JavaScript error",
130
+ actions: [
131
+ { type: "clearLastTypeScriptError" },
132
+ { type: "setLastSuccess", params: ({ event }) => event },
133
+ ],
134
+ },
135
+ {
136
+ target: "No TypeScript Errors",
137
+ actions: "clearLastTypeScriptError",
138
+ },
139
+ ],
140
+ },
141
+ invoke: {
142
+ src: "validateTypeScript",
143
+ },
144
+ },
145
+ "Errored": {},
146
+ "No TypeScript Errors": {},
147
+ },
148
+ initial: "Validating",
149
+ on: {
150
+ Change: ".Validating",
151
+ },
152
+ },
153
+ JavaScript: {
154
+ initial: "Preparing",
155
+ states: {
156
+ Preparing: {
157
+ on: {
158
+ "Build Contexts Prepared": {
159
+ target: "Watching",
160
+ actions: {
161
+ type: "setBuildContexts",
162
+ params: ({ event }) => event,
163
+ },
164
+ },
165
+ },
166
+ },
167
+ Watching: {
168
+ states: {
169
+ "No JavaScript Errors": {},
170
+ "Building": {
171
+ on: {
172
+ "JavaScript Error": {
173
+ target: "Errored",
174
+ actions: {
175
+ type: "setLastJavaScriptError",
176
+ params: ({ event }) => event,
177
+ },
178
+ },
179
+ "JavaScript Success": [
180
+ {
181
+ target: "No JavaScript Errors",
182
+ actions: [
183
+ { type: "clearLastJavaScriptError" },
184
+ { type: "setLastSuccess", params: ({ event }) => event },
185
+ ],
186
+ reenter: true,
187
+ guard: "no TypeScript error",
188
+ },
189
+ {
190
+ target: "No JavaScript Errors",
191
+ actions: "clearLastJavaScriptError",
192
+ reenter: true,
193
+ },
194
+ ],
195
+ },
196
+ invoke: {
197
+ src: "build",
198
+ input: ({ context }) => context.buildContexts,
199
+ },
200
+ },
201
+ "Errored": {},
202
+ },
203
+ initial: "Building",
204
+ on: {
205
+ Change: ".Building",
206
+ },
207
+ },
208
+ },
209
+ invoke: {
210
+ src: "prepareBuildContext",
211
+ },
212
+ },
213
+ },
214
+ invoke: {
215
+ src: "watch",
216
+ },
217
+ });
218
+ //# sourceMappingURL=watch-machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-machine.js","sourceRoot":"","sources":["../../src/machines/watch-machine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ # `name-to-be-replaced` Attio Extension
2
+
3
+ ## Build
4
+
5
+ ```bash
6
+ package-manager-to-be-replaced install
7
+ ```
8
+
9
+ ## Dev Mode
10
+
11
+ ```bash
12
+ npx attio dev
13
+ ```
14
+
15
+ ## Publish
16
+
17
+ ```bash
18
+ npx attio publish
19
+ ```
@@ -0,0 +1,4 @@
1
+ package.json
2
+ lib/**
3
+ dist/**
4
+ node_modules/**
@@ -0,0 +1,12 @@
1
+ import React from "react"
2
+
3
+ import {Counter} from "./counter-action"
4
+
5
+ export default function Actions() {
6
+ return (
7
+ <>
8
+ <Counter />
9
+ {/* Add more here... */}
10
+ </>
11
+ )
12
+ }
@@ -0,0 +1,18 @@
1
+ import React from "react"
2
+
3
+ import {Action} from "@attio/client-extension-sdk"
4
+
5
+ export function Counter() {
6
+ const [count, setCount] = React.useState(0)
7
+
8
+ return (
9
+ <Action
10
+ onTrigger={() => {
11
+ setCount(count + 1)
12
+ }}
13
+ icon="Plus"
14
+ >
15
+ Triggered {count} time{count === 1 ? "" : "s"}
16
+ </Action>
17
+ )
18
+ }
@@ -0,0 +1 @@
1
+ module.exports = {}
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "name-to-be-replaced",
3
+ "private": true,
4
+ "version": "0.0.1",
5
+ "attio": {
6
+ "app": "src/app"
7
+ },
8
+ "scripts": {
9
+ "dev": "attio dev",
10
+ "build": "attio build",
11
+ "build-watch": "attio watch",
12
+ "clean": "rm -rf lib && rm -rf dist && rm -rf tsconfig.tsbuildinfo",
13
+ "lint": "eslint 'src/**/*.{js,ts,tsx}'"
14
+ },
15
+ "prettier": "@attio/eslint-plugin/prettier",
16
+ "devDependencies": {
17
+ "eslint": "^9.2.0"
18
+ },
19
+ "dependencies": {
20
+ "attio": "workspace:^",
21
+ "@attio/client-extension-sdk": "workspace:^",
22
+ "react": "18.3.1"
23
+ }
24
+ }
@@ -0,0 +1,4 @@
1
+ package.json
2
+ lib/**
3
+ dist/**
4
+ node_modules/**
@@ -0,0 +1,12 @@
1
+ import React from "react"
2
+
3
+ import {Counter} from "./counter-action"
4
+
5
+ export default function Actions() {
6
+ return (
7
+ <>
8
+ <Counter />
9
+ {/* Add more here... */}
10
+ </>
11
+ )
12
+ }
@@ -0,0 +1,18 @@
1
+ import React from "react"
2
+
3
+ import {Action} from "@attio/client-extension-sdk"
4
+
5
+ export function Counter() {
6
+ const [count, setCount] = React.useState(0)
7
+
8
+ return (
9
+ <Action
10
+ onTrigger={() => {
11
+ setCount(count + 1)
12
+ }}
13
+ icon="Plus"
14
+ >
15
+ Triggered {count} time{count === 1 ? "" : "s"}
16
+ </Action>
17
+ )
18
+ }
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ parserOptions: {
3
+ project: ["./tsconfig.json"],
4
+ tsconfigRootDir: __dirname,
5
+ },
6
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "name-to-be-replaced",
3
+ "private": true,
4
+ "version": "0.0.1",
5
+ "attio": {
6
+ "app": "src/app"
7
+ },
8
+ "scripts": {
9
+ "dev": "attio dev",
10
+ "build": "attio build",
11
+ "build-watch": "attio watch",
12
+ "clean": "rm -rf lib && rm -rf dist && rm -rf tsconfig.tsbuildinfo",
13
+ "lint": "eslint 'src/**/*.{js,ts,tsx}'"
14
+ },
15
+ "prettier": "@attio/eslint-plugin/prettier",
16
+ "devDependencies": {
17
+ "eslint": "^9.2.0",
18
+ "typescript": "5.4.5"
19
+ },
20
+ "dependencies": {
21
+ "attio": "workspace:^",
22
+ "@attio/client-extension-sdk": "workspace:^",
23
+ "react": "18.3.1"
24
+ }
25
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "compilerOptions": {
3
+ "allowJs": false,
4
+ "allowSyntheticDefaultImports": true,
5
+ "allowUmdGlobalAccess": false,
6
+ "allowUnreachableCode": false,
7
+ "allowUnusedLabels": false,
8
+ "alwaysStrict": true,
9
+ "composite": true,
10
+ "declaration": true,
11
+ "declarationMap": true,
12
+ "emitDecoratorMetadata": true,
13
+ "esModuleInterop": true,
14
+ "experimentalDecorators": true,
15
+ "forceConsistentCasingInFileNames": true,
16
+ "jsx": "react",
17
+ "lib": ["ES2020"],
18
+ "module": "ES6",
19
+ "moduleResolution": "node",
20
+ "noFallthroughCasesInSwitch": true,
21
+ "noImplicitAny": true,
22
+ "noImplicitReturns": true,
23
+ "noImplicitThis": true,
24
+ "noUnusedLocals": true,
25
+ "noUnusedParameters": false,
26
+ "outDir": "lib",
27
+ "removeComments": true,
28
+ "resolveJsonModule": true,
29
+ "rootDir": "src",
30
+ "sourceMap": true,
31
+ "strict": true,
32
+ "strictBindCallApply": true,
33
+ "strictFunctionTypes": true,
34
+ "strictNullChecks": true,
35
+ "strictPropertyInitialization": true,
36
+ "target": "ES2019",
37
+ "types": ["@attio/client-extension-sdk"],
38
+ },
39
+ "references": [
40
+ {
41
+ "path": "../../libraries/react/client-extension-sdk"
42
+ }
43
+ ],
44
+ "exclude": [
45
+ "node_modules"
46
+ ],
47
+ "include": [
48
+ "src",
49
+ ]
50
+ }
@@ -0,0 +1,2 @@
1
+ export declare const copyWithTransform: (srcDir: string, destDir: string, transform: (contents: string) => string) => Promise<void>;
2
+ //# sourceMappingURL=copy-with-replace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-with-replace.d.ts","sourceRoot":"","sources":["../../src/util/copy-with-replace.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,iBAAiB,WAClB,MAAM,WACL,MAAM,aACJ,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,kBA0B1C,CAAA"}
@@ -0,0 +1,29 @@
1
+ import { promises as fs } from "fs";
2
+ import path from "path";
3
+ export const copyWithTransform = async (srcDir, destDir, transform) => {
4
+ try {
5
+ await fs.mkdir(destDir, { recursive: true });
6
+ }
7
+ catch (err) {
8
+ throw new Error(`Failed to create "${destDir}".`);
9
+ }
10
+ const entries = await fs.readdir(srcDir, { withFileTypes: true });
11
+ await Promise.all(entries.map(async (entry) => {
12
+ const srcPath = path.join(srcDir, entry.name);
13
+ const destPath = path.join(destDir, entry.name);
14
+ try {
15
+ if (entry.isDirectory()) {
16
+ await copyWithTransform(srcPath, destPath, transform);
17
+ }
18
+ else if (entry.isFile()) {
19
+ let content = await fs.readFile(srcPath, "utf8");
20
+ content = transform(content);
21
+ await fs.writeFile(destPath, content, "utf8");
22
+ }
23
+ }
24
+ catch (err) {
25
+ throw new Error(`Failed to copy "${srcPath}" to "${destPath}"`);
26
+ }
27
+ }));
28
+ };
29
+ //# sourceMappingURL=copy-with-replace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-with-replace.js","sourceRoot":"","sources":["../../src/util/copy-with-replace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,IAAI,EAAE,EAAC,MAAM,IAAI,CAAA;AACjC,OAAO,IAAI,MAAM,MAAM,CAAA;AAMvB,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAClC,MAAc,EACd,OAAe,EACf,SAAuC,EACzC,EAAE;IACA,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAA;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,IAAI,CAAC,CAAA;IACrD,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC,CAAA;IAE/D,MAAM,OAAO,CAAC,GAAG,CACb,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/C,IAAI,CAAC;YACD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACtB,MAAM,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;YACzD,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBACxB,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;gBAChD,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;gBAC5B,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;YACjD,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,SAAS,QAAQ,GAAG,CAAC,CAAA;QACnE,CAAC;IACL,CAAC,CAAC,CACL,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const createDirectory: (name: string) => string;
2
+ //# sourceMappingURL=create-directory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-directory.d.ts","sourceRoot":"","sources":["../../src/util/create-directory.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,SAAU,MAAM,WAiB3C,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { accessSync, constants, existsSync, mkdirSync } from "fs";
2
+ import { join } from "path";
3
+ export const createDirectory = (name) => {
4
+ const currentDir = process.cwd();
5
+ const newPath = join(currentDir, name);
6
+ if (existsSync(newPath)) {
7
+ throw new Error(`The directory '${name}' already exists.`);
8
+ }
9
+ else {
10
+ try {
11
+ accessSync(currentDir, constants.W_OK);
12
+ mkdirSync(newPath);
13
+ return newPath;
14
+ }
15
+ catch (err) {
16
+ throw new Error(`Write access to create the directory "${name}" in the current directory is denied.`);
17
+ }
18
+ }
19
+ };
20
+ //# sourceMappingURL=create-directory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-directory.js","sourceRoot":"","sources":["../../src/util/create-directory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAC,MAAM,IAAI,CAAA;AAC/D,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAA;AAEzB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE;IAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IACtC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,mBAAmB,CAAC,CAAA;IAC9D,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC;YACD,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;YACtC,SAAS,CAAC,OAAO,CAAC,CAAA;YAElB,OAAO,OAAO,CAAA;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACX,yCAAyC,IAAI,uCAAuC,CACvF,CAAA;QACL,CAAC;IACL,CAAC;AACL,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const isCommandAvailable: (command: string) => Promise<boolean>;
2
+ //# sourceMappingURL=is-command-available.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-command-available.d.ts","sourceRoot":"","sources":["../../src/util/is-command-available.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kBAAkB,YAAmB,MAAM,KAAG,QAAQ,OAAO,CAQzE,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { exec } from "child_process";
2
+ import { promisify } from "util";
3
+ const execAsync = promisify(exec);
4
+ export const isCommandAvailable = async (command) => {
5
+ try {
6
+ await execAsync(`${command} --version`);
7
+ return true;
8
+ }
9
+ catch {
10
+ return false;
11
+ }
12
+ };
13
+ //# sourceMappingURL=is-command-available.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-command-available.js","sourceRoot":"","sources":["../../src/util/is-command-available.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,eAAe,CAAA;AAClC,OAAO,EAAC,SAAS,EAAC,MAAM,MAAM,CAAA;AAE9B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;AAEjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,OAAe,EAAoB,EAAE;IAC1E,IAAI,CAAC;QACD,MAAM,SAAS,CAAC,GAAG,OAAO,YAAY,CAAC,CAAA;QAEvC,OAAO,IAAI,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAA;IAChB,CAAC;AACL,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function makeExtensionName(string: string): string;
2
+ //# sourceMappingURL=make-extension-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-extension-name.d.ts","sourceRoot":"","sources":["../../src/util/make-extension-name.ts"],"names":[],"mappings":"AASA,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD"}
@@ -0,0 +1,11 @@
1
+ const slugify = (string) => string
2
+ .toLowerCase()
3
+ .replace(/\s+/g, "-")
4
+ .replace(/[^\w]+_/g, "")
5
+ .replace(/--+ /g, "-")
6
+ .replace(/^-+/, "")
7
+ .replace(/-+$/, "");
8
+ export function makeExtensionName(string) {
9
+ return slugify(string.toLowerCase().trim());
10
+ }
11
+ //# sourceMappingURL=make-extension-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-extension-name.js","sourceRoot":"","sources":["../../src/util/make-extension-name.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,EAAE,CAC/B,MAAM;KACD,WAAW,EAAE;KACb,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;KACpB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;KACvB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;KACrB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;KAClB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AAE3B,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;AAC/C,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { default as ts } from "typescript";
2
+ import { z } from "zod";
3
+ export declare const typeScriptErrorSchema: z.ZodObject<{
4
+ text: z.ZodString;
5
+ location: z.ZodOptional<z.ZodObject<{
6
+ file: z.ZodString;
7
+ lineText: z.ZodString;
8
+ line: z.ZodNumber;
9
+ character: z.ZodNumber;
10
+ }, "strip", z.ZodTypeAny, {
11
+ file: string;
12
+ line: number;
13
+ lineText: string;
14
+ character: number;
15
+ }, {
16
+ file: string;
17
+ line: number;
18
+ lineText: string;
19
+ character: number;
20
+ }>>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ text: string;
23
+ location?: {
24
+ file: string;
25
+ line: number;
26
+ lineText: string;
27
+ character: number;
28
+ } | undefined;
29
+ }, {
30
+ text: string;
31
+ location?: {
32
+ file: string;
33
+ line: number;
34
+ lineText: string;
35
+ character: number;
36
+ } | undefined;
37
+ }>;
38
+ export type TypeScriptError = z.infer<typeof typeScriptErrorSchema>;
39
+ export declare const readConfig: (configFile: string) => Promise<ts.Program>;
40
+ export declare const getDiagnostics: (program: ts.Program) => Promise<Array<TypeScriptError>>;
41
+ //# sourceMappingURL=typescript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/util/typescript.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,OAAO,IAAI,EAAE,EAAC,MAAM,YAAY,CAAA;AACxC,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAA;AA6BrB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUhC,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE,eAAO,MAAM,UAAU,eAAsB,MAAM,KAAG,QAAQ,GAAG,OAAO,CAclE,CAAA;AAEN,eAAO,MAAM,cAAc,YAAmB,GAAG,OAAO,KAAG,QAAQ,MAAM,eAAe,CAAC,CA2BxF,CAAA"}