@wasp.sh/wasp-cli-darwin-arm64-unknown 0.23.0 → 0.24.0-rc.2
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/data/Cli/starters/basic/main.wasp.ts +60 -0
- package/data/Cli/starters/basic/package.json +4 -1
- package/data/Cli/starters/basic/prettier.config.mjs +9 -0
- package/data/Cli/starters/basic/src/tags/tags.wasp.ts +8 -0
- package/data/Cli/starters/basic/src/tasks/task.wasp.ts +16 -0
- package/data/Cli/starters/minimal/main.wasp.ts +12 -0
- package/data/Cli/starters/minimal/package.json +4 -1
- package/data/Cli/starters/skeleton/AGENTS.md +23 -0
- package/data/Cli/starters/skeleton/CLAUDE.md +23 -0
- package/data/Cli/starters/skeleton/tsconfig.json +5 -26
- package/data/Cli/starters/{ts-minimal → skeleton}/tsconfig.src.json +2 -1
- package/data/Cli/starters/{ts-minimal → skeleton}/tsconfig.wasp.json +5 -2
- package/data/Generator/libs/auth/{wasp.sh-lib-auth-0.23.0.tgz → wasp.sh-lib-auth-0.24.0.tgz} +0 -0
- package/data/Generator/libs/vite-ssr/{wasp.sh-lib-vite-ssr-0.23.0.tgz → wasp.sh-lib-vite-ssr-0.24.0.tgz} +0 -0
- package/data/Generator/templates/sdk/wasp/api/index.ts +51 -47
- package/data/Generator/templates/sdk/wasp/auth/email/actions/login.ts +5 -2
- package/data/Generator/templates/sdk/wasp/auth/email/actions/passwordReset.ts +9 -4
- package/data/Generator/templates/sdk/wasp/auth/email/actions/signup.ts +5 -2
- package/data/Generator/templates/sdk/wasp/auth/email/actions/verifyEmail.ts +5 -2
- package/data/Generator/templates/sdk/wasp/auth/responseSchemas.ts +10 -0
- package/data/Generator/templates/sdk/wasp/auth/useAuth.ts +2 -2
- package/data/Generator/templates/sdk/wasp/auth/username/actions/login.ts +5 -3
- package/data/Generator/templates/sdk/wasp/auth/username/actions/signup.ts +3 -2
- package/data/Generator/templates/sdk/wasp/client/app/layout.tsx +13 -20
- package/data/Generator/templates/sdk/wasp/client/app/pages/OAuthCallback.tsx +12 -11
- package/data/Generator/templates/sdk/wasp/client/env/schema.ts +8 -8
- package/data/Generator/templates/sdk/wasp/client/env.ts +2 -2
- package/data/Generator/templates/sdk/wasp/client/operations/internal/index.ts +4 -2
- package/data/Generator/templates/sdk/wasp/client/router/NavLink.tsx +21 -0
- package/data/Generator/templates/sdk/wasp/client/router/index.ts +2 -0
- package/data/Generator/templates/sdk/wasp/client/vite/plugins/typescriptCheck.ts +8 -4
- package/data/Generator/templates/sdk/wasp/client/vite/plugins/validateEnv.ts +72 -44
- package/data/Generator/templates/sdk/wasp/client/vite/plugins/wasp.ts +1 -1
- package/data/Generator/templates/sdk/wasp/tsconfig.json +3 -0
- package/data/Generator/templates/types/spec/register.ts +14 -0
- package/data/packages/deploy/dist/providers/railway/commands/setup/setup.js +9 -0
- package/data/packages/deploy/dist/providers/railway/jsonOutputSchemas.js +47 -0
- package/data/packages/deploy/dist/providers/railway/railwayService/deployment.js +45 -0
- package/data/packages/deploy/package-lock.json +2 -2
- package/data/packages/deploy/package.json +1 -1
- package/data/packages/prisma/package-lock.json +2 -2
- package/data/packages/prisma/package.json +1 -2
- package/data/packages/spec/dist/__tests__/cli.unit.test.js +128 -0
- package/data/packages/spec/dist/__tests__/legacy/appAnalyzer.unit.test.d.ts.map +1 -0
- package/data/packages/{wasp-config/dist/__tests__ → spec/dist/__tests__/legacy}/appAnalyzer.unit.test.js +3 -3
- package/data/packages/spec/dist/__tests__/legacy/mapTsAppSpecToAppSpecDecls.integration.test.d.ts.map +1 -0
- package/data/packages/{wasp-config/dist/__tests__ → spec/dist/__tests__/legacy}/mapTsAppSpecToAppSpecDecls.integration.test.js +2 -2
- package/data/packages/spec/dist/__tests__/legacy/mapTsAppSpecToAppSpecDecls.unit.test.d.ts.map +1 -0
- package/data/packages/{wasp-config/dist/__tests__ → spec/dist/__tests__/legacy}/mapTsAppSpecToAppSpecDecls.unit.test.js +4 -18
- package/data/packages/{wasp-config/dist/__tests__ → spec/dist/__tests__/legacy}/testFixtures.d.ts +4 -4
- package/data/packages/spec/dist/__tests__/legacy/testFixtures.d.ts.map +1 -0
- package/data/packages/{wasp-config/dist/__tests__ → spec/dist/__tests__/legacy}/testFixtures.js +2 -2
- package/data/packages/spec/dist/__tests__/legacy/testFixtures.test-d.d.ts.map +1 -0
- package/data/packages/spec/dist/__tests__/spec/appAnalyzer.unit.test.d.ts +2 -0
- package/data/packages/spec/dist/__tests__/spec/appAnalyzer.unit.test.d.ts.map +1 -0
- package/data/packages/spec/dist/__tests__/spec/appAnalyzer.unit.test.js +68 -0
- package/data/packages/spec/dist/__tests__/spec/mapApp.unit.test.d.ts +2 -0
- package/data/packages/spec/dist/__tests__/spec/mapApp.unit.test.d.ts.map +1 -0
- package/data/packages/spec/dist/__tests__/spec/mapApp.unit.test.js +814 -0
- package/data/packages/spec/dist/__tests__/spec/refObject.test-d.d.ts +2 -0
- package/data/packages/spec/dist/__tests__/spec/refObject.test-d.d.ts.map +1 -0
- package/data/packages/spec/dist/__tests__/spec/refObject.test-d.js +148 -0
- package/data/packages/spec/dist/__tests__/spec/refObject.unit.test.d.ts +2 -0
- package/data/packages/spec/dist/__tests__/spec/refObject.unit.test.d.ts.map +1 -0
- package/data/packages/spec/dist/__tests__/spec/refObject.unit.test.js +49 -0
- package/data/packages/spec/dist/__tests__/spec/refObjectPath.unit.test.d.ts +2 -0
- package/data/packages/spec/dist/__tests__/spec/refObjectPath.unit.test.d.ts.map +1 -0
- package/data/packages/spec/dist/__tests__/spec/refObjectPath.unit.test.js +204 -0
- package/data/packages/spec/dist/__tests__/spec/testFixtures.d.ts +85 -0
- package/data/packages/spec/dist/__tests__/spec/testFixtures.d.ts.map +1 -0
- package/data/packages/spec/dist/__tests__/spec/testFixtures.js +473 -0
- package/data/packages/spec/dist/__tests__/spec/tsAppSpec.test-d.d.ts +2 -0
- package/data/packages/spec/dist/__tests__/spec/tsAppSpec.test-d.d.ts.map +1 -0
- package/data/packages/spec/dist/__tests__/spec/tsAppSpec.test-d.js +44 -0
- package/data/packages/spec/dist/__tests__/spec-pipeline/pipeline.integration.test.d.ts +2 -0
- package/data/packages/spec/dist/__tests__/spec-pipeline/pipeline.integration.test.d.ts.map +1 -0
- package/data/packages/spec/dist/__tests__/spec-pipeline/pipeline.integration.test.js +218 -0
- package/data/packages/spec/dist/__tests__/spec-pipeline/transformWaspTsSpecFile/imports.unit.test.d.ts +2 -0
- package/data/packages/spec/dist/__tests__/spec-pipeline/transformWaspTsSpecFile/imports.unit.test.d.ts.map +1 -0
- package/data/packages/spec/dist/__tests__/spec-pipeline/transformWaspTsSpecFile/imports.unit.test.js +174 -0
- package/data/packages/spec/dist/__tests__/spec-pipeline/transformWaspTsSpecFile/refHelper.unit.test.d.ts +2 -0
- package/data/packages/spec/dist/__tests__/spec-pipeline/transformWaspTsSpecFile/refHelper.unit.test.d.ts.map +1 -0
- package/data/packages/spec/dist/__tests__/spec-pipeline/transformWaspTsSpecFile/refHelper.unit.test.js +119 -0
- package/data/packages/{wasp-config → spec}/dist/src/appSpec.d.ts +11 -4
- package/data/packages/spec/dist/src/appSpec.d.ts.map +1 -0
- package/data/packages/{wasp-config → spec}/dist/src/cli.d.ts +3 -1
- package/data/packages/spec/dist/src/cli.d.ts.map +1 -0
- package/data/packages/spec/dist/src/cli.js +28 -0
- package/data/packages/spec/dist/src/index.d.ts +2 -0
- package/data/packages/spec/dist/src/index.d.ts.map +1 -0
- package/data/packages/spec/dist/src/index.js +1 -0
- package/data/packages/spec/dist/src/internal.d.ts +2 -0
- package/data/packages/spec/dist/src/internal.d.ts.map +1 -0
- package/data/packages/spec/dist/src/internal.js +1 -0
- package/data/packages/spec/dist/src/legacy/_private.d.ts.map +1 -0
- package/data/packages/{wasp-config/dist/src → spec/dist/src/legacy}/appAnalyzer.d.ts +1 -1
- package/data/packages/spec/dist/src/legacy/appAnalyzer.d.ts.map +1 -0
- package/data/packages/{wasp-config/dist/src → spec/dist/src/legacy}/mapTsAppSpecToAppSpecDecls.d.ts +1 -1
- package/data/packages/spec/dist/src/legacy/mapTsAppSpecToAppSpecDecls.d.ts.map +1 -0
- package/data/packages/{wasp-config/dist/src → spec/dist/src/legacy}/mapTsAppSpecToAppSpecDecls.js +3 -6
- package/data/packages/spec/dist/src/legacy/publicApi/App.d.ts.map +1 -0
- package/data/packages/{wasp-config/dist/src → spec/dist/src/legacy}/publicApi/tsAppSpec.d.ts +3 -3
- package/data/packages/spec/dist/src/legacy/publicApi/tsAppSpec.d.ts.map +1 -0
- package/data/packages/spec/dist/src/run.js +28 -0
- package/data/packages/spec/dist/src/spec/appAnalyzer.d.ts +8 -0
- package/data/packages/spec/dist/src/spec/appAnalyzer.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec/appAnalyzer.js +35 -0
- package/data/packages/spec/dist/src/spec/mapApp.d.ts +54 -0
- package/data/packages/spec/dist/src/spec/mapApp.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec/mapApp.js +336 -0
- package/data/packages/spec/dist/src/spec/publicApi/constructors.d.ts +296 -0
- package/data/packages/spec/dist/src/spec/publicApi/constructors.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec/publicApi/constructors.js +277 -0
- package/data/packages/spec/dist/src/spec/publicApi/index.d.ts +5 -0
- package/data/packages/spec/dist/src/spec/publicApi/index.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec/publicApi/index.js +2 -0
- package/data/packages/spec/dist/src/spec/publicApi/register.d.ts +9 -0
- package/data/packages/spec/dist/src/spec/publicApi/register.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec/publicApi/register.js +1 -0
- package/data/packages/spec/dist/src/spec/publicApi/waspSpec.d.ts +872 -0
- package/data/packages/spec/dist/src/spec/publicApi/waspSpec.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec/publicApi/waspSpec.js +1 -0
- package/data/packages/spec/dist/src/spec/refObject.d.ts +95 -0
- package/data/packages/spec/dist/src/spec/refObject.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec/refObject.js +119 -0
- package/data/packages/spec/dist/src/spec/refObjectPath.d.ts +18 -0
- package/data/packages/spec/dist/src/spec/refObjectPath.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec/refObjectPath.js +79 -0
- package/data/packages/spec/dist/src/spec/specUserError.d.ts +9 -0
- package/data/packages/spec/dist/src/spec/specUserError.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec/specUserError.js +8 -0
- package/data/packages/spec/dist/src/spec-pipeline/common.d.ts +2 -0
- package/data/packages/spec/dist/src/spec-pipeline/common.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/common.js +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/loadWaspTsSpec.d.ts +5 -0
- package/data/packages/spec/dist/src/spec-pipeline/loadWaspTsSpec.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/loadWaspTsSpec.js +46 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/imports/apply.d.ts +4 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/imports/apply.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/imports/apply.js +34 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/imports/check.d.ts +3 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/imports/check.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/imports/check.js +14 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/imports/index.d.ts +5 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/imports/index.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/imports/index.js +40 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/imports/plan.d.ts +26 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/imports/plan.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/imports/plan.js +57 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/index.d.ts +3 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/index.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/index.js +8 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/apply.d.ts +4 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/apply.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/apply.js +18 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/check.d.ts +3 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/check.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/check.js +13 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/index.d.ts +5 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/index.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/index.js +40 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/plan.d.ts +19 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/plan.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/plan.js +60 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/util.d.ts +10 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/util.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/util.js +53 -0
- package/data/packages/spec/dist/src/spec-pipeline/typecheckPlugin/index.d.ts +5 -0
- package/data/packages/spec/dist/src/spec-pipeline/typecheckPlugin/index.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/typecheckPlugin/index.js +38 -0
- package/data/packages/spec/dist/src/spec-pipeline/typecheckPlugin/project.d.ts +9 -0
- package/data/packages/spec/dist/src/spec-pipeline/typecheckPlugin/project.d.ts.map +1 -0
- package/data/packages/spec/dist/src/spec-pipeline/typecheckPlugin/project.js +66 -0
- package/data/packages/spec/dist/src/typeUtils.d.ts +3 -0
- package/data/packages/spec/dist/src/typeUtils.d.ts.map +1 -0
- package/data/packages/spec/dist/src/typeUtils.js +1 -0
- package/data/packages/{wasp-config → spec}/package-lock.json +921 -1475
- package/data/packages/spec/package.json +48 -0
- package/data/packages/studio/package-lock.json +2 -2
- package/data/packages/studio/package.json +1 -1
- package/data/packages/ts-inspect/package-lock.json +2 -2
- package/data/packages/ts-inspect/package.json +1 -1
- package/package.json +1 -1
- package/wasp-bin +0 -0
- package/data/Cli/starters/basic/.prettierrc +0 -3
- package/data/Cli/starters/basic/main.wasp +0 -100
- package/data/Cli/starters/minimal/main.wasp +0 -14
- package/data/Cli/starters/ts-minimal/main.wasp.ts +0 -15
- package/data/Cli/starters/ts-minimal/package.json +0 -18
- package/data/Cli/starters/ts-minimal/schema.prisma +0 -10
- package/data/Cli/starters/ts-minimal/src/Main.css +0 -103
- package/data/Cli/starters/ts-minimal/src/MainPage.tsx +0 -37
- package/data/Cli/starters/ts-minimal/src/assets/logo.svg +0 -1
- package/data/Cli/starters/ts-minimal/tsconfig.json +0 -7
- package/data/Cli/starters/ts-minimal/vite.config.ts +0 -9
- package/data/packages/wasp-config/dist/__tests__/appAnalyzer.unit.test.d.ts.map +0 -1
- package/data/packages/wasp-config/dist/__tests__/cli.unit.test.js +0 -65
- package/data/packages/wasp-config/dist/__tests__/mapTsAppSpecToAppSpecDecls.integration.test.d.ts.map +0 -1
- package/data/packages/wasp-config/dist/__tests__/mapTsAppSpecToAppSpecDecls.unit.test.d.ts.map +0 -1
- package/data/packages/wasp-config/dist/__tests__/testFixtures.d.ts.map +0 -1
- package/data/packages/wasp-config/dist/__tests__/testFixtures.test-d.d.ts.map +0 -1
- package/data/packages/wasp-config/dist/src/_private.d.ts.map +0 -1
- package/data/packages/wasp-config/dist/src/appAnalyzer.d.ts.map +0 -1
- package/data/packages/wasp-config/dist/src/appSpec.d.ts.map +0 -1
- package/data/packages/wasp-config/dist/src/cli.d.ts.map +0 -1
- package/data/packages/wasp-config/dist/src/cli.js +0 -24
- package/data/packages/wasp-config/dist/src/index.d.ts +0 -8
- package/data/packages/wasp-config/dist/src/index.d.ts.map +0 -1
- package/data/packages/wasp-config/dist/src/index.js +0 -1
- package/data/packages/wasp-config/dist/src/mapTsAppSpecToAppSpecDecls.d.ts.map +0 -1
- package/data/packages/wasp-config/dist/src/publicApi/App.d.ts.map +0 -1
- package/data/packages/wasp-config/dist/src/publicApi/tsAppSpec.d.ts.map +0 -1
- package/data/packages/wasp-config/dist/src/run.js +0 -18
- package/data/packages/wasp-config/package.json +0 -40
- /package/data/packages/{wasp-config → spec}/dist/__tests__/cli.unit.test.d.ts +0 -0
- /package/data/packages/{wasp-config → spec}/dist/__tests__/cli.unit.test.d.ts.map +0 -0
- /package/data/packages/{wasp-config/dist/__tests__ → spec/dist/__tests__/legacy}/appAnalyzer.unit.test.d.ts +0 -0
- /package/data/packages/{wasp-config/dist/__tests__ → spec/dist/__tests__/legacy}/mapTsAppSpecToAppSpecDecls.integration.test.d.ts +0 -0
- /package/data/packages/{wasp-config/dist/__tests__ → spec/dist/__tests__/legacy}/mapTsAppSpecToAppSpecDecls.unit.test.d.ts +0 -0
- /package/data/packages/{wasp-config/dist/__tests__ → spec/dist/__tests__/legacy}/testFixtures.test-d.d.ts +0 -0
- /package/data/packages/{wasp-config/dist/__tests__ → spec/dist/__tests__/legacy}/testFixtures.test-d.js +0 -0
- /package/data/packages/{wasp-config → spec}/dist/src/appSpec.js +0 -0
- /package/data/packages/{wasp-config → spec}/dist/src/branded.d.ts +0 -0
- /package/data/packages/{wasp-config → spec}/dist/src/branded.d.ts.map +0 -0
- /package/data/packages/{wasp-config → spec}/dist/src/branded.js +0 -0
- /package/data/packages/{wasp-config/dist/src → spec/dist/src/legacy}/_private.d.ts +0 -0
- /package/data/packages/{wasp-config/dist/src → spec/dist/src/legacy}/_private.js +0 -0
- /package/data/packages/{wasp-config/dist/src → spec/dist/src/legacy}/appAnalyzer.js +0 -0
- /package/data/packages/{wasp-config/dist/src → spec/dist/src/legacy}/publicApi/App.d.ts +0 -0
- /package/data/packages/{wasp-config/dist/src → spec/dist/src/legacy}/publicApi/App.js +0 -0
- /package/data/packages/{wasp-config/dist/src → spec/dist/src/legacy}/publicApi/tsAppSpec.js +0 -0
- /package/data/packages/{wasp-config → spec}/dist/src/run.d.ts +0 -0
- /package/data/packages/{wasp-config → spec}/dist/src/run.d.ts.map +0 -0
package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/spec-pipeline/transformWaspTsSpecFilesPlugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIvC,wBAAgB,8BAA8B,IAAI,MAAM,EAAE,CAKzD"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { transformRefImportsPlugin } from "./imports/index.js";
|
|
2
|
+
import { transformRefHelperPlugin } from "./refHelper/index.js";
|
|
3
|
+
export function transformWaspTsSpecFilesPlugin() {
|
|
4
|
+
return [
|
|
5
|
+
transformRefImportsPlugin(), // Ref imports transforms to the ref helper, so it should come first.
|
|
6
|
+
transformRefHelperPlugin(),
|
|
7
|
+
];
|
|
8
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RolldownMagicString } from "rolldown";
|
|
2
|
+
import { Plan } from "./plan.js";
|
|
3
|
+
export declare function applyTransformRefHelperPlan_mutate(importingFilePath: string, magicString: RolldownMagicString, { refHelperLocalNames, removals, safeMakeRefHelperName: safeMakeRefHelperName, }: Plan): void;
|
|
4
|
+
//# sourceMappingURL=apply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../../../src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/apply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAMpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,wBAAgB,kCAAkC,CAChD,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,mBAAmB,EAChC,EACE,mBAAmB,EACnB,QAAQ,EACR,qBAAqB,EAAE,qBAAqB,GAC7C,EAAE,IAAI,GACN,IAAI,CA2BN"}
|
package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/apply.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { buildImportStatement, INTERNAL_MAKE_REF_HELPER_IMPORT_NAME, INTERNAL_MAKE_REF_HELPER_IMPORT_SOURCE, } from "../util.js";
|
|
2
|
+
export function applyTransformRefHelperPlan_mutate(importingFilePath, magicString, { refHelperLocalNames, removals, safeMakeRefHelperName: safeMakeRefHelperName, }) {
|
|
3
|
+
for (const removal of removals) {
|
|
4
|
+
magicString.remove(removal.start, removal.end);
|
|
5
|
+
}
|
|
6
|
+
if (refHelperLocalNames.length === 0) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
// We'll use the first local name for the ref helper as the main one, and create
|
|
10
|
+
// aliases for the rest if needed. This way we minimize the number of new
|
|
11
|
+
// variables we introduce.
|
|
12
|
+
const [firstRefHelperLocalName, ...extraRefHelperAliases] = refHelperLocalNames;
|
|
13
|
+
magicString.prepend([
|
|
14
|
+
buildImportStatement([[INTERNAL_MAKE_REF_HELPER_IMPORT_NAME, safeMakeRefHelperName]], INTERNAL_MAKE_REF_HELPER_IMPORT_SOURCE),
|
|
15
|
+
`const ${firstRefHelperLocalName} = ${safeMakeRefHelperName}(${JSON.stringify(importingFilePath)});\n`,
|
|
16
|
+
...extraRefHelperAliases.map((localName) => `const ${localName} = ${firstRefHelperLocalName};\n`),
|
|
17
|
+
].join(""));
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../../../src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,gBAAgB,CAAC;AAIlD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAOhE"}
|
package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/check.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { SpecUserError } from "../../../spec/specUserError.js";
|
|
2
|
+
import { PUBLIC_REF_HELPER_IMPORT_SOURCE } from "../util.js";
|
|
3
|
+
export function assertCanTransformRefHelper(ast) {
|
|
4
|
+
const hasRefHelperExports = ast.body.some(isRefHelperExportDeclaration);
|
|
5
|
+
if (hasRefHelperExports) {
|
|
6
|
+
throw new SpecUserError(`Re-exporting from the ${PUBLIC_REF_HELPER_IMPORT_SOURCE} package is not supported. First import it and then re-export it if needed.`);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
function isRefHelperExportDeclaration(node) {
|
|
10
|
+
return ((node.type === "ExportNamedDeclaration" ||
|
|
11
|
+
node.type === "ExportAllDeclaration") &&
|
|
12
|
+
node.source?.value === PUBLIC_REF_HELPER_IMPORT_SOURCE);
|
|
13
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Plugin, RolldownMagicString } from "rolldown";
|
|
2
|
+
import type { ESTree as t } from "rolldown/utils";
|
|
3
|
+
export declare function transformRefHelperPlugin(): Plugin;
|
|
4
|
+
export declare function transformRefHelper_mutate(id: string, ast: t.Program, magicString: RolldownMagicString): void;
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,gBAAgB,CAAC;AAMlD,wBAAgB,wBAAwB,IAAI,MAAM,CA+BjD;AAED,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,CAAC,CAAC,OAAO,EACd,WAAW,EAAE,mBAAmB,GAC/B,IAAI,CASN"}
|
package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/index.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { WASP_SPEC_FILE_REGEX } from "../../common.js";
|
|
3
|
+
import { applyTransformRefHelperPlan_mutate } from "./apply.js";
|
|
4
|
+
import { assertCanTransformRefHelper } from "./check.js";
|
|
5
|
+
import { planTransformRefHelper } from "./plan.js";
|
|
6
|
+
export function transformRefHelperPlugin() {
|
|
7
|
+
return {
|
|
8
|
+
name: "wasp/spec/transform-ref-helper",
|
|
9
|
+
options(opts) {
|
|
10
|
+
return {
|
|
11
|
+
...opts,
|
|
12
|
+
experimental: {
|
|
13
|
+
...opts.experimental,
|
|
14
|
+
// TODO: Remove this once it goes out of experimental phase.
|
|
15
|
+
// https://rolldown.rs/in-depth/native-magic-string
|
|
16
|
+
nativeMagicString: true,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
transform: {
|
|
21
|
+
filter: { id: WASP_SPEC_FILE_REGEX },
|
|
22
|
+
handler(code, id, meta) {
|
|
23
|
+
assert(meta.magicString);
|
|
24
|
+
// If the AST is already available, use it; otherwise ask the bundler to
|
|
25
|
+
// parse it.
|
|
26
|
+
const ast = meta.ast || this.parse(code, { lang: "ts" });
|
|
27
|
+
transformRefHelper_mutate(id, ast, meta.magicString);
|
|
28
|
+
return { code: meta.magicString };
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function transformRefHelper_mutate(id, ast, magicString) {
|
|
34
|
+
assertCanTransformRefHelper(ast);
|
|
35
|
+
const refHelperPlan = planTransformRefHelper(ast);
|
|
36
|
+
if (!refHelperPlan) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
applyTransformRefHelperPlan_mutate(id, magicString, refHelperPlan);
|
|
40
|
+
}
|
package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/plan.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ESTree as t } from "rolldown/utils";
|
|
2
|
+
export type Plan = {
|
|
3
|
+
/**
|
|
4
|
+
* The local names `ref` was imported under (e.g. `["ref"]` or `["appRef"]`),
|
|
5
|
+
* one per `ref` specifier we removed. Each gets aliased back to the generated
|
|
6
|
+
* helper so the rest of the file keeps working.
|
|
7
|
+
*/
|
|
8
|
+
refHelperLocalNames: string[];
|
|
9
|
+
/** Source ranges to delete */
|
|
10
|
+
removals: SourceRange[];
|
|
11
|
+
safeMakeRefHelperName: string;
|
|
12
|
+
};
|
|
13
|
+
type SourceRange = {
|
|
14
|
+
start: number;
|
|
15
|
+
end: number;
|
|
16
|
+
};
|
|
17
|
+
export declare function planTransformRefHelper(ast: t.Program): Plan | null;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../../../src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,gBAAgB,CAAC;AAUlD,MAAM,MAAM,IAAI,GAAG;IACjB;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,8BAA8B;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,KAAK,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAgClE"}
|
package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/refHelper/plan.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { getStringValue, getTopLevelBindings, INTERNAL_MAKE_REF_HELPER_IMPORT_NAME, makeSafeName, PUBLIC_REF_HELPER_IMPORT_NAME, PUBLIC_REF_HELPER_IMPORT_SOURCE, } from "../util.js";
|
|
2
|
+
export function planTransformRefHelper(ast) {
|
|
3
|
+
const refHelperImportDeclarations = ast.body.filter(isRefHelperImportDeclaration);
|
|
4
|
+
if (refHelperImportDeclarations.length === 0) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
const removals = refHelperImportDeclarations.flatMap(planRefSpecifierRemovals);
|
|
8
|
+
const refHelperLocalNames = refHelperImportDeclarations.flatMap((declaration) => declaration.specifiers
|
|
9
|
+
.filter(isRefHelperImportSpecifier)
|
|
10
|
+
.map((specifier) => getStringValue(specifier.local)));
|
|
11
|
+
const scope = getTopLevelBindings(ast);
|
|
12
|
+
const safeMakeRefHelperName = makeSafeName(INTERNAL_MAKE_REF_HELPER_IMPORT_NAME, scope);
|
|
13
|
+
return {
|
|
14
|
+
refHelperLocalNames,
|
|
15
|
+
removals,
|
|
16
|
+
safeMakeRefHelperName,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function isRefHelperImportDeclaration(node) {
|
|
20
|
+
return (node.type === "ImportDeclaration" &&
|
|
21
|
+
node.importKind === "value" &&
|
|
22
|
+
getStringValue(node.source) === PUBLIC_REF_HELPER_IMPORT_SOURCE);
|
|
23
|
+
}
|
|
24
|
+
// We want to remove all `ref` specifiers, with two caveats:
|
|
25
|
+
// - If `ref` is the only specifier in its import declaration, we remove the
|
|
26
|
+
// whole declaration.
|
|
27
|
+
// - If there are multiple specifiers, we need to extend the range a bit to also
|
|
28
|
+
// remove the comma next to it, as a leftover comma would cause a SyntaxError.
|
|
29
|
+
function planRefSpecifierRemovals(importDeclaration) {
|
|
30
|
+
const specifiersCount = importDeclaration.specifiers.length;
|
|
31
|
+
const specifiersToRemove = importDeclaration.specifiers
|
|
32
|
+
.map((node, position) => ({ node, position }))
|
|
33
|
+
.filter(({ node }) => isRefHelperImportSpecifier(node));
|
|
34
|
+
if (specifiersToRemove.length === 0)
|
|
35
|
+
return [];
|
|
36
|
+
if (specifiersToRemove.length === specifiersCount)
|
|
37
|
+
return [importDeclaration];
|
|
38
|
+
return specifiersToRemove.map(({ node: currentSpecifier, position }) => {
|
|
39
|
+
const isFirstSpecifier = position === 0;
|
|
40
|
+
if (isFirstSpecifier) {
|
|
41
|
+
const nextSpecifier = importDeclaration.specifiers[position + 1];
|
|
42
|
+
return {
|
|
43
|
+
start: currentSpecifier.start,
|
|
44
|
+
end: nextSpecifier?.start ?? currentSpecifier.end,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const previousSpecifier = importDeclaration.specifiers[position - 1];
|
|
49
|
+
return {
|
|
50
|
+
start: previousSpecifier?.end ?? currentSpecifier.start,
|
|
51
|
+
end: currentSpecifier.end,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function isRefHelperImportSpecifier(node) {
|
|
57
|
+
return (node.type === "ImportSpecifier" &&
|
|
58
|
+
node.importKind === "value" &&
|
|
59
|
+
getStringValue(node.imported) === PUBLIC_REF_HELPER_IMPORT_NAME);
|
|
60
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ESTree as t } from "rolldown/utils";
|
|
2
|
+
export declare const PUBLIC_REF_HELPER_IMPORT_SOURCE = "@wasp.sh/spec";
|
|
3
|
+
export declare const PUBLIC_REF_HELPER_IMPORT_NAME = "ref";
|
|
4
|
+
export declare const INTERNAL_MAKE_REF_HELPER_IMPORT_SOURCE = "@wasp.sh/spec/internal";
|
|
5
|
+
export declare const INTERNAL_MAKE_REF_HELPER_IMPORT_NAME = "_waspMakeRef";
|
|
6
|
+
export declare function getStringValue(node: t.IdentifierName | t.StringLiteral): string;
|
|
7
|
+
export declare function getTopLevelBindings(ast: t.Program): Set<string>;
|
|
8
|
+
export declare function makeSafeName(desiredName: string, definedBindings: ReadonlySet<string>): string;
|
|
9
|
+
export declare function buildImportStatement(imports: readonly [importName: string, localName?: string][], source: string): string;
|
|
10
|
+
//# sourceMappingURL=util.d.ts.map
|
package/data/packages/spec/dist/src/spec-pipeline/transformWaspTsSpecFilesPlugin/util.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/spec-pipeline/transformWaspTsSpecFilesPlugin/util.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,MAAM,IAAI,CAAC,EAAE,MAAM,gBAAgB,CAAC;AAElD,eAAO,MAAM,+BAA+B,kBAAkB,CAAC;AAC/D,eAAO,MAAM,6BAA6B,QAAQ,CAAC;AAEnD,eAAO,MAAM,sCAAsC,2BAA2B,CAAC;AAC/E,eAAO,MAAM,oCAAoC,iBAAiB,CAAC;AAEnE,wBAAgB,cAAc,CAC5B,IAAI,EAAE,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,aAAa,GACvC,MAAM,CAER;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAsC/D;AAED,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GACnC,MAAM,CAOR;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,EAAE,EAC5D,MAAM,EAAE,MAAM,UAWf"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { createVisitors } from "estree-util-scope";
|
|
2
|
+
import { walk } from "estree-walker";
|
|
3
|
+
import assert from "node:assert/strict";
|
|
4
|
+
export const PUBLIC_REF_HELPER_IMPORT_SOURCE = "@wasp.sh/spec";
|
|
5
|
+
export const PUBLIC_REF_HELPER_IMPORT_NAME = "ref";
|
|
6
|
+
export const INTERNAL_MAKE_REF_HELPER_IMPORT_SOURCE = "@wasp.sh/spec/internal";
|
|
7
|
+
export const INTERNAL_MAKE_REF_HELPER_IMPORT_NAME = "_waspMakeRef";
|
|
8
|
+
export function getStringValue(node) {
|
|
9
|
+
return node.type === "Identifier" ? node.name : node.value;
|
|
10
|
+
}
|
|
11
|
+
export function getTopLevelBindings(ast) {
|
|
12
|
+
const visitors = createVisitors();
|
|
13
|
+
walk(
|
|
14
|
+
// @ts-expect-error - The types are not exactly the same between Rolldown
|
|
15
|
+
// and ESTree, but the differences are in extra metadata and not the core
|
|
16
|
+
// structure.
|
|
17
|
+
ast, {
|
|
18
|
+
enter(node) {
|
|
19
|
+
visitors.enter(node);
|
|
20
|
+
// Taken from estree-util-scope's documentation, we don't enter any
|
|
21
|
+
// nodes that define their own scope, so we stay in the top-level.
|
|
22
|
+
// https://github.com/syntax-tree/estree-util-scope#example-just-the-top-scope
|
|
23
|
+
if (node.type === "ArrowFunctionExpression" ||
|
|
24
|
+
node.type === "FunctionDeclaration" ||
|
|
25
|
+
node.type === "FunctionExpression" ||
|
|
26
|
+
node.type === "BlockStatement") {
|
|
27
|
+
this.skip();
|
|
28
|
+
visitors.exit(node);
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
leave: visitors.exit,
|
|
32
|
+
});
|
|
33
|
+
const topLevelScope = visitors.scopes.at(-1);
|
|
34
|
+
assert(topLevelScope, "Expected to find a scope for the top-level program node");
|
|
35
|
+
const bindings = new Set(topLevelScope.defined);
|
|
36
|
+
return bindings;
|
|
37
|
+
}
|
|
38
|
+
export function makeSafeName(desiredName, definedBindings) {
|
|
39
|
+
let i = 0;
|
|
40
|
+
let name = desiredName;
|
|
41
|
+
while (definedBindings.has(name)) {
|
|
42
|
+
name = `${desiredName}_${i++}`;
|
|
43
|
+
}
|
|
44
|
+
return name;
|
|
45
|
+
}
|
|
46
|
+
export function buildImportStatement(imports, source) {
|
|
47
|
+
const specifiers = imports
|
|
48
|
+
.map(([importName, localName]) => !localName || importName === localName
|
|
49
|
+
? importName
|
|
50
|
+
: `${importName} as ${localName}`)
|
|
51
|
+
.join(", ");
|
|
52
|
+
return `import { ${specifiers} } from ${JSON.stringify(source)};\n`;
|
|
53
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/spec-pipeline/typecheckPlugin/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMvC,wBAAgB,eAAe,CAAC,EAC9B,YAAY,GACb,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAyCT"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import ts from "typescript";
|
|
3
|
+
import { SpecUserError } from "../../spec/specUserError.js";
|
|
4
|
+
import { WASP_SPEC_FILE_REGEX } from "../common.js";
|
|
5
|
+
import { typecheckProject } from "./project.js";
|
|
6
|
+
export function typecheckPlugin({ tsconfigPath, }) {
|
|
7
|
+
// The bundler hands us each spec file's (already lowered) source as it parses
|
|
8
|
+
// it. We collect them here and type check them together once the build ends.
|
|
9
|
+
const specFileSources = new Map();
|
|
10
|
+
return {
|
|
11
|
+
name: "wasp/spec/typecheck",
|
|
12
|
+
moduleParsed(info) {
|
|
13
|
+
if (!WASP_SPEC_FILE_REGEX.test(info.id))
|
|
14
|
+
return;
|
|
15
|
+
assert(info.code);
|
|
16
|
+
specFileSources.set(info.id, info.code);
|
|
17
|
+
},
|
|
18
|
+
buildEnd(err) {
|
|
19
|
+
if (err) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const { diagnostics, formatDiagnosticsWithColorAndContext } = typecheckProject({
|
|
23
|
+
tsconfigPath,
|
|
24
|
+
overriddenFiles: specFileSources,
|
|
25
|
+
});
|
|
26
|
+
const formattedDiagnostics = diagnostics.length > 0
|
|
27
|
+
? formatDiagnosticsWithColorAndContext(diagnostics).trimEnd()
|
|
28
|
+
: undefined;
|
|
29
|
+
const hasErrorDiagnostic = diagnostics.some((d) => d.category === ts.DiagnosticCategory.Error);
|
|
30
|
+
if (hasErrorDiagnostic) {
|
|
31
|
+
throw new SpecUserError(formattedDiagnostics);
|
|
32
|
+
}
|
|
33
|
+
else if (formattedDiagnostics) {
|
|
34
|
+
console.warn(formattedDiagnostics);
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
export declare function typecheckProject({ tsconfigPath, overriddenFiles, }: {
|
|
3
|
+
tsconfigPath: string;
|
|
4
|
+
overriddenFiles: ReadonlyMap<string, string>;
|
|
5
|
+
}): {
|
|
6
|
+
diagnostics: readonly ts.Diagnostic[];
|
|
7
|
+
formatDiagnosticsWithColorAndContext: (diagnostics: readonly ts.Diagnostic[]) => string;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../../../src/spec-pipeline/typecheckPlugin/project.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,EACZ,eAAe,GAChB,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;;wDAkBgB,SAAS,EAAE,CAAC,UAAU,EAAE;EAIxC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
import ts from "typescript";
|
|
3
|
+
export function typecheckProject({ tsconfigPath, overriddenFiles, }) {
|
|
4
|
+
const { options: compilerOptions, tsconfigDir } = parseTsConfig(tsconfigPath);
|
|
5
|
+
const host = createCompilerHostWithOverriddenFiles({
|
|
6
|
+
compilerOptions,
|
|
7
|
+
tsconfigDir,
|
|
8
|
+
overriddenFiles,
|
|
9
|
+
});
|
|
10
|
+
const program = ts.createProgram({
|
|
11
|
+
rootNames: [...overriddenFiles.keys()],
|
|
12
|
+
options: compilerOptions,
|
|
13
|
+
host,
|
|
14
|
+
});
|
|
15
|
+
const diagnostics = ts.getPreEmitDiagnostics(program);
|
|
16
|
+
const formatDiagnosticsWithColorAndContext = (diagnostics) => ts.formatDiagnosticsWithColorAndContext(diagnostics, host);
|
|
17
|
+
return { diagnostics, formatDiagnosticsWithColorAndContext };
|
|
18
|
+
}
|
|
19
|
+
function parseTsConfig(tsconfigPath) {
|
|
20
|
+
const tsconfigDir = path.dirname(tsconfigPath);
|
|
21
|
+
const configFile = ts.readConfigFile(tsconfigPath, ts.sys.readFile);
|
|
22
|
+
if (configFile.error) {
|
|
23
|
+
throw new Error(`Error when reading ${tsconfigPath}:\n${formatConfigError(configFile.error, tsconfigDir)}`);
|
|
24
|
+
}
|
|
25
|
+
// Converts the raw JSON (e.g. `"target": "ES2022"`) into the typed compiler
|
|
26
|
+
// options the compiler API expects (e.g. `target: ts.ScriptTarget.ES2022`).
|
|
27
|
+
const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, tsconfigDir, undefined, tsconfigPath);
|
|
28
|
+
if (parsed.errors.length > 0) {
|
|
29
|
+
const formattedErrors = parsed.errors
|
|
30
|
+
.map((error) => formatConfigError(error, tsconfigDir))
|
|
31
|
+
.join("\n");
|
|
32
|
+
throw new Error(`Error when parsing ${tsconfigPath}:\n${formattedErrors}`);
|
|
33
|
+
}
|
|
34
|
+
return { options: parsed.options, tsconfigDir };
|
|
35
|
+
}
|
|
36
|
+
function createCompilerHostWithOverriddenFiles({ compilerOptions, tsconfigDir, overriddenFiles, }) {
|
|
37
|
+
const host = ts.createCompilerHost(compilerOptions, true);
|
|
38
|
+
// Resolve everything relative to the project root (where `node_modules` and
|
|
39
|
+
// its `@types/*` packages live) so type acquisition works regardless of the
|
|
40
|
+
// process' working directory.
|
|
41
|
+
host.getCurrentDirectory = () => tsconfigDir;
|
|
42
|
+
overlayOverriddenFilesOnHost_mutate(host, overriddenFiles);
|
|
43
|
+
return host;
|
|
44
|
+
}
|
|
45
|
+
// We want to read the specific overridden files from memory instead of disk.
|
|
46
|
+
// For other files, we delegate to the normal FS implementation.
|
|
47
|
+
function overlayOverriddenFilesOnHost_mutate(host, overriddenFiles) {
|
|
48
|
+
const fsGetSourceFile = host.getSourceFile.bind(host);
|
|
49
|
+
host.getSourceFile = (fileName, languageVersionOrOptions, ...rest) => {
|
|
50
|
+
const source = overriddenFiles.get(fileName);
|
|
51
|
+
return source !== undefined
|
|
52
|
+
? ts.createSourceFile(fileName, source, languageVersionOrOptions, true)
|
|
53
|
+
: fsGetSourceFile(fileName, languageVersionOrOptions, ...rest);
|
|
54
|
+
};
|
|
55
|
+
const fsFileExists = host.fileExists.bind(host);
|
|
56
|
+
host.fileExists = (fileName) => overriddenFiles.has(fileName) || fsFileExists(fileName);
|
|
57
|
+
const fsReadFile = host.readFile.bind(host);
|
|
58
|
+
host.readFile = (fileName) => overriddenFiles.get(fileName) ?? fsReadFile(fileName);
|
|
59
|
+
}
|
|
60
|
+
function formatConfigError(diagnostic, cwd) {
|
|
61
|
+
return ts.formatDiagnostic(diagnostic, {
|
|
62
|
+
getCurrentDirectory: () => cwd,
|
|
63
|
+
getCanonicalFileName: (fileName) => fileName,
|
|
64
|
+
getNewLine: () => ts.sys.newLine,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeUtils.d.ts","sourceRoot":"","sources":["../../src/typeUtils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;AAExD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|